【问题标题】:Extracting embedded XML File from PDF A/3 using abcpdf in C# - ZUGFeRD在 C# 中使用 abcpdf 从 PDF A/3 中提取嵌入的 XML 文件 - ZUGFeRD
【发布时间】:2014-02-11 10:10:16
【问题描述】:

我目前正在处理新的德国 ZUGFeRD 文件。这些是 PDF A/3 文件,其中嵌入了包含数据的 XML 文件。

我想使用带有 C# 的 abcpdf 8.1 从 PDF A/3 中提取此 XML 文件。

知道怎么做吗?

非常感谢和问候,

【问题讨论】:

  • 我会得到一个处理 PDF 文件的库,然后用 XDocument 加载附加的 XML。
  • 我处理 PDF 文件的库是 8.1 版中的 abcpdf。我的问题是如何使用这个库(abcpdf)提取/读取 pdf 中的 xml。无论如何谢谢!:)

标签: c# xml abcpdf pdfa zugferd


【解决方案1】:

我不知道 abcpdf,但我猜 pdf 库提供了对 pdf 内容的类似访问。

先看看Das-ZUGFeRD-Format_1p0.pdf。特别是第 112 页。图像显示了您必须遍历才能找到 xml 流的对象树。

有了这棵树,你就有了名字、类型和方向。现在您可以遍历 pdf 对象树以获取您正在寻找的 XML 内容。

基于图表的步骤。

  1. 阅读您的 PDF
  2. 在您的 PDF 中获取目录
  3. 从目录中获取名称为 AF 的数组
  4. AF数组中获取第一个元素(应该是file spec
  5. file spec获取名为EF的字典
  6. 获取EF的流内容

这是您获取内容所需执行的步骤。

要显示 pdf 的结构并浏览树,我建议使用像 iText RUPS 这样的工具

【讨论】:

  • 非常感谢,这几乎是要走的路!我对 abcpdf 做了什么:-从 Doc 中获取 Objectsoup 数组(几乎是 Doc 中所有对象的数组)-因为 ZUGFeRD 只允许 PDF 中的一个嵌入文件,我只是在这个 objectsoup-array 中搜索了一个包含 /EmbeddedFile 的 StreamObject 类型 - 解压缩该对象的 Stream,获取流的 byte[] 并将其写入 xml 文件
  • @user3296596 ZUGFeRD 只允许在 PDF 中嵌入一个文件 - 这是错误的:只有一张发票,但可以添加任意数量的其他附件, “nur die Einbindung eines einzigen Rechnungsdatendokuments ... Einbettung weiterer Dokumente und Dateien, die keine Rechnungsdaten enthalten, ist davon nicht betroffen”。此外,这可能会发生变化,“In künftigen Versionen des ZUGFeRD Standards kann dieese Beschränkung aufgehoben werden”,cf.信息包中的 PDF-Implementierungsguide-ZUGFeRD.pdf。
  • @Vadimo 我认为完全删除对ferd-net.de 的引用并仅链接到ZUGFeRD 实现站点上的规范副本konik.io 不是一个好主意;诚然,维基百科也确实引用了这些副本。
【解决方案2】:

我用 abcpdf 做了什么:

  • 从 Doc 中获取 Objectsoup 数组(几乎是 Doc 中所有对象的数组)

  • 由于 ZUGFeRD 只允许在 PDF 中嵌入一个文件,我只是在这个 objectsoup-array 中搜索了包含 /EmbeddedFile 的 StreamObject 类型之一

  • 解压该对象的Stream,获取stream的byte[],写入xml文件

【讨论】:

  • ZUGFeRD 只允许在 PDF 中嵌入一个文件 - 这是错误的:只有一张发票,但其他附件数量不限,“nur die Einbindung eines einzigen Rechnungsdatendokuments ... Einbettung weiterer Dokumente und Dateien, die keine Rechnungsdaten enthalten, ist davon nicht betrofen”。此外,这可能会发生变化,“In künftigen Versionen des ZUGFeRD Standards kann dieese Beschränkung aufgehoben werden”,cf.信息包中的 PDF-Implementierungsguide-ZUGFeRD.pdf。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-01-08
  • 1970-01-01
  • 2021-06-13
  • 1970-01-01
  • 2022-01-19
  • 2019-12-13
  • 1970-01-01
相关资源
最近更新 更多