WeasyPrint 很适合 HTML/CSS 分页文档
WeasyPrint 的定位很清楚:让 Python 应用把 HTML 和 CSS 转成 PDF。如果你的团队已经把 HTML 模板和打印 CSS 当作文档源,它是成熟、透明、开源的选择。
真正的问题不是谁能不能生成业务 PDF,而是工作流应该放在哪里。WeasyPrint 给开发者一个渲染库;gPdf 给团队一个用于设计、模板化、生成和交付 PDF 的平台。
同样的文档场景,不同的工作流
WeasyPrint 官网样例覆盖报表、发票、票券、书籍、信件和海报。gPdf 也面向报表、发票、票券、信件、海报、对账单、标签和运营文档。交集很大,因为它们都处理从业务数据生成的 PDF。
WeasyPrint 的常见路径是应用生成 HTML、套 CSS、调用 Python 渲染器。gPdf 的路径是可视化设计或 JSON 编排模板,发布后用 template_id 加 data 调 API。
| 场景 | WeasyPrint 路径 | gPdf 路径 |
|---|---|---|
| 报表 | HTML 模板与打印 CSS | Studio 或 JSON 模板,API 生成 |
| 发票 | 应用渲染 HTML | 模板 + data,发票专属生成流程 |
| 票券 | HTML/CSS 加可选条码资源 | 结构化布局与原生条码元素 |
| 书籍 / 信件 / 海报 | 适合分页 HTML/CSS | 适合结构化布局和可复用模板 |
| 运营标签 | 可通过自定义 HTML/CSS 实现 | 面向精确的数据驱动文档生成 |
开发时间:代码调试循环 vs AI + Studio
WeasyPrint 的调用代码很短,但真实项目里的工作量常常在周边:HTML 模板、CSS 分页媒体、字体、断页、容器依赖、运行时环境和反复视觉检查。
gPdf 缩短第一版设计时间。AI 可以起草 DocumentRequest JSON,gPdf Studio 可以可视化打开,用户可以拖拽文字、图片、表格、条码、页眉页脚、形状和堆叠布局。简单文档几分钟就能进入可预览状态。
from weasyprint import HTML
html = render_invoice_html(order)
HTML(string=html).write_pdf("invoice.pdf")
Studio:通过添加和拖拽完成 PDF 设计
gPdf Studio 是免费的在线可视化 PDF 设计器。它不是传统意义上上传任何 PDF 后任意编辑的工具;它的目标是设计可由 gPdf API 生成的布局和模板。
这对团队协作很关键。PDF 排版不再完全压在开发者身上,产品、运营、财务和实施团队可以围绕同一个可视化模板讨论,工程侧仍保持稳定 API 合同。
模板 + data:一次设计,批量生成
WeasyPrint 的典型链路是:业务数据到应用 HTML 模板,再到 HTML/CSS,再到 WeasyPrint,再到 PDF。gPdf 的典型链路是:Studio 设计到发布模板,再到 template_id + data,再到 gPdf Edge API,再到 PDF。
这个差异降低了耦合。业务系统不需要每次组装完整 HTML,只需要发送变化的数据,模板负责布局。
Edge 生成:不是一个区域里的 Python 服务
WeasyPrint 运行在哪里,取决于你部署在哪里。如果业务需要多区域低延迟、容灾或吞吐量,团队要在每个区域维护 Python、Pango、字体、容器、队列、安全限制和监控。
gPdf 把 PDF 生成当作 Edge 基础设施。应用发送 JSON 或模板数据,gPdf 负责布局、字体、条码几何、PDF 输出和靠近请求路径的交付。
成本模型:开源库免费,不等于生产成本为零
WeasyPrint 是开源免费的,这是实打实的优势。但生产成本不只包含授权费,运维、运行时打包、字体管理、监控、压测和支持都要算进去。
公平写法必须精确:WeasyPrint 软件免费,官方 Basic 专业支持从每月 150 欧元起;gPdf Basic 从每月 5 美元起,包含 10 万页。如果团队要的是带托管基础设施和可视化模板的生产路径,入口成本完全不同。
PDF/A 与电子发票:比较工作流,不做错误勾选
WeasyPrint 文档确实提到 PDF/A、PDF/UA、PDF/X 和 Factur-X/ZUGFeRD 生成。关键前提是最终有效性依赖用户提供的 HTML、CSS、元数据、附件和参数。
gPdf 则把这些能力放入 API 产品工作流。这个对比才有意义:渲染层能力加用户自担责任,还是产品化 API 工作流。
相关 PDF 生成场景
如果你的评估从 WeasyPrint 替代方案或 Python PDF 生成开始,可以先判断源头是否必须是 HTML/CSS:书籍、信件和典型分页 HTML 仍然适合 WeasyPrint;发票、物流面单、报表和运营文档可以继续看 JSON 转 PDF API、模板 PDF API、发票 PDF API 和 物流面单 API。涉及归档、电子发票或密码保护时,再看 PDF/A API、Factur-X API 和 ZUGFeRD API。
FAQ
gPdf 是 WeasyPrint 替代方案吗?
如果团队想要托管式 PDF 生成 API 和可视化模板设计,而不是自己维护 Python HTML 转 PDF 渲染器,那么是。WeasyPrint 仍然适合 HTML/CSS 与完全自托管是正确边界的团队。
WeasyPrint 仍然值得选择吗?
值得。Python 团队如果已经有 HTML/CSS 模板,并希望完全控制渲染器、依赖、字体、部署和运行时安全,WeasyPrint 是很好的选择。
gPdf 能生成发票、报表、票券、信件和海报吗?
可以。gPdf 可以从 JSON 数据或可复用模板生成发票、报表、票券、收据、信件、对账单、标签、证书和运营文档。
gPdf 支持可视化 PDF 模板设计吗?
支持。gPdf Studio 是免费的在线可视化 PDF 设计器,地址是 https://studio.gpdf.com。用户可以添加和拖拽文字、图片、表格、条码、页眉页脚、形状和布局元素,并将同一份设计用于 API。
为什么页面提到 WeasyPrint 每月 150 欧元?
因为 WeasyPrint 官方页面列出了 Basic 专业支持从每月 150 欧元起。这是支持服务价格,不是软件授权费;WeasyPrint 库本身是开源免费的。
迁移方式
迁移通常不是把 HTML 一行行改写成 JSON。更好的路径是先识别业务文档模型,设计一次模板,然后让生产系统只发送变化的业务数据。
const res = await fetch("https://api.gpdf.com/api/v1/template-render", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.GPDF_TOKEN}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
template_id: "invoice",
data: [{
invoice_number: "INV-2026-001",
customer_name: "Acme Logistics",
line_items: [
{ description: "Warehouse handling", qty: 2, amount: "$120.00" }
],
total: "$240.00"
}]
})
});
const pdf = await res.blob();