能力

把基础但关键的细节做到位。

真正的文档语义,不是把浏览器截图塞进 PDF。

Browse use cases
/01

像素级控制

x/y 以毫米计、x_anchor 用于右边缘对齐、标签上亚毫米级定位。是坐标,不是近似。

// inside elements[i]
"x_anchor": {
  "reference": "content_right",
  "offset": 6
}
/02

矢量条码

30+ 种符号体系:GS1-128、QR、PDF417、DataMatrix。全部矢量,条码整体长度精度 0.1mm。

// 30+ formats: code128, qrcode, datamatrix, pdf417, ...
"type": "barcode",
"format": "code128",
"content": "INV-2026-001"
Why vector beats raster
/03

字体降级链

font_mode 三档:strict(声明的字体族必须覆盖所有字符)、prefer(沿内置字体链回退)、auto(引擎自选)。auto/prefer 全链耗尽返回 API-504 —— 显式失败,不静默吞。

// inside style{}
"font_family": "NotoSans-Regular",
"font_mode": "prefer"
/04

合规模式

settings.profile = "pdfa-3b" 一键触发 PDF/A-3b 合规以及 Factur-X / ZUGFeRD 所需的嵌入式 XML 附件流。一个字段,一份合规文档。

// top-level on DocumentRequest
"settings": {
  "profile": "pdfa-3b"
}
PDF/A and Factur-X, explained
/05

变量 + 分页

{page} / {total_pages} 在版面定稿后替换。keep_together、widow/orphan、page_break。

// element of type "variable"
{ "type": "variable",
  "name": "page",
  "scope": "system" }
/06

跨页表格

row_span 跨页、表头重复、alternate_fill、双线边框。最容易出问题的那 1%。

// inside table element
"pagination": {
  "keep_spans_together": true
}
/07

一份 JSON,两个入口

同一份 DocumentRequest JSON 同时驱动 POST /api/v1/pdf/render 和 editor.gpdf.com 上的可视化编辑器。可视编辑、API 出件、手写 JSON —— 三种姿势,同一份文件互相 round-trip。

// three routes, one engine
POST /api/v1/pdf/render
POST /api/v1/template-render
POST /api/v1/e-invoice/render
Read the API reference
/08

为发票而生

每页 $0.00005、p50 3 毫秒、内嵌 CJK、PDF/A-3 附件流——金融、ERP 与税务团队最先核对的四个数字。

// invoice — header + table pattern
{ "size": "a4",
  "elements": [
    { "type": "text",  "x": 18, "y": 22, ... },
    { "type": "table", "x": 18, "y": 60, ... }
  ]}
Why JSON beats HTML→PDF
/09

天然适合物流面单

label_100_150、label_4_6_in 页面尺寸预设。矢量 GS1-128 / ITF-14 / SSCC、整体长度精度 0.1mm——承运商与 3PL 在高峰量级下出单不掉精度。

// 4×6 thermal shipping label
{ "size": "label_4_6_in",
  "elements": [{
    "type": "barcode",
    "format": "code128",
    "content": "1Z999AA10123456784" }]}
Shipping-label use case