2015-10-13 64 views
1

使用經過認證的簽名簽署PDF/A-2a時,PDF/A被破壞。 出現的錯誤是:PDF /使用經過認證的簽名進行簽名時破壞

  • 該字典不得包含'DigestLocation'鍵。
  • 該字典不得包含'DigestMethod'鍵。
  • 該字典不得包含密鑰'DigestValue'。

如果我使用非認證簽名簽署相同的PDF/A-2a,則不會出現Digestxxx錯誤。所以我想這個問題與認證簽名有關。

我正在使用iText版本5.4.5和閱讀發行說明,我發現版本5.5.4似乎已經解決了這個問題。 然後我改爲5.5.4版,但沒有運氣。出現相同的錯誤。 實際上,使用版本5.5.4我在簽署PDF/A時遇到兩個錯誤:

  • 缺少結束文本運算符。
  • 缺少開始文本操作符。

你知道嗎我怎麼知道丟失的文本操作符應該放在PDF裏面?

在此先感謝您的幫助。

更新: 我一直在調試itext,問題似乎是在版本檢測。 的PDF是1.7版本,但爲了確定是否Digestxxx領域必須writen在這種情況下進入(在PdfSignatureAppearance.java)時,返回的版本是4

if (writer.getPdfVersion().getVersion() < PdfWriter.VERSION_1_6) 

壓模用PdfStamper創建。在版本參數等於「\ 0」的附加模式下創建簽名以保持與原始文檔(1.7)相同的版本。

任何想法?

+0

我已更新到版本5.5.7,結果與使用版本5.5.4相同。再次,如果我使用非認證簽名簽署相同的PDF/A-2a,則不會出現Digestxxx錯誤。 – Egl

+1

請分享有問題的PDF和您的關鍵代碼。 – mkl

回答

1

我能夠重現你得到了最初的三個錯誤:

  • 詞典不能含有鍵「DigestLocation」。
  • 該字典不得包含'DigestMethod'鍵。
  • 該字典不得包含密鑰'DigestValue'。

我對iText應用了一個修復程序。這確實是iText中的一個錯誤。問題是如果您使用追加模式,PdfStamper會忽略提供的版本。這使得它默認爲1.4版本。正如您已經發現的那樣,PDF/A2是PdfSignatureAppearance中的一個文檔。

我無法重現您報告的開始和結束文本錯誤。如果您可以向我們展示您的代碼並輸入PDF,那麼我們會看看它。