SuperAPI AI 工具集

save-as-pdf

办公与效率

查看项目

更新于 10-24 16:20

技能介绍

用途

该技能用于把当前的 HTML 设计重新排版为分页、适合纸张打印的 PDF。资料指出,“Instant”导出已经能按设计原生像素尺寸给出 PDF,而这条路径面向的是用户想要“真实页面”的场景。

主要能力与原则

  • 不将页面栅格化为 PDF。资料明确禁止使用 jsPDF、html2canvas、dom-to-image 或任何 canvas/截图转 PDF 的方式,理由是这类输出模糊、文字不可选、体积过大;也不自行生成 PDF 二进制。
  • PDF 导出基于打印:把一份打印就绪的副本交给 show_pdf_export_dialog,由浏览器自身的打印引擎渲染出清晰、可选、基于文本的页面。
  • 唯一受支持的打印就绪方式,是使用拥有自身打印几何的组件:文档用 doc_page 起始组件,或源文件本身已基于 <deck-stage> 或 <doc-page>。资料明确要求不要手写 @page 规则或打印 CSS 重置。

使用方式

  1. 读取当前 HTML 设计文件,理解其结构与内容。每次 PDF 请求都要重新读取,即使用户在本轮对话中此前已读过或已生成过打印副本,因为用户可能已修改内容或调整值(Tweaks 面板会写入源文件)。
  2. 写入打印副本。始终基于刚读取的源文件重新写入;早先请求留下的 -print 副本是过期快照,复用或只部分更新会把过时值带入 PDF。打印文件路径为源路径在扩展名前插入 -print,同目录、同基名。例如源为 slides/deck.html,则写 slides/deck-print.html;源为 web/index.html,则写 web/index-print.html。不要用 deck 标题或项目名作为文件名,源在子目录时也不要写到项目根目录,因为目录深度变化会破坏所有相对 URL(@font-face src: url(...)、<img src>、<link href>、CSS background: url(...)),导致打印标签页出现图片缺失和系统字体回退。
  3. 若源已基于 <deck-stage> 或 <doc-page>,副本即源文件加上内容级打印规则。两个组件都拥有自身打印几何,绝不要添加 @page 规则或重排其布局。对 <deck-stage> 幻灯片,在每个直接子级 slide 上设置 data-deck-active(不只是当前页),以便以 [data-deck-active] 为键的入场样式在每一页都能解析——每张 slide 本身即一页。对 <doc-page> 文档,结构上无需额外操作。
  4. 否则,用 doc_page 起始组件把内容重建为分页文档。调用 copy_starter_component,kind 为 "doc_page.js"(每个项目一次,组件文件会持久存在),然后把打印副本写为 <doc-page size="letter" margin="0.75in"> 文档(用户明显非美国时用 size="a4"):把源内容作为正常流式 HTML 倒入,保持设计的排版、颜色和图像不变。组件拥有纸张、分页和所有打印几何——不要写自己的 @page 规则、打印 CSS 重置、page-card div 或 break-after: page 假纸张。仅在某个章节确实另起新章时使用 break-before: page;长表格加 <thead> 以便表头在每页重复。
  5. 固定画布设计(海报、社交图、信息图)也走 doc_page 重建,但需做一个决定:页面。按真实尺寸打印——<doc-page width="18in" height="24in" margin="0">,页面即设计;或缩放到标准纸张——<doc-page size="letter" content-width="960px" content-height="1440px">,内容按创作尺寸布局,组件将其缩放以适配可打印区域。当用户意图不明确时,先用平实语言询问(按海报尺寸打印,还是适配到信纸?)再导出。绝不要用自己的 CSS transform 手动缩放;无论哪种方式都由组件负责缩放。
  6. 在每个副本中,添加颜色调整规则,使背景和颜色与预览一致——不要从设计中剥离背景:
  • { -webkit-print-color-adjust: exact; print-color-adjust: exact; }
  1. 将动画跳到结束状态。不要使用 animation: none(那会把淡入还原到隐藏的初始状态)。而是把每个动画冻结在最后一帧并禁用过渡:
  • { animation-delay: -99s !important; animation-duration: .001s !important; animation-iteration-count: 1 !important; animation-fill-mode: both !important; animation-play-state: running !important; transition-duration: 0s !important; }
  1. 用 show_html 展示文件进行测试,然后确认没有 JS 错误。除非被要求,无需截图。
  2. 调用 show_pdf_export_dialog 工具,传入打印就绪文件的项目相对路径。调用该工具时,触发打印的代码会自动注入打印副本——不要自己写自动打印或 window.print() 脚本。除非导出是从用户自己的 Export 点击开始的,否则该工具本身不会打开任何东西:它呈现一个导出对话框,用户在其中点击 Continue to export 才会打开打印视图。工具结果会说明发生了哪种情况——当它说对话框正在等待用户时,打印视图尚未打开;要如实说明,绝不要声称它已打开。如果文件(及其打印源)不是基于打印的,工具会带原因失败——第 2 步的 doc_page 重建正是让副本保持合格的关键。

适用场景

  • 需要真实分页打印的 HTML 文档。
  • 基于 <deck-stage> 的幻灯片,每张 slide 各占一页。
  • 基于 <doc-page> 的文档,自行流动分页。
  • 海报、社交图、信息图等固定画布设计,按真实尺寸或缩放到标准纸张打印。

限制与注意事项

  • 目标是能在真实页面上干净打印的文件——分页由 doc_page 组件负责,使用者的工作是内容。
  • 保持视觉保真——保留设计的排版、颜色和图像。
  • 对 <deck-stage> 幻灯片,每张 slide 保持在自己的页面上;<doc-page> 文档自行流动和分页。
  • 对提示驱动的导出,show_pdf_export_dialog 会等待用户:导出对话框的 Continue to export 点击才打开打印视图,在此之前没有任何东西打开——要报告工具结果描述的状态,而不是预期状态。
  • -print.html 是打印标签页的管道,不是交付物——show_pdf_export_dialog 是唯一的交付步骤。不要对它调用 present_fs_item_for_download;其相对资源路径只能通过项目文件服务器解析,独立打开会失效。