当产品就是网页时,Puppeteer 很出色
Puppeteer 驱动真实的 Chromium 浏览器。这是它的超能力。如果事实来源是现有 HTML 页面、带 JavaScript 图表的仪表盘、已渲染 Web 应用的法律快照,或截图式导出,Puppeteer 通常是正确的产品选择。
产品问题是:你的 PDF 真的是网页,还是结构化业务文档?发票、物流面单、对账单、收据、票券和表单通常来自数据,而不是实时 DOM。对这些流程来说,运行整个浏览器可能是超过文档需要的架构。
同一成果物,不同的产品边界
Puppeteer 通过 Chromium 把 HTML 转成打印 PDF。应用拥有 HTML 模板、打印 CSS、字体安装、浏览器运行时、worker 容量、重试和区域部署。
gPdf 把结构化 JSON 直接转成 PDF。应用发送 DocumentRequest 或 template_id + data;Edge 渲染器负责布局执行、内置字体、条码原语、PDF/A 配置和电子发票打包。没有浏览器进程,没有 CSS 级联,也没有需要预热的 Chromium 容器。
产品适配:Web 捕获 vs 文档生成
当文档必须看起来和现有网页完全一致,或客户端 JavaScript 产生最终视觉状态时,选择 Puppeteer。这包括网页归档、动态仪表盘、重度依赖 DOM 的报告,以及把布局重写为 JSON 反而风险更大的流程。
当产品是文档生成时,选择 gPdf:物流面单、发票、票券、对账单、证书、收据或合规包。这些文档应该从干净数据出发,每次用同样方式生成。
开发时间:HTML 打印调试 vs API 模板
当 HTML 已经存在时,Puppeteer 起步很快。开发时间会在后面出现:打印 CSS、分页行为、容器内字体安装、页眉/页脚边界情况、条码尺寸、浏览器版本漂移。
gPdf 从结构化模板开始。团队可以直接写 JSON,用 AI 起草符合 gPdf schema 的布局,或用 gPdf Studio 可视化添加和拖拽文本、表格、图片、形状、页眉、页脚和条码。模板保存后,生产调用可以保持 template_id + data。
价格模型:免费自动化库 vs 自运营浏览器集群
Puppeteer 没有授权费。但这不代表生产 Puppeteer PDF 服务免费。
成本在 Chromium 周围的服务面:
- 浏览器二进制所需的容器或无服务器运行时。
- 用来吸收冷启动的预热池或队列。
- 页面、字体、图片和 PDF 字节所需的内存余量。
- 仓库或客户全球分布时的区域部署。
- 监控、重试、浏览器升级和安全补丁。
gPdf 直接给 PDF 生成能力定价。Basic 方案从 5 美元/月、10 万页开始,公开页单价从每页 0.00005 美元起。没有席位计费,没有单独的测试/生产环境费,也没有要运营的 Chromium 池。
Edge 生成会改变延迟和成本形态
使用 Puppeteer 时,浏览器通常位于你的托管区域。如果仓库、客户或后端任务离该区域很远,渲染路径就包含网络延迟和浏览器工作本身。增加区域意味着复制浏览器服务、部署管线、监控和容量计划。
gPdf 运行在 Cloudflare Workers V8 隔离区上。对结构化 PDF 来说,渲染器足够小,可以在调用方附近运行,而不是把所有渲染集中到一个区域。业务效果不只是更快的 p50;还在于从产品里移除区域性 Chromium 集群。
通常决定对比的产品能力
对运营文档来说,功能列表和原始渲染速度一样重要:
- 面向物流面单、票券和仓库文档的原生条码元素。
- 内置 CJK 和多语言字体回退。
- 面向归档流程的 PDF/A 输出配置。
- Factur-X/ZUGFeRD 电子发票打包。
- 高级档位的密码保护 PDF 和元数据控制。
- 通过 gPdf Studio 进行可视化布局迭代。
Puppeteer 可以通过页面代码、浏览器设置或后处理支持其中很多能力。问题是你的团队是否想拥有这整套栈。
什么时候 Puppeteer 仍然是正确答案
有一个类别 gPdf 不参与竞争:任意 HTML 转 PDF。如果文档已经渲染好,设计事实来源是 HTML,并且你需要真实浏览器来执行 JavaScript 或匹配 DOM,Puppeteer 仍然是正确工具。
如果工作负载很小且延迟不重要,运营成本也可能可以接受。每天几个内部导出,不值得把稳定的 HTML 重新写成 JSON。
迁移形态
对于把发票或物流面单工作负载从 Puppeteer 迁移到 gPdf 的团队,迁移通常如下:
- // Before: render an HTML template through Chromium
- const browser = await puppeteer.launch({ headless: 'new' });
- const page = await browser.newPage();
- await page.setContent(invoiceHtml);
- const pdf = await page.pdf({ format: 'A4' });
+ // After: POST the structured DocumentRequest
+ const res = await fetch('https://api.gpdf.com/api/v1/template-render', {
+ method: 'POST',
+ headers: { Authorization: `Bearer ${KEY}`, 'Content-Type': 'application/json' },
+ body: JSON.stringify({ template_id: 'invoice-v2', data }),
+ });
+ const pdf = Buffer.from(await res.arrayBuffer());
真正的工作不是 API 调用,而是先把模板设计好。之后每次渲染都是一次 HTTPS POST。
相关 PDF 生成场景
如果你的评估从 Headless Chrome 或 Puppeteer PDF 服务开始,先判断源文件是不是网页:任意 HTML、网页归档和真实浏览器截图仍然适合 Puppeteer;发票、物流面单、票券和对账单这类结构化文档,可以继续看 JSON 转 PDF API、发票 PDF API、物流面单 API、GS1 条码 API 和 模板 PDF API。
FAQ
Puppeteer 免费吗?
Puppeteer 作为库可以免费使用。在生产中,成本是浏览器服务:容器、内存、冷启动、区域容量、监控、重试和维护。
gPdf 可以渲染任意 HTML 页面吗?
不能。gPdf 是 JSON 原生。如果你的事实来源是任意 HTML 或实时网页,Puppeteer 更合适。
为什么把 Studio 和 Puppeteer 比较?
很多团队使用 HTML 的部分原因,是设计师和开发者都能看到结果。gPdf Studio 给结构化 PDF 模板提供可视化编辑面,同时不把运行时变成浏览器。
相关页面
- 完整 gPdf API 参考 — 端点、请求形状、错误。
- 为什么 PDF 渲染在每天跨过 1 万张发票时必须搬到边缘 — 延迟数学的长文版。
- 面向工程师的 PDF/A 与 Factur-X 解释 — 如果 EU 电子发票义务适用于你的工作负载。