2014-02-11 61 views
2

我目前正在使用新的德語ZUGFeRD文件。這些是PDF A/3文件,其中包含嵌入的XML文件,其中包含數據。在C#中使用abcpdf從PDF A/3中提取嵌入式XML文件 - ZUGFeRD

我想從PDF A/3使用abcpdf 8.1與C#中提取此XML文件。

任何想法如何做到這一點?

非常感謝和問候,

+0

我會得到與PDF文件涉及庫,然後加載XML連接與XDocument。 – Mathew

+0

我的圖書館處理PDF文件是版本8.1中的abcpdf。我的問題是如何提取/閱讀在這個庫(abcpdf)PDF內的XML。無論如何,謝謝!:) – user3296596

回答

2

我不知道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

+0

非常感謝,這是非常順利的路! 我做了什麼與abcpdf: - 獲得從文檔的Objectsoup陣列(差不多在文檔中的所有對象的數組) -as ZUGFeRD只允許一個PDF內嵌入的文件,我只是搜查這objectsoup-數組,其中包含/ EmbeddedFile - 解壓縮該對象的流,獲取流的byte []並將其寫入xml文件中 – user3296596

+2

@ user3296596 * ZUGFeRD只允許PDF中的一個嵌入文件* - 這是錯誤的:*只有一張發票,但任何數量的其他附件,*「nur die Einbindung eines einzigen Rechnungsdatendokuments ... Einbettung weiterer Dokumente und Dateien,die keine Rechnungsdaten enthalhal,ist davon nicht betroffen」。此外,這可能會發生變化,「在künftigenVersionen des ZUGFeRD Standards kann dieseBeschränkungaufgehoben werden」,參見。信息包中的PDF-Implementierungsguide-ZUGFeRD.pdf。 – mkl

+0

@Vadimo我認爲完全刪除對http://www.ferd-net.de的引用並不是一個好主意,只能鏈接到ZUGFeRD實現網站上的規範副本,http:// konik.io;誠然,維基百科確實也參考了這些副本。 – mkl

-2

的工具我做了什麼與abcpdf:

  • 獲取從文件的Objectsoup陣列(幾乎所有的對象在Doc文件中)

  • 由於ZUGFeRD只允許在PDF中嵌入一個文件,我剛剛搜索了這個objectsoup數組中的一個StreamObject類型,其中包含/ EmbeddedFile

  • 解壓縮對象的流,得到的byte []流的,並將其寫入到一個XML文件

+2

* ZUGFeRD只允許在PDF內嵌入一個文件* - 這是錯誤的:**只有一個發票,但任何數量的其他附件**,「nur die Einbindung eines einzigen Rechnungsdatendokuments ... Einbettung weiterer Dokumente und Dateien,die keine Rechnungsdaten enthalten ,ist davon nicht betroffen「。此外,這可能會發生變化,「在künftigenVersionen des ZUGFeRD Standards kann dieseBeschränkungaufgehoben werden」,參見。信息包中的PDF-Implementierungsguide-ZUGFeRD.pdf。 – mkl