详细分析 ▾
运行时依赖
版本
html-ppt-to-pdf 初始发布 - 将使用 `<section class="slide">` 的 HTML 幻灯片转换为高保真、矢量文本 PDF - 支持来自 `html-ppt`、`frontend-slides`、`frontend-design` 或任何遵循该约定的自定义 HTML - 文本保持可选,字体子集嵌入;页面尺寸与页码与原幻灯片一致 - 自动修复缺失内容、字体错误、页码错乱等常见问题 - 不适用于普通网页、Markdown 或 `.pptx` 文件,请使用专用工具处理
安装命令
点击复制技能文档
把 HTML 幻灯片转矢量 PDF。文字可选中可搜索(非栅格图),字体 subset 嵌入,页面尺寸与角标同原 HTML。
何时用
用户有 HTML 幻灯片需导出 PDF,典型来源:html-pptskill 输出(固定 1920×1080,含runtime.js注入.slide-number)frontend-slides/frontend-designskill 输出(100vh自适应,IntersectionObserver 触发.visible做 reveal 动画)- 手写/第三方 HTML,只要用
约定
已规避:字体不一致、页码“101/22”错乱、截图丢页/重页、frontend-slides 非首屏内容隐形(.reveal opacity:0)。
勿用于:普通网页存 PDF(浏览器打印即可);Markdown 转 PDF(用 pandoc/typst);.pptx 转 PDF(用 pptx skill 或 LibreOffice)。
输入约定
- 输入:HTML 文件绝对路径
- HTML 约定:每页 slide 用
;若用其他 class(.deck-slide、.page等),加--slide-selector - 默认尺寸:1920×1080。frontend-slides 类源码为
100vh自适应,脚本强制 1920×1080 排版(16:9) - 输出:单页矢量 PDF,文字可选中,字体 subset 嵌入
调用方式
``bash
# 首次使用装依赖(仅一次)
cd ~/.myagents/skills/html-ppt-to-pdf/scripts
npm install
npx playwright install chromium # 仅兜底 # 执行转换
node ~/.myagents/skills/html-ppt-to-pdf/scripts/html-to-pdf.mjs
# 自定义尺寸
node ~/.myagents/skills/html-ppt-to-pdf/scripts/html-to-pdf.mjs input.html out.pdf --width 1280 --height 720
`
强烈建议系统装 Chrome 或 Edge。脚本优先调用系统 Chrome/Edge 出 PDF——Playwright 自带 Chromium(build 1208)在 display:flex; flex-direction:column + 内联 opacity:0; transform:translateY() 的 reveal-card 结构下会丢内容,系统 Chrome 无此问题。未装则 fallback 到 bundled Chromium 并警告。
为何用此法(关键)
勿走“截图拼 PDF”。该路线(html-ppt/scripts/render.sh + ImageMagick)三硬伤:
- PNG 栅格化文字,放大即糊
- 逐页 hash+循环截图时序 bug,易丢首页/重尾页
runtime.js动态页码与截图时序冲突
本 skill 用 Playwright page.pdf(),由 Chromium 排版引擎一次性输出多页矢量 PDF:
字体:等document.fonts.ready后排版 → Chromium 将所用字形 subset 嵌入/FontFile2分页:注入@page+page-break-afterCSS → 原生分页,无循环页码:自动修正.slide-number的data-current/data-total,解决 DOM 硬写文本与 CSS::before/::after叠加导致的“101/22” bug- 排版适配:
- deck 风格(html-ppt:所有 slide position:absolute;top:0)→ 强制 position:static 摊开
- flow 风格(frontend-slides:height:100vh)→ 用固定 px 覆盖 vh
- reveal 动画(frontend-slides 的 .reveal + IntersectionObserver 加 .visible)→ 强制每张 slide 加 .visible,并把 .reveal 的 opacity/transform 设终态,避免非首屏隐形
统一隐藏运行时 UI:.progress-bar、.nav-dots、.edit-toggle、.edit-hotzone等不入 PDF
验证
跑完后必验:
页数 = HTML 中数量,不多不少- 首页、末页与 HTML 一致
- Adobe Reader 打开可选中复制文字(矢量嵌入)
- 页面尺寸正确(Acrobat → 文件属性 → 页面大小)
- 每页角标/页码存在
故障排查
见 ~/.myagents/skills/html-ppt-to-pdf/README.md`。