Enhance print menu with preview-only printing options (v1.7.7)

- Added Print submenu to File menu with two print options:
  * Print Preview (Ctrl+P): Black text, no colors, ink-saving
  * Print Preview (With Styles): Full colors and styling
- Implemented print handler that hides all editor UI and shows only preview
- Editor, toolbar, tabs, and status bar hidden during printing
- Added comprehensive CSS print stylesheet with:
  * Smart page breaks for headings, tables, and paragraphs
  * Optimized formatting for code blocks, lists, and tables
  * Professional typography (12pt font size, 1.6 line height)
  * Image optimization and proper link handling
  * Support for blockquotes, horizontal rules, and other elements
- Print-specific CSS classes for styling control
- Preview automatically restored after printing
Features:
- Prints only the rendered markdown preview (not source)
- Two print modes: simple (black) and styled (colored)
- Native OS print dialogs for all platforms
- Professional output formatting with page breaks
- Cross-platform support (Windows, macOS, Linux)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
This commit is contained in:
2025-10-24 22:14:53 +05:30
parent 55da44e0a8
commit 1a6ca50e03
4 changed files with 311 additions and 34 deletions
+41 -11
View File
@@ -201,8 +201,17 @@ function createMenu() {
{ type: 'separator' },
{
label: 'Print',
accelerator: 'CmdOrCtrl+P',
click: () => mainWindow.webContents.send('print-document')
submenu: [
{
label: 'Print Preview',
accelerator: 'CmdOrCtrl+P',
click: () => mainWindow.webContents.send('print-preview')
},
{
label: 'Print Preview (With Styles)',
click: () => mainWindow.webContents.send('print-preview-styled')
}
]
},
{ type: 'separator' },
{
@@ -1157,16 +1166,37 @@ ipcMain.on('set-current-file', (event, filePath) => {
currentFile = filePath;
});
// Handle print document
ipcMain.on('print-document', (event) => {
// Handle print preview
ipcMain.on('print-preview', (event) => {
if (mainWindow) {
// Open native print dialog
mainWindow.webContents.print({
silent: false,
printBackground: true,
color: true,
margin: { marginType: 'default' }
});
// Prepare for printing preview only (black text, no colors)
mainWindow.webContents.send('prepare-print-preview', false);
// Give renderer time to prepare, then print
setTimeout(() => {
mainWindow.webContents.print({
silent: false,
printBackground: false,
color: true,
margin: { marginType: 'default' }
});
}, 100);
}
});
// Handle print preview with styles
ipcMain.on('print-preview-styled', (event) => {
if (mainWindow) {
// Prepare for printing preview with colors
mainWindow.webContents.send('prepare-print-preview', true);
// Give renderer time to prepare, then print
setTimeout(() => {
mainWindow.webContents.print({
silent: false,
printBackground: true,
color: true,
margin: { marginType: 'default' }
});
}, 100);
}
});