簡體   English   中英

iText Java簽名PDF DocumentException:沒有足夠的空間

[英]iText Java Signing PDF DocumentException: Not enough space

我正在使用Java的iText 5.5.5,我想使用外部簽名創建簽名的PDF,如下所示:

提取應簽名的PDF文檔,並創建帶有空簽名的PDF,並提供BASE64編碼的字節以供外部簽名機制簽名:

PdfReader reader = new PdfReader(src);
FileOutputStream os = new FileOutputStream(dest);
PdfStamper stamper = PdfStamper.createSignature(reader, os, '\0');
PdfSignatureAppearance appearance = stamper.getSignatureAppearance();
appearance.setVisibleSignature(new Rectangle(36, 748, 144, 780), 1, "test");
appearance.setCertificate(chain[1]);
ExternalSignatureContainer external = new ExternalBlankSignatureContainer(PdfName.ADOBE_PPKLITE, PdfName.ADBE_PKCS7_DETACHED);
MakeSignature.signExternalContainer(appearance, external, 8192);

InputStream is = appearance.getRangeStream();
byte[] toSign = getBytes(is);
this.b64String = new String(Base64.encode(toSign));

使用外部簽名機制對b64String進行簽名,以在BASE64中提供作為PKCS#7簽名數據的簽名。

創建ExternalSignatureContainer以僅具有來自外部簽名機制的PKCS#7簽名的數據:

public class MyExternalSignatureContainer implements ExternalSignatureContainer {
    protected byte[] sig;

    public MyExternalSignatureContainer(byte[] sig) {
        this.sig = sig;
    }

    @Override
    public void modifySigningDictionary(PdfDictionary arg0) {
    }

    @Override
    public byte[] sign(InputStream arg0) throws GeneralSecurityException {
        return sig;
    }
}

使用MyExternalSignatureContainer創建簽名的PDF文檔:

PdfReader reader = new PdfReader(dest);
FileOutputStream os = new FileOutputStream(signedpdf);
ExternalSignatureContainer external = new MyExternalSignatureContainer(signedData);
MakeSignature.signDeferred(reader, "test", os, external);

但是我在最后一行MakeSignature.signDeferred(reader, "test", os, external); 以下異常:

com.itextpdf.text.DocumentException: Not enough space

問題在哪里以及如何解決?

您已經估計簽名將適合8192字節。 但是,簽名byte[]的字節數超過了8192,因此出現Not Not space space異常。 例如:您的外部簽名容器返回的簽名為10000字節。 iText告訴您10000比8192大,並且您正在問不可能的事情。

解決方法:在創建帶有空簽名的PDF時進行更好的估算。

對您的容器說一下,尺寸估計為:

MakeSignature.signExternalContainer(appearance, external, 0);

根據MakeSignature API

estateSize-簽名的保留大小。 估計是否為0

暫無
暫無

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

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