簡體   English   中英

簽署文件時出現PDFBox 2.0.8問題

[英]PDFBox 2.0.8 issue while signing document

我正在嘗試使用此方法簽署pdf,但獲得的文檔沒有大小:

public static void sign(PDDocument doc) throws KeyStoreException, NoSuchAlgorithmException, CertificateException,
        IOException, UnrecoverableKeyException {
    System.out.println("Document pages ? " + doc.getNumberOfPages());
    KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());
    ks.load(VisibleSignature.class.getResourceAsStream(CERT_FILE), ALIAS_PASS);
    System.out.println("KeyStore is null ? " + (ks == null));
    VisibleSignature vs = new VisibleSignature(ks, ALIAS_PASS.clone());
    InputStream is = Resource.get(IMAGE_FILE);
    int page = 1;
    vs.setVisibleSignDesigner(doc, 0, 0, -50, is, page);
    is.close();
    vs.setVisibleSignatureProperties("Test", "Test", "Test", 0, page, true);
    PDSignature signature = new PDSignature();
    PDAcroForm acroForm = doc.getDocumentCatalog().getAcroForm();
    System.out.println("Acroform is null ? " + (acroForm == null));
    System.out.println("Acroform getNeedAppearances ? " + (acroForm.getNeedAppearances()));
    if (acroForm != null && acroForm.getNeedAppearances())
        if (acroForm.getFields().isEmpty())
            acroForm.getCOSObject().removeItem(COSName.NEED_APPEARANCES);
        else
            System.out.println("/NeedAppearances is set, signature may be ignored by Adobe Reader");
    signature.setFilter(PDSignature.FILTER_ADOBE_PPKLITE);
    signature.setSubFilter(PDSignature.SUBFILTER_ADBE_PKCS7_DETACHED);
    if (vs.visibleSignatureProperties != null) {
        vs.visibleSignatureProperties.buildSignature();
        signature.setName(vs.visibleSignatureProperties.getSignerName());
        signature.setLocation(vs.visibleSignatureProperties.getSignerLocation());
        signature.setReason(vs.visibleSignatureProperties.getSignatureReason());
        System.out.println("SignerName " + vs.visibleSignatureProperties.getSignerName());
    }
    signature.setSignDate(Calendar.getInstance());
    vs.signatureOptions = new SignatureOptions();
    vs.signatureOptions.setVisualSignature(vs.visibleSignatureProperties.getVisibleSignature());
    vs.signatureOptions.setPage(vs.visibleSignatureProperties.getPage() - 1);
    doc.addSignature(signature, vs.signatureOptions);
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    doc.saveIncremental(baos);
    doc.close();
    IOUtils.closeQuietly(vs.signatureOptions);
    byte[] content = baos.toByteArray();
    System.out.println("Content length: >>>>>>>>>>>>>>>>>>> " + content.length);
}

這就是我在日食日志中得到的:

18:50:25,702信息[默認任務14]標准輸出-文檔頁面? 1

18:50:25,740信息[默認任務14]標准輸出-KeyStore為空?

18:50:25,779信息[默認任務14]標准輸出-Acroform為空嗎?

18:50:25,780信息[默認任務14]標准輸出-Acroform getNeedAppearances嗎?

18:50:25,782信息[默認任務14] org.apache.pdfbox.pdmodel.interactive.digitalsignature.visible.PDVisibleSigBuilder-PDF結構已創建

18:50:25,782信息[默認任務14] org.apache.pdfbox.pdmodel.interactive.digitalsignature.visible.PDFTemplateCreator-pdf構建已開始

18:50:25,782信息[默認任務14] org.apache.pdfbox.pdmodel.interactive.digitalsignature.visible.PDVisibleSigBuilder-ProcSet數組已創建

18:50:25,782信息[默認任務14] org.apache.pdfbox.pdmodel.interactive.digitalsignature.visible.PDVisibleSigBuilder-PDF頁面已創建

18:50:25,783信息[默認任務14] org.apache.pdfbox.pdmodel.interactive.digitalsignature.visible.PDVisibleSigBuilder-AcroForm已創建

18:50:25,788信息[默認任務14] org.apache.pdfbox.pdmodel.interactive.digitalsignature.visible.PDVisibleSigBuilder-簽名字段已創建

18:50:25,788信息[默認任務14] org.apache.pdfbox.pdmodel.interactive.digitalsignature.visible.PDVisibleSigBuilder-PDSignature已創建

18:50:25,788信息[默認任務14] org.apache.pdfbox.pdmodel.interactive.digitalsignature.visible.PDVisibleSigBuilder-AcroForm詞典已創建

18:50:25,789信息[默認任務14] org.apache.pdfbox.pdmodel.interactive.digitalsignature.visible.PDVisibleSigBuilder-已添加矩陣

18:50:25,792信息[默認任務14] org.apache.pdfbox.pdmodel.interactive.digitalsignature.visible.PDVisibleSigBuilder-簽名矩形已創建

