当前位置: 首页 > 知识库问答 >
问题:

PDFBox 2.0.8单据签字时出库

陈开宇
2023-03-14

我正在尝试使用此方法签署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,779信息[默认任务-14]stdout-acroform为空?假

18:50:25,780信息[默认任务-14]stdout-Acroform GetNeedExceptions?假

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.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-Formatter矩形已创建

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-已创建另一个表单(内部表单-它将在holder表单内部)的流

18:50:25,817信息[默认任务-14]org.apache.pdfbox.pdmodel.interactive.digitalsignature.visible.pdvisiblesigbuilder-已创建另一个表单(内部表单-它将位于holder表单内部)的资源

18:50:25,817 INFO[默认任务-14]org.apache.pdfbox.pdmodel.interactive.digitalsignature.visible.pdvisiblesigbuilder-已创建另一个表单(内部表单-它将位于holder表单内部

18:50:25,817信息[默认任务-14]org.apache.pdfbox.pdmodel.interactive.digitalsignature.visible.pdvisiblesigbuilder-现在将内部窗体插入到holder窗体中

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-插入到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[default task-14]org.apache.pdfbox.cos.cosstream-创建调用的InputStream,之前没有将数据写入流。

18:50:25,825信息[默认任务-14]org.apache.pdfbox.pdmodel.interactive.digitalsignature.visible.pdftemplateCreator-流返回已启动,size=21301

18:50:25,825信息[默认任务-14]stdout-signernamehtml" target="_blank">测试

18:50:25,857信息[默认任务-14]stdout-内容长度:>>>>>>>>>>>>>>>>>>>0

有人知道这是怎么回事吗?

共有1个答案

薛宇
2023-03-14

在代码中,您没有为文档提供可用于签名的signatureinterface实现。在此用例中,不提供此功能会使PDFBox假定您将在外部创建签名(例如,查看原始的createVisiblesignatury方法sign)。在这种情况下,在使用ExternalSigningSupport方法SetSignate设置签名后,将结果写入输出流。由于不这样做,您的ByteArrayOutputStream baos将保持为空。

但是您确实有一个SignatureInterface实例,您已经用证书和密钥材料初始化了该实例:您的VisibleSignature vs。因此,我认为您没有提供signatureinterface不是故意的。

因此,要提供SignatureInterface,必须使用带有SignatureInterface参数的PDDocument.AddSignature重载。例如。正在替换您的呼叫

doc.addSignature(signature, vs.signatureOptions);

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

使您的代码能够正常工作。

 类似资料:
  • 我正在使用贝宝快捷结账按钮。问题是,如果用户更改付款金额,paypal按钮将再次呈现。当我点击paypal按钮时,有没有办法渲染该按钮?我与贝宝结帐工作。js https://developer.paypal.com/docs/archive/checkout/integrate/# 更新:在web组件中工作,所以所有代码都在renderedcall back()中

  • 我在尝试验证类中的ECDSA签名时遇到此错误。错误代码为: 我在VerificationBox中调用这个方法。java类: 这是SDSGeneration.Signing: 我写了一个测试类来测试SDSGeneration.Signing代码和一切运行良好,签名和验证数据,但是在我的项目中导入和使用它时,会出现下面的错误。这是测试类代码:

  • 我在印度使用进行在线支付, 我想要一个像账单地址这样的自定义字段应该存储在razorpay帐户和结帐表中。我知道,它将自定义数据存储到razorpay帐户,但我没有得到任何链接来设置结帐表单中的这些字段。 我的代码: 所以,我的问题是,如何在razorpay结账表单中获取所有字段?

  • 我需要在两个结账页面中显示订单摘要,即当您在Magento2默认设置中在购物车中添加产品后将转到以下URL时: localhost/magento216/签出/ localhost/magento216/结账/#付款 您可以检查第一个URL中的订单摘要不包含order totals块。请查看截图寻求帮助。 我想要的是在localhost/magento216/checkout/类似地工作在loca

  • 为什么我不能从Woocommerce签出字段中检索数据,以便在订单处理时更新订阅数据? 我想根据客户结帐时的频率请求更新下一个续订日期。这是我的密码: 1) 设置签出字段: 2) 更新订单元数据。这将在客户订单上创建两个自定义字段,并更新订阅上的计费间隔: 3) 更新续约日期 对于最后一部分,我可以使用我选择的虚拟日期更新续约日期(例如:,但当我试图让它读取字段时,它会恢复为默认值。 这是我尝试过

  • 错误500 JDK 1.8 Tomcat 8.0.38 HTTP状态500-处理JSP页面/index1时发生异常。11号线 类型异常报告 消息处理JSP页面/index1时发生异常。11号线 说明服务器遇到内部错误,无法满足此请求。 index1。jsp 通用域名格式。快乐的心情。业主立案法团。豆小豆。JAVA RegisterAndLoginController。JAVA web.xml WE