为了账号安全,请及时绑定邮箱和手机立即绑定

使用Ghostscript生成符合ZUGFeRD标准的电子发票PDF文件指南

标签:
开源 编解码
打造一个面向未来的电子发票系统

正如我们在之前的博客文章中提到的,2025年将对ZUGFeRD和电子发票来说是非常关键的一年。考虑到这一点,我们如何才能保持领先,并确保我们具备创建ZUGFeRD PDF所需要的能力和工具?

本文假定你已经熟悉ZUGFeRD格式及其用途,如果需要回顾,请查看理解ZUGFeRD:电子发票的未来

全过程请参考为什么选择 Ghostscript 生成 PDF?

Ghostscript 是一个功能强大的开源工具,用于处理 PDF 和 PostScript 文件。它已经开发了三十多年,并且在这段时间里被移植到多个不同的平台上。它支持 PDF 和 PostScript 文件的渲染、转换以及管理。

许多公司使用Ghostscript作为自动化文档处理流程的一部分,因为可以编写脚本来执行例如文档转换、添加水印或从PDF中提取页面等操作。

Ghostscript在生成符合ZUGFeRD标准的PDF文件(一种电子发票标准)中的作用

Ghostscript 在生成符合长期存档和电子发票标准(如 ZUGFeRDFactur-X)要求的合规 PDF/A 文档方面发挥重要作用。这确保企业能够创建符合存档和电子发票标准的 PDF 文档。

Ghostscript的灵活性和多功能性、处理复杂的PDF和PostScript任务的能力及其开源性质,使其成为文档处理中软件行业的重要工具。

指南如何:
第一步:创建符合 PDF/A 标准的 PDF 文件

第一步是确保输入的PDF符合PDF/A标准。PDF/A是专门为长期存档的数字文档设计的PDF格式的特殊版本。其主要目的是确保文档在未来能够准确再现,保持其视觉外观和结构。

PDF/A 的关键特性:
  1. 自包含: PDF/A 文件必须是 自包含 的,这意味着所有用于显示文档的元素(如字体、图像和颜色配置文件)都内嵌于 PDF 文件内部。这确保文档在不同的软件、硬件或操作系统中保持一致。
  2. 无外部依赖: PDF/A 禁止使用可能会使文档依赖于外部资源的某些功能。例如,JavaScript音频/视频内容外部链接 不被允许,因为它们会妨碍将来准确再现文档。
  3. ISO 标准: PDF/A 是一个 ISO 标准化 的格式,其标准在 ISO 19005 下发布。这使得它对于需要严格遵守法规和标准的文档保存行业,比如法律、政府和档案管理领域,非常适用。

Ghostscript 很有用,可以确保你的输入 PDF 符合合规要求,并且可以通过命令行参数生成合规的 PDF。

    -dPDFA=3

这指示 Ghostscript 使用 PDF/A 标准的第 3 版——该版本允许在 PDF 中嵌入文件,并且显然我们需要将 XML 发票数据嵌入到 PDF 中,因此这是必要的。有关详细信息,请参阅 Ghostscript 创建 PDF/A 文件的文档

第二步:准备发票所需的 XML 数据

Ghostscript本身并不会验证ZUGFeRD格式的XML模式,而是会假设你提供的发票XML文件是符合规范的。因此,你应该确保你提供的XML文件格式正确无误。

ZUGFeRD XML 有一个结构,将数据组织成表示关键信息的元素,例如:等等。

  • 发票抬头信息: 包含发票的一般信息,如发票号码、日期、币种及相关文件。
  • 涉及方: 交易中卖方、买方及任何中间人的详细信息,包括地址、联系方式及税务登记号码。
  • 明细项: 列出所提供的商品或服务的详细信息,包括描述、数量、单价及适用的税费。
  • 税费明细: 指明税额及类型(如增值税),提供应付总额明细。
  • 付款说明: 如何结清发票的说明,包括银行账户详情和付款条款。
简化版的ZUGFeRD XML:示例

一个简单的 XML 结构片段可能看起来像这样:

<rsm:crossindustryinvoice xmlns:rsm="urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100">  
  <rsm:exchangeddocumentcontext>  
    <ram:guidelinespecifieddocumentcontextparameter>  
      <ram:id>ZUGFeRD</ram:id>  
    </ram:guidelinespecifieddocumentcontextparameter>  
  </rsm:exchangeddocumentcontext>  
  <rsm:exchangeddocument>  
    <ram:id>INV-12345</ram:id>  
    <ram:issuedatetime>  
      <udt:datetimestring format="102">20231003</udt:datetimestring>  
    </ram:issuedatetime>  
  </rsm:exchangeddocument>  
  <rsm:supplychaintradetransaction>  
    <!-- Line item details go here -->  
  </rsm:supplychaintradetransaction>  
