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)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2025-10-24 22:14:53 +05:30
co-authored by Claude
parent e1c0bc387f
commit f74f5f4221
4 changed files with 311 additions and 34 deletions
+33 -7
View File
@@ -1149,16 +1149,42 @@ ipcRenderer.on('adjust-font-size', (event, action) => {
updateFontSizes(currentFontSize);
});
// Print document handler
ipcRenderer.on('print-document', () => {
// Use the preview pane for printing
// Print preview handler - prepare for printing
ipcRenderer.on('prepare-print-preview', (event, withStyles) => {
const previewContent = document.getElementById('preview');
if (previewContent && previewContent.innerHTML.trim()) {
// Create a print window with the preview content
window.print();
} else {
if (!previewContent || !previewContent.innerHTML.trim()) {
alert('Nothing to print. Please create or open a document and ensure the preview is visible.');
return;
}
// Hide editor and other UI elements for print
document.getElementById('editor-container').style.display = 'none';
document.getElementById('toolbar').style.display = 'none';
document.getElementById('tab-bar').style.display = 'none';
document.getElementById('status-bar').style.display = 'none';
// Show preview in full width
const preview = document.getElementById('preview');
if (preview) {
preview.classList.add('print-mode');
if (!withStyles) {
preview.classList.add('print-no-styles');
}
}
// Re-show everything after print
setTimeout(() => {
document.getElementById('editor-container').style.display = '';
document.getElementById('toolbar').style.display = '';
document.getElementById('tab-bar').style.display = '';
document.getElementById('status-bar').style.display = '';
const preview = document.getElementById('preview');
if (preview) {
preview.classList.remove('print-mode', 'print-no-styles');
}
}, 500);
});
// Export Dialog functionality