簡體   English   中英

使用 IText 通過 VisualRepresentation 簽名后 PDF-A1a 文檔無效

[英]PDF-A1a document not valid after signing with VisualRepresentation using IText

我使用 IText 7.15.0 對 PDF-A1a 文檔進行數字簽名。

除了數字簽名之外,我還在文檔中添加了視覺表示(圖像)。

PdfSignatureAppearance appearance = signer.GetSignatureAppearance();
appearance.SetPageNumber(1);

Rectangle pr = new Rectangle(10 + ImageOffset, 10 + ImageOffset, 100, 100 );
appearance.SetPageRect(pr);
byte[] image = System.IO.File.ReadAllBytes(VisualAppearance);

appearance.SetRenderingMode(PdfSignatureAppearance.RenderingMode.GRAPHIC);
ImageData imageData = ImageDataFactory.Create(image);
appearance.SetSignatureGraphic(imageData);

此代碼有效並且簽名有效。 但如果文檔是 PDF-A1a,它就不再是有效的 PDF-A1a。 只有當我添加視覺表示時它才會變得無效。 如果我只是應用沒有視覺表示的簽名,它仍然是有效的 PDF-A1a。

添加視覺表示時,其他 PDF-A 標准(如 A2a)仍然有效。

使用 foxit phantom 驗證 PDF-A1a 時,顯示以下消息:

存在透明的軟蒙版。 從 PDF 開始,支持 1.4 透明度。 一些基於 PDF 的 ISO 標准禁止使用透明度。

在添加視覺表示時,我需要做什么才能保持 PDF-A1a 有效?

正如 Foxit 已經告知的那樣,一些標准禁止在合格文件中使用透明度,特別是 ISO 19005-1 對 PDF/A-1 配置文件的一些規定,其中包括:

如果SMask鍵出現在ExtGStateXObject字典中,則其值應為None

(ISO 19005-1,第 6.4 節透明度)

但是,如果 iText 將具有透明度信息的圖像添加到 PDF,它將透明度信息轉換為結果圖像XObject的非消失SMASK條目。

為了防止這種情況,只需使用沒有透明度的圖像。

對您的平行問題的評論中,您確認

如果我使用 jpeg 而不是 png,則 PDF-A1a 仍然有效。

對於非矩形圖像輪廓,請考慮使用剪輯路徑。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM