Invoicing and finance

面向账单和财务系统的发票 PDF API

用 JSON Render 或 Template Render 基于账单数据生成普通发票 PDF,同时把税务和会计逻辑留在你的系统中。

主 API JSON Render
ENDPOINT /api/v1/pdf/render
适用系统 账单后端 / ERP / 会计系统 / SaaS 应用
要解决的问题

把账单、ERP 或 SaaS 系统中的发票数据转换成可读的 PDF 发票,同时让编号、税务、支付状态和会计语义继续保留在调用方系统中。

什么时候用这个 API

  • 你需要给客户、收据、对账单或会计导出生成普通发票 PDF。
  • 你的系统已经负责发票号码、税额计算、行项目和支付状态。
  • 你想在不运行浏览器的情况下生成表格、合计块、元数据和可选 PDF/A 设置。
  • 你希望为复用发票版式提供 template_id 合同。

它不替代什么

  • 你需要 Factur-X 或 ZUGFeRD 这类法律电子发票包。请使用 E-Invoice Render。
  • 你期待 gPdf 计算税额、校验会计规则或对账支付状态。
  • 你想把任意 HTML 发票转换成 PDF,而不是使用结构化 JSON 或模板。

应该调用哪个 endpoint

主路径

/api/v1/pdf/render

JSON Render 是这个场景的默认调用路径。

辅助路径 1

/api/v1/template-render

当流程需要相关 API、模板契约或能力查询时再使用。

辅助路径 2

/api/v1/e-invoice/render

当流程需要相关 API、模板契约或能力查询时再使用。

最小请求示例

POST /api/v1/pdf/render - 最小发票抬头和合计。

{
  "pages": [
    {
      "size": "a4",
      "elements": [
        {
          "type": "text",
          "x": 20,
          "y": 24,
          "content": "Invoice INV-1007",
          "style": { "font_size": 18, "font_family": "NotoSans-Regular" }
        },
        {
          "type": "text",
          "x": 20,
          "y": 42,
          "content": "Bill to: Example Customer\nAmount due: USD 245.00",
          "style": { "font_size": 11, "font_family": "NotoSans-Regular" }
        },
        {
          "type": "line",
          "x1": 20,
          "y1": 62,
          "x2": 190,
          "y2": 62
        }
      ]
    }
  ]
}

gPdf 负责什么

  • 基于 JSON pages 或 template data 渲染发票 PDF。
  • 处理文本、表格、合计区块、分页、元数据和可选 PDF/A 输出。
  • 为多个系统共用的稳定发票版式提供 Template Render。
  • 返回二进制 PDF,并保持一致的 API 错误 envelope。

你的系统负责什么

  • 发票号码、支付状态、税额计算、折扣、贷项和账本含义。
  • 客户与开票方数据、行项目映射、币种和舍入规则。
  • 留存、交付、邮件、付款链接和会计系统对账。

上线前检查

  1. 确认每一个可见发票字段都映射到源账单数据。
  2. 测试行项目溢出、长客户名称、多页发票和合计值。
  3. 决定版式应放在 JSON Render 还是已发布模板中。
  4. 把普通发票 PDF 生成和法律电子发票打包分开。
  5. 把 request ID 和输出文件名写入你的发票记录。

能力边界

  • 普通发票 PDF 不等同于法律电子发票要求。
  • gPdf 渲染发票文档;不计算税额或会计状态。
  • Factur-X / ZUGFeRD 输出属于 POST /api/v1/e-invoice/render。

普通发票与电子发票的区别

普通发票 PDF 是客户阅读的文档。它可以由 JSON Render 或 Template Render 生成。你的系统决定发票号码、税额、行项目、币种和支付状态,然后由 gPdf 渲染可见 PDF。

法律电子发票不同。Factur-X 和 ZUGFeRD 将可读的 PDF/A-3b 发票与嵌入式 EN 16931 CII XML 组合在一起。请使用 POST /api/v1/e-invoice/render 生成这种包。

Template Render 通常是生产 endpoint

财务团队通常不希望每个服务都重新构建发票坐标。常见路径是先设计一次发票,把它发布为模板,再给调用方一个稳定的 template_id 和 data schema。JSON Render 仍适合自定义版式、内部工具和模板原型。

把会计逻辑留在上游

gPdf 应接收最终展示值,而不是未决的会计判断。请在调用 render API 之前计算税额、折扣、舍入、支付状态和发票适用性。这样 PDF 输出才是确定的,也能让财务系统继续作为事实来源。

常见问题

发票 PDF 和电子发票是一回事吗?
不是。普通发票 PDF 是人可读输出。Factur-X 或 ZUGFeRD 电子发票还会把 EN 16931 CII XML 嵌入 PDF/A-3b wrapper。
复用发票应该调用哪个 endpoint?
当发票版式稳定、调用方只应发送 template_id 和 data 时,使用 Template Render。代码负责版式时使用 JSON Render。
gPdf 会计算税额吗?
不会。你的账单或会计系统在发送渲染数据前计算税额、合计、折扣和支付状态。
发票 PDF 可以使用 PDF/A 吗?
可以,JSON Render 支持 PDF/A 设置。当发票必须打包为 Factur-X 或 ZUGFeRD 时,请专门使用 E-Invoice Render。