当产品需要 PDF SDK 时,iText 很出色
iText 是成熟的 PDF SDK。这一点很重要。如果你的产品要操作已有 PDF、签署文档、填写表单、合并文件、实现冷门 PDF 工作流,或需要在 Java/.NET 中对底层 PDF 对象做深度控制,iText 通常是正确的所有权层级。
物流团队面对的问题不同:你需要的是 PDF SDK,还是每天可靠生成的物流面单、发票、收据和运营文档?对结构化文档生成来说,购买或采用库只是第一行成本。你仍然要围绕它构建服务。
同一类文档,不同的产品边界
使用 iText 时,应用拥有 SDK 集成。这通常意味着 Java 或 .NET 服务、字体设置、条码配置、PDF/A 设置、部署、监控、容量规划,以及渲染失败时的值班路径。
使用 gPdf 时,应用通过 HTTPS 发送 JSON 或 template_id + data。渲染器、Edge 部署、内置字体、条码原语、密码保护输出、元数据控制、PDF/A 配置、Factur-X/ZUGFeRD 打包和可视化设计流程,都是服务边界的一部分。
产品适配:低层 PDF 控制 vs 生成型业务文档
当 PDF 层是产品核心时,选择 iText:法律科技归档系统、电子签平台、文档管理系统、PDF 修复/操作工具,或不能调用外部 API 的嵌入式 Java/.NET 系统。
当产品不是 PDF 编辑器时,选择 gPdf。物流、电商、ERP、金融科技、票务和后台系统通常需要的是从结构化数据生成可预测 PDF。在这些场景里,最好的产品往往不是可编程性最高的 SDK,而是从数据到完成文档的最短可靠路径。
开发时间:SDK 实现 vs API 模板
一个典型衡量是:“从零开始,到 Zebra ZT411 上真正能扫的热敏面单”。
iText 路径 — Java。下面是简化代码;真实项目还会加上构建配置、字体注册、扫码率测试夹具,以及运行这些测试的 CI。
PdfWriter writer = new PdfWriter("label.pdf");
PdfDocument pdf = new PdfDocument(writer);
PageSize labelSize = new PageSize(288, 432); // 4×6 in @ 72 dpi
Document doc = new Document(pdf, labelSize);
// Address block, sender block, carton ID, service code…
// (15–25 more lines positioning text and configuring Barcode128 with
// GS1 Application Identifiers, fonts, FNC1 framing, then a JUnit test
// that loads the PDF and validates the barcode renders at 203 dpi)
Barcode128 code = new Barcode128(pdf);
code.setCode("(01)00012345678905(21)SN12345");
code.setCodeType(Barcode128.CODE128);
// … position, sizing, human-readable interpretation line …
doc.close();
从 mvn init 到第一张能干净扫描的面单,典型首次成功时间是 2–5 个工程日。
gPdf 路径 — 任意语言;下面例子用 curl:
curl -X POST https://api.gpdf.com/api/v1/pdf/render \
-H "Authorization: Bearer $GPDF_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"pages": [{
"size": "label_4_6_in",
"elements": [
{ "type": "text", "x": 4, "y": 12,
"content": "Acme Distribution Centre\n1200 Logistics Pkwy\nMemphis TN 38116" },
{ "type": "barcode", "format": "gs1_128",
"content": "(01)00012345678905(21)SN12345",
"x": 4, "y": 60, "width": 92, "height": 22,
"barcode_text": { "enabled": true, "position": "bottom" }
}
]
}]
}' -o label.pdf
典型首次成功时间:约 5 分钟,包括阅读 JSON 示例并在同一台 Zebra ZT411 上打印 PDF。
差距不在工程能力,而在产品边界。用 iText 时,你的团队构建面单服务。用 gPdf 时,面单服务是你调用的产品。
Studio 和模板变更
物流是少数文档规格会从团队外部变化的领域。UPS 修改 SSCC 编码规则,顺丰增加校验位,FedEx 发布新的 HAZMAT 区块布局。无论选择哪种渲染栈,都要吸收这些变化。
使用 iText:开发者阅读承运商公告,修改 Java/.NET 代码,跑单元测试和集成测试,构建服务,部署到预发布环境,部署到生产环境,并跨区域滚动。在发布窗口里,仓库可能仍然打印旧格式。
使用 gPdf:在代码里编辑模板 JSON,或用 gPdf Studio 通过添加和拖拽元素来视觉调整布局。渲染器本身不动,只改模板。如果承运商变化落在 gPdf 已支持的条码格式内,生产集成仍然可以保持 template_id + data。
价格模型:授权路径 vs 基础设施式按页计费
iText 的价格决策不只是“库成本”。iText 公开提供 AGPL 路径和商业授权路径。AGPL 路径在兼容的开源使用中可以零成本,但带有源码披露义务。商业授权让团队脱离这些 AGPL 约束,iText 将订阅和 OEM 选项描述为报价制或按量制。
gPdf 直接给生成服务定价。公开价格从 Basic 的 5 美元/月、10 万页开始,且价格页面和机器可读价格端点使用同一套按页计算。
物流团队常问的几个量级如下:
| 月度用量 | gPdf 公开标价 | 每 1,000 张面单有效价格 |
|---|---|---|
| 10 万张面单 | 5 美元 | 0.050 美元 |
| 100 万张面单 | 按公开页单价为 50 美元 | 0.050 美元 |
| 1000 万张面单 | 按公开页单价为 500 美元 | 0.050 美元 |
| 1 亿张以上面单 | 企业价格请联系 | — |
公开标价只是简单部分。更难算的是账单上的其他东西:授权/合规路径、服务运行时、高可用部署规模、工程时间、区域部署、承运商规格维护和支持。
完整 TCO 拆解,包括不同用量档的工程人月估算、基础设施成本范围,以及 SDK 型服务如何随用量增长吸收运营成本,都在这篇长文分析中:
→ 2026 跨国物流面单 PDF 生成 TCO 对比:自建 Puppeteer / iText vs gPdf
Edge 生成与运营成本
iText 在进程内可以非常快。运营成本在于渲染器运行在哪里。如果欧洲仓库调用美国单一区域的标签服务,标签在 JVM 内部渲染很快,但从用户视角仍然可能慢。多区域部署可以解决这个问题,但团队就要拥有每个区域的部署、监控、容量和发布。
gPdf 把生成服务移到 Cloudflare Edge。对面单和发票工作负载来说,产品价值不只是 p50 渲染时间;还在于不必在每个仓库、承运商集成或区域后端旁边运行 PDF 服务。
合规与文档质量成本
iText 具备很深的 PDF 能力,包括 gPdf 不试图替代的工作流。这正是 iText 对需要低层控制的团队很强的原因。
对业务文档生成,gPdf 产品化了常见输出要求:CJK 字体、矢量条码、PDF/A 配置、Factur-X/ZUGFeRD 打包、元数据、密码保护输出和模板驱动生成。成本比较应该包括:这些能力中有多少是你的团队想在自有服务里组装和测试的。
什么时候 iText 仍然是正确答案
假装竞品永远不会赢的对比只是营销空话。iText 在这些场景仍然更合适:
- 你操作 PDF,而不只是渲染。 签名、表单填写、拆分、页面级编辑;gPdf 从 JSON 渲染新 PDF,不进入这些工作流。
- 你的栈以 Java/.NET 为主。 如果其他服务都在 JVM 上运行,新增出站 HTTP 依赖像是退步,iText 可以保持进程内。
- 你运行在隔离网络或严格离线环境。 有些仓库现场或政府部署不适合外向 HTTPS。iText 可在任何 JVM 所在位置运行。
- PDF 工具是你的产品。 如果你是 PDF 厂商、电子签平台或法律科技归档系统,拥有 SDK 是正确控制层级。gPdf 面向的是产品是物流、开票或商业流程,而不是 PDF 本身的团队。
- 你需要 gPdf 不提供的冷门 PDF 规格覆盖,例如 XFA 表单、高级数字签名处理器、认证配置文件。
对于“我需要贴在包裹上的可扫描面单,而且每月有 100 万个包裹”,gPdf 是摩擦更低的路径。对于“我要在 Java 后端里操作一个已有法律 PDF”,iText 是正确答案。
相关 PDF 生成场景
如果你的评估从 Java PDF SDK 或 iText 替代方案开始,可以继续按场景拆分:面单和承运商规格变更看 物流面单 API 与 GS1 条码 API;发票和电子发票看 发票 PDF API、Factur-X API 与 ZUGFeRD API;如果目标是把业务数据直接变成 PDF,再看 JSON 转 PDF API 和 模板 PDF API。
FAQ
iText 免费吗?
iText 为兼容的开源使用提供 AGPL 路径,也为不能或不想遵守 AGPL 义务的团队提供商业授权。
gPdf 会取代 iText 吗?
不会。gPdf 是面向结构化新文档的 PDF 生成服务。iText 在深度 PDF 操作、签名、表单填写、拆分和低层 SDK 控制上仍然更强。
iText 价格是报价制,为什么还要比较价格?
因为买方仍然需要 TCO 模型。比较应包含授权/合规路径、基础设施、工程时间、支持和区域运营,而不只是 SDK 这一行。
迁移形态
对把标签渲染从 iText 迁移到 gPdf 的团队,差异大致如下:
- // Before: a Java label-rendering service
- PdfWriter writer = new PdfWriter(out);
- PdfDocument pdf = new PdfDocument(writer);
- Document doc = new Document(pdf, new PageSize(288, 432));
- // 20–40 lines wiring fonts, positions, Barcode128 with GS1 AIs
- doc.close();
+ // After: HTTPS POST the structured DocumentRequest from any language
+ const res = await fetch('https://api.gpdf.com/api/v1/pdf/render', {
+ method: 'POST',
+ headers: { Authorization: `Bearer ${KEY}`, 'Content-Type': 'application/json' },
+ body: JSON.stringify(labelDocumentRequest),
+ });
+ const pdf = Buffer.from(await res.arrayBuffer());
切换完成后,Java 面单服务会收敛为由已有订单编排语言发起的一次 fetch 调用。JVM 从面单路径中消失;承运商规格变化不再是部署事件;值班也不再因为面单渲染 OOM 被叫醒。
相关页面
- 2026 跨国物流面单 PDF 生成 TCO 对比:自建 Puppeteer / iText vs gPdf — 长文成本计算、工程人月和基础设施范围。
- 承运商级规模的物流面单 PDF — 示例载荷、p99 数字和 Black Friday 峰值测算。
- JSON Render API 参考 — 端点、请求形状、安全模型。
- GS1-128 barcodes at 0.1 mm precision in JSON — 条码几何的深入说明。