save-as-pdf 的用途是把当前 HTML 设计重新排版为可分页、纸面就绪的 PDF。它明确不使用 jsPDF、html2canvas、dom-to-image 等画布或截图转 PDF 方案,也不自行生成 PDF 二进制,而是把打印就绪的副本交给 show_pdf_export_dialog,由浏览器自带打印引擎渲染出清晰、可选中、基于文本的页面。
主要流程:先读取当前 HTML 设计文件,理解结构与内容;每次请求都要重新读取,因为内容或 Tweaks 值可能已变化,并记下读取头中的版本标记。然后从刚读取的源文件写入打印副本,路径为源路径在扩展名前插入 -print,同目录同基名,例如 slides/deck.html 对应 slides/deck-print.html。副本需在 head 中加入来源标记 meta name="omelette-print-source",携带版本与项目相对路径;标记缺失或与当前版本不符时导出会拒绝。
若源已基于 <deck-stage> 或 <doc-page>,副本只加内容级打印规则,组件自身负责打印几何;否则用 copy_starter_component 的 doc_page.js 重建。分页需事先决定:流式文档内容按普通 HTML 流排入 <doc-page>,由打印引擎自动分页;显式分页则每个 <section class="page"> 对应一页。固定画布设计也走 doc_page 重建,可真实尺寸打印或按标准纸张缩放适配,缩放适配是唯一定义尺寸有意义的场景。
副本中需加入颜色调整规则,保留背景与颜色;动画冻结到最终帧,禁用过渡。之后用 show_html 测试并确认无 JS 错误,最后调用 show_pdf_export_dialog 并传入相对路径。打印触发代码会自动注入,不要自行编写 window.print()。该工具只呈现导出对话框,用户点击 Continue to export 才打开打印视图,工具结果会说明当前状态。-print.html 只是打印页的管道,不是交付物,不要用于下载。
限制:不得手写 @page 规则或打印 CSS 重置,不得声明 omelette-owns-print,不得自行缩放。分页方式不明确时应询问用户。