对比

gPdf vs Puppeteer

gPdf 的 Edge JSON 转 PDF API,对比在服务器上运行 Headless Chromium 的 Puppeteer 模式。比较延迟、价格、运行时,以及各自胜出的工作负载。

速览

Puppeteer 是通用浏览器自动化工具,也可以用来渲染 PDF。gPdf 是运行在 Edge、个位数毫秒级的 PDF 渲染引擎。如果你的工作负载是生产规模的结构化文档(发票、物流面单、对账单),gPdf 通常能提供 50–100 倍更低延迟和 10–20 倍更低成本。如果你需要转换任意实时网页,或把现有 HTML 做成接近截图的 PDF,Puppeteer 仍然是正确工具。

并排看

维度 gPdf Puppeteer 更胜一筹
渲染 p50(1 页 A4 发票)
两者在同一输入上测量 1000 次调用。
3 ms 312 ms gPdf
冷启动 约 12 ms(新隔离区的第一次请求) 1.5–2.5 s(Chromium 启动) gPdf
运行时
Puppeteer 需要 200–800 MB 的浏览器二进制;gPdf 以约 2 MB 的 WASM 模块交付。
Cloudflare Workers V8 隔离区 长期运行的 Node.js + Chromium 容器 gPdf
Edge 区域 300 多个 Cloudflare PoP 你部署容器的地方(通常 3–6 个区域) gPdf
PDF/A 合规 PDF/A-1b · 2b · 3b · 4 可按请求选择 不原生支持;需要用 Ghostscript 或 veraPDF 后处理 gPdf
电子发票(Factur-X / ZUGFeRD) 原生端点;在 PDF/A-3b 上嵌入 CII XML 不支持;需要单独的管线阶段 gPdf
矢量条码
Puppeteer 可以打印页面渲染出的内容,但条码几何、静区和热敏打印尺寸仍由应用自己负责。
内置 30+ 种条码制式(QR、GS1-128、PDF417、DataMatrix 等) 取决于页面级条码库、SVG/Canvas 选择和打印尺寸控制 gPdf
CJK 字体处理 嵌入 NotoSans CJK;自动字形回退 取决于容器安装的字体;需要 OS 级设置 gPdf
HTML/CSS 布局还原 不适用。gPdf 接收 JSON,不接收 HTML 顶级能力。可以渲染任意网页 Puppeteer
最适合截图式 Web→PDF 吗 Puppeteer
10 万份单页文档的标价
Puppeteer 本身免费。真正付费的是你围绕它构建的 Chromium 服务。
Basic 方案 5 美元/月,包含 10 万页 无授权费;你支付托管、存储、监控和工程时间 gPdf
生产所有权成本 托管式 Edge API、可视化 Studio 流程、模板、字体、条码原语、PDF/A / 电子发票路径 Chromium 容器、预热池、区域容量、页面模板、字体、重试、可观测性 gPdf
确定性(同输入 → 同字节) 是。跨隔离区输出字节相同 否。Chromium 的字体微调和栅格化可能随版本漂移 gPdf

什么时候选谁

选 gPdf 的场景
  • 你以任意规模渲染结构化文档(发票、物流面单、对账单、工资单、票券)。
  • 你需要交互流程中的个位数毫秒渲染,例如发送前预览。
  • 你需要 PDF/A 归档合规,或 EU Factur-X / ZUGFeRD 电子发票输出。
  • 你已经厌倦 Chromium 内存压力、容器预热池成本或冷启动超时级联。
  • 你需要用于测试或审计的字节级确定性 PDF。
  • 你在 Edge 渲染,需要 300 多个区域,而不是 3–6 个区域。
选 Puppeteer 的场景
  • 你在转换任意实时网页:落地页、新闻文章、营销快照。
  • 文档事实来源是已经在浏览器中正确渲染的 HTML/CSS,且不想重新写成 JSON。
  • 你渲染需要真实浏览器的富客户端 JavaScript 可视化,例如图表或仪表盘。
  • 用量很小(每天少于 1000 次渲染),不关心单次延迟或成本。
  • 出于法律或取证原因,你需要屏幕 DOM 与 PDF 像素级匹配。
能力

gPdf 是一个 Edge 原生的 JSON 转 PDF API,专为高并发发票 PDF、文档、物流面单、条码、PDF/A 和电子发票输出而构建。 全球边缘节点上的毫秒级 PDF 渲染,面向可预测的工业级文档生成进行了优化。 基础设施级定价,低到足以替代自建和运维 PDF 基础设施。

能力

当产品就是网页时,Puppeteer 很出色

Puppeteer 驱动真实的 Chromium 浏览器。这是它的超能力。如果事实来源是现有 HTML 页面、带 JavaScript 图表的仪表盘、已渲染 Web 应用的法律快照,或截图式导出,Puppeteer 通常是正确的产品选择。

产品问题是:你的 PDF 真的是网页,还是结构化业务文档?发票、物流面单、对账单、收据、票券和表单通常来自数据,而不是实时 DOM。对这些流程来说,运行整个浏览器可能是超过文档需要的架构。

同一成果物,不同的产品边界

Puppeteer 通过 Chromium 把 HTML 转成打印 PDF。应用拥有 HTML 模板、打印 CSS、字体安装、浏览器运行时、worker 容量、重试和区域部署。

gPdf 把结构化 JSON 直接转成 PDF。应用发送 DocumentRequesttemplate_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物流面单 APIGS1 条码 API模板 PDF API

FAQ

Puppeteer 免费吗?

Puppeteer 作为库可以免费使用。在生产中,成本是浏览器服务:容器、内存、冷启动、区域容量、监控、重试和维护。

gPdf 可以渲染任意 HTML 页面吗?

不能。gPdf 是 JSON 原生。如果你的事实来源是任意 HTML 或实时网页,Puppeteer 更合适。

为什么把 Studio 和 Puppeteer 比较?

很多团队使用 HTML 的部分原因,是设计师和开发者都能看到结果。gPdf Studio 给结构化 PDF 模板提供可视化编辑面,同时不把运行时变成浏览器。

相关页面