2014-02-13 101 views
0

我想以編程方式簽署在Adobe Livecycle(它是XFA表單)中創建的PDF文檔。XFA表單的數字簽名

我知道iText庫用於處理PDF,但我還沒有找到任何示例如何簽署它。

也許它還不支持。你知道任何其他Java庫可以做到嗎?或者你知道如何簽名的方法嗎?

我知道,我的問題是similar to this opened question,但我不需要使用iText。

非常感謝您的幫助!

回答

0

這是展示如何使用簽名XMLDSIG一個小例子:

PdfReader reader =new PdfReader(src); 
FileOutputStream os =new FileOutputStream(dest); 
PdfStamper stamper = PdfStamper.createXmlSignature(reader, os); 
XmlSignatureAppearance appearance = stamper.getXmlSignatureAppearance(); 
appearance.setXmlLocator(new XfaXmlLocator(stamper)); 
appearance.setXpathConstructor(new XfaXpathConstructor(XfaXpathConstructor.XdpPackage.Datasets)); 
ExternalSignature signature =new PrivateKeySignature(pk, digestAlgorithm,"BC"); 
//use signXmlDSig or signXades 
MakeXmlSignature.signXmlDSig(appearance, signature, chain); 

您還可以登錄使用XAdES的,但那麼你將無法驗證簽名的Adobe軟件,因爲我不認爲Adobe已經支持XAdES(如果我錯了,請糾正我)。

+0

親愛的布魯諾,非常感謝您的迴應!我試過了,看起來,我在這裏一半。當我在Adobe Reader中打開我的「簽名」文檔並點擊面板「簽名」時,我看到「數據簽名」和我的標誌。但也有一個項目「無符號簽名字段」 - 根[0] .containerpage [0] .footer [0] .SignatureField1 [0]和我的簽名在這裏丟失:(。我不知道,如何找到這個字段以及如何簽名我在Adobe Livecycle中創建了一個XFA表單(來自第三方)簽名後,該文檔必須與我手動輸入的文檔相同,如果有幫助,我可以將您的PDF文檔發送給您。 – Michal

+0

嗨,我發現當程序員使用iText並調用PdfSignatureAppearance#setVisibleSignature()時,iText期望AcroForm中的這個字段。但是我的簽名字段不存在:-(。你知道任何其他方式如何設置到簽名字段的路徑? – Michal

+0

Acrobat在簽署XFA文檔時創建了一個AcroForm字段,並且此行爲在任何地方都沒有記錄,現在,我們已經按照規範中所述實現了XML簽名,這意味着我們在技術上能夠簽署XFA以便Acrobat/Reader將簽名識別爲「XFA簽名」 o找出我們是否以及如何簽名,使簽名完全「綠色」(例如,簽字後沒有未簽字的變更),需要進一步調查。由於這超出了我們可以提供的免費支持(花費時間和資源,並且沒有規範),因此您在這裏不會得到答案。 –