</rsm:crossindustryinvoice>

参考:https://www.mustangproject.org/zugferd/,这里有示例 PDF,其 XML 内容如下:https://www.mustangproject.org/files/ZUGFeRD-invoice.xml。本文不会深入讨论这里的 XML 电子发票细节。

所以假设你已经拥有符合规范的XML文件,并准备将其嵌入到你的PDF文档中,然后继续下一步操作。

步骤 3:将 XML 数据嵌入并生成 ZUGFeRD PDF 文件

这里就是多年来您对Ghostscript开发投入的知识、开源贡献和时间发挥作用的地方。我们准备了一个命令行工具,该工具引用了一个准备好的PostScript文件(zugferd.ps),帮你完成了繁重的任务,并确保一切都准备好了,尽可能简化了整个过程。

💡 请注意一下:请确保使用 Ghostscript 版本 10.03.01 或者使用仓库中的最新版本,因为 Ghostscript 10.04.0 中的 zugferd.ps 文件有 bug。因此,请务必遵循此建议。

假设你将以下文件放入 /usr/home/me/zugferd/ ,这些文件:

zugferd.ps,(这个方便的PostScript文件可以用来处理命令)

default_rgb.icc (一个 ICC 颜色配置)

invoice.xml (你上一阶段创建或获取的文件)

接下来我们执行这条命令。

    gs  
    --permit-file-read=/usr/home/me/zugferd/  
    -sDEVICE=pdfwrite  
    -dPDFA=3  
    -sColorConversionStrategy=RGB  
    -sZUGFeRDXMLFile=/usr/home/me/zugferd/invoice.xml  
    -sZUGFeRDProfile=/usr/home/me/zugferd/default_rgb.icc  
    -o /usr/home/me/zugferd/output.pdf  
    /usr/home/me/zugferd/zugferd.ps  
    /usr/home/me/zugferd/input.pdf

让我们快速看看这里都在说什么:

运行 Ghostscript:

gs[^1]

[^1]: gs 通常指的是“好东西”(good stuff)。

给需要读取的文件夹授予权限。

--permit-file-read=/usr/home/me/zugferd/

选择一个设备生成PDF。

-sDEVICE=pdfwrite (PDF写入设备)

设定 PDF 的 A 版本:

-dPDFA=3 # 这是一个命令或参数,通常用于技术上下文中,表示生成符合PDF/A-3标准的PDF文档。

设定颜色转换:

-sColorConversionStrategy=RGB

设置发票XML文件的路径:

-sZUGFeRDXMLFile=/usr/home/me/zugferd/invoice.xml # 这里是ZUGFeRD XML文件路径

设置ICC配置文件路径:

-sZUGFeRDProfile=/usr/home/me/default_rgb.icc

指定输出文件:

-o /usr/home/me/zugferd/output.pdf

定义到zugferd.ps PostScript 文件的路径为:

路径:/usr/home/me/zugferd/zugferd.ps

设置PDF文件路径:

/usr/home/me/zugferd/input.pdf (此处为文件路径示例:/usr/home/me/zugferd/input.pdf)

注意,对于 -sZUGFeRDVersion-sZUGFeRDConformanceLevel 还有更多的选项,这些选项有合理的默认设置,但你可以在 Ghostscript ZUGFeRD 文档 中了解更多详细信息。

一旦运行命令,一切顺利,你将会有个名为“output.pdf”的ZUGFeRD PDF文件(ZUGFeRD是一种电子发票标准)准备就绪!

验证一下您的 ZUGFeRD PDF

有几种方便用户的验证选项可供寻求基于服务解决方案的企业使用,不过需要先注册。用户可以上传PDF/A-3文件或XML格式,直接验证ZUGFeRD发票内容。

或者你可以使用Artifex的命令行工具mutool(或简称mutool)对ZUGFeRD进行基本验证:

运行命令:mutool info -Z (例如:input.pdf

使用 ZUGFeRD 和 Ghostscript 的优点

ZUGFeRD:统一的跨境发票参考数据模型,Ghostscript:一个开源的PostScript和PDF处理工具。

使用 Ghostscript 作为您解决方案的一部分可以带来以下好处:

  • ZUGFeRD 和 Ghostscript 帮助企业符合欧盟和国际的电子发票标准。
  • 减少在与政府和大型企业客户合作时的合规风险。
  • 该解决方案灵活,既适合需要简单方案的小型企业,也适合需要处理大量发票的大型企业。

如果你需要建立一个面向未来的电子发票系统,那么Ghostscript提供的功能提供了一个强大且符合规定的现代电子发票解决方案,总之。

希望这篇“如何”系列博客能介绍如何用Ghostscript生成电子发票,如果有任何问题,请随时在Ghostscript Discord频道联系我们。

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消