18:50:25,793信息[默認任務14] org.apache.pdfbox.pdmodel.interactive.digitalsignature.visible.PDVisibleSigBuilder-格式化矩形

18:50:25,815信息[默認任務14] org.apache.pdfbox.pdmodel.interactive.digitalsignature.visible.PDVisibleSigBuilder-可見簽名圖像已創建

18:50:25,815信息[默認任務14] org.apache.pdfbox.pdmodel.interactive.digitalsignature.visible.PDVisibleSigBuilder-持有人表單流已創建

18:50:25,816信息[默認任務14] org.apache.pdfbox.pdmodel.interactive.digitalsignature.visible.PDVisibleSigBuilder-持有人表單資源已創建

18:50:25,816信息[默認任務14] org.apache.pdfbox.pdmodel.interactive.digitalsignature.visible.PDVisibleSigBuilder-持有人表單已創建

18:50:25,816信息[默認任務14] org.apache.pdfbox.pdmodel.interactive.digitalsignature.visible.PDVisibleSigBuilder-PDF外觀字典已創建

18:50:25,817信息[默認任務14] org.apache.pdfbox.pdmodel.interactive.digitalsignature.visible.PDVisibleSigBuilder-已創建另一種形式的流(內部形式-它將在持有人形式內)

18:50:25,817信息[默認任務14] org.apache.pdfbox.pdmodel.interactive.digitalsignature.visible.PDVisibleSigBuilder-已創建另一種形式的資源(內部形式-它將在持有人形式內)

18:50:25,817信息[默認任務14] org.apache.pdfbox.pdmodel.interactive.digitalsignature.visible.PDVisibleSigBuilder-已創建另一種形式(內部形式-它將在持有人形式內)

18:50:25,817信息[默認任務14] org.apache.pdfbox.pdmodel.interactive.digitalsignature.visible.PDVisibleSigBuilder-現在在內部表單中插入內部表單

18:50:25,817信息[默認任務14] org.apache.pdfbox.pdmodel.interactive.digitalsignature.visible.PDVisibleSigBuilder-創建的圖像表單流

18:50:25,817信息[默認任務14] org.apache.pdfbox.pdmodel.interactive.digitalsignature.visible.PDVisibleSigBuilder-創建的圖像表單資源

18:50:25,818信息[默認任務14] org.apache.pdfbox.pdmodel.interactive.digitalsignature.visible.PDVisibleSigBuilder-創建的圖像表單

18:50:25,818信息[默認任務14] org.apache.pdfbox.pdmodel.interactive.digitalsignature.visible.PDVisibleSigBuilder-創建的背景層表單

18:50:25,818信息[默認任務14] org.apache.pdfbox.pdmodel.interactive.digitalsignature.visible.PDVisibleSigBuilder-將ProcSet插入PDF

18:50:25,818信息[默認任務14] org.apache.pdfbox.pdmodel.interactive.digitalsignature.visible.PDVisibleSigBuilder-將外觀流注入pdf

18:50:25,818信息[默認任務14] org.apache.pdfbox.pdmodel.interactive.digitalsignature.visible.PDVisibleSigBuilder-可見簽名已創建

18:50:25,819信息[默認任務14] org.apache.pdfbox.pdmodel.interactive.digitalsignature.visible.PDVisibleSigBuilder-WidgetDictionary已創建

18:50:25,825 DEBUG [默認任務14] org.apache.pdfbox.cos.COSStream-創建InputStream,而無需在流之前寫入數據的情況下調用它。

18:50:25,825信息[默認任務14] org.apache.pdfbox.pdmodel.interactive.digitalsignature.visible.PDFTemplateCreator-流返回開始,大小= 21301

18:50:25,825信息[默認任務14]標准輸出-SignerName測試

18:50:25,857信息[默認任務14]標准輸出-內容長度:>>>>>>>>>>>>>>>>>>>>> 0

有人知道這是怎么回事嗎?

在您的代碼中,沒有為文檔提供可用於SignatureInterface實現。 在這種用例中不提供該選項,會使PDFBox假定您將在外部創建簽名(例如,查看原始的CreateVisibleSignature方法sign )。 在這種情況下,使用ExternalSigningSupport方法setSignature設置簽名后,結果將寫入輸出流。 否則,您的ByteArrayOutputStream baos保持為空。

但是您確實有一個SignatureInterface實例,該實例已經使用證書和密鑰材料進行了初始化: VisibleSignature vs 因此,我認為您沒有提供SignatureInterface並不是故意的。

因此,要提供SignatureInterface你必須使用一個PDDocument.addSignature超載與SignatureInterface參數。 例如替換您的電話

doc.addSignature(signature, vs.signatureOptions);

通過

doc.addSignature(signature, vs, vs.signatureOptions);

使您的代碼按需工作。

暫無
暫無

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

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