2017-02-13 96 views
0

我正在開發一個項目,該項目將元數據嵌入到現有PDF(PDF/A3標準)的每個頁面中。我的xml文件和頁數一樣多,程序會將相應的xml文件作爲元數據嵌入到頁面中。如何將xmp填充到/元數據條目的PDF頁面

到目前爲止,我的程序使用iText 5爲每個頁面添加了一個/ Metadata條目,並且我還能夠在每個頁面的元數據條目中添加一個簡單的字符串或文本,並且可以在PDF下顯示Adobe Acrobat Pro中的樹結構。 這裏是我的代碼中添加/元數據條目頁面:

 writer.addPageDictEntry(PdfName.METADATA, new PdfString("123")); 

問題至今是如何將XML添加到/元數據條目?我的xml文件是一些簡單的樹結構,我不知道如何將xml文件轉換爲PdfObject。通過iText開發者網站,它說每個頁面中的/ Metadata條目應該包含xmp的引用,我不知道如何做到這一點。我是否應該將每個xml文件嵌入到一起,並將該部分的引用傳遞給每個頁面的條目?

This screenshot of acrobat pro shows what my program can do so far, click here to see the pic

回答

0

addPageDictEntry()方法是不是你所需要的。你應該嘗試setPageXmpMetadata()方法。請參閱API docs

該方法接受byte[]。確保byte[]包含正確的XMP數據。該方法將在內部完成所有繁重的工作。即:它將創建一個包含XML的流對象,並將從頁面字典向該流對象添加引用。正如您可能知道的那樣,PDF中禁止使用PDF流作爲直接對象。

如果你想這樣做艱難地,通過創建Stream對象自己,通過將其添加到PdfWriter得到引用,然後使用該引用作爲頁字典的項的值,你可能會從這個問題的答案中找到靈感:How do I add XMP metadata to each page of an existing PDF using iTextSharp(或this example),但是捷徑方法應該更容易使用。

+0

謝謝你的回答!這真的會有很大的幫助!現在,我想出了將PDF填入PDF頁面。但是我遇到了一個新問題,我厭倦了用Adobe Acrobat CC來驗證我的PDF是否爲真PDF/A。但是,該軟件告訴我,我的PDF文件不是真正的PDF/A-3A,錯誤消息是「XMP屬性是預定義的,但沒有按照定義使用(XMP 2005)」。這個錯誤屬性恰恰是「http://purl.org/dc/elements/1.1/dc:title」。我對此感到困惑,因爲我不知道如何解決這個問題。 –

+0

任何人都可以在沒有看到PDF的情況下回答這個問題?我只能猜測你在'/ Info'字典中的元數據和XMP中的元數據之間存在差異。 –

+0

嗨布魯諾,我已經將我的測試pdf文件上傳到下面的Dropbox鏈接。請檢查這一點,我不知道如何通過PDF/A-2B有效性檢查。 https://www.dropbox.com/s/wibx73w99utbmmp/Univ.Of.Arizona_Libraries_azu_acku_z3016_ray29_1349_merged.pdf?dl=0 –