【发布时间】:2018-10-29 13:39:03
【问题描述】:
我目前正在一个 Java 应用程序上处理 PDF,该应用程序对 PDF 文档进行了一些修改。
目前,这些 PDF 的签名工作正常,因为我正在使用 FileInputStream 和 FileOutputStream 等类。基本上,我从源文件夹中复制原始文档,然后将它们放在输出文件夹中。我正在使用带有 pdfbox 1.8.9 的 PDDocument 类
但是,我想使用相同的文件,这意味着我不再假装复制 PDF。我想获取文件,签名,然后覆盖原始文件。
因为我了解到让 FileInputStream 和 FileOutputStream 指向同一个文件不是一个好主意,所以我只是尝试使用 File 类。
我尝试了以下方法:
File file = new File(locOriginal);
PDDocument doc = PDDocument.load(file);
PDSignature signature = new PDSignature();
Overlay overlay = new Overlay();
//The signature itself. It has not been modified
signature.setFilter(PDSignature.SUBFILTER_ADBE_PKCS7_DETACHED); // default filter
signature.setSubFilter(PDSignature.SUBFILTER_ADBE_PKCS7_DETACHED);
if (msg.getAreaNegocio().startsWith("A")) {
signature.setName(this.campoCertificadoAcquiring);
signature.setLocation(this.localCertificadoAcquiring);
signature.setReason(this.razaoCertificadoAcquiring);
}else {
signature.setName(this.campoCertificadoIssuing);
signature.setLocation(this.localCertificadoIssuing);
signature.setReason(this.razaoCertificadoIssuing);
}
// register signature dictionary and sign interface
doc.addSignature(signature,this);
doc.saveIncremental(file.getAbsolutePath());
doc.close();
我的 PDF 文件确实按预期被覆盖,但是当我打开文件时签名不再有效。我读了这些问题......它与这些问题中的任何一个有关吗?我能做些什么来解决这个问题?
PDFBox 1.8.10: Fill and Sign PDF produces invalid signatures
PDFBox - opening and saving a signed pdf invalidates my signature
感谢您的帮助!
【问题讨论】:
-
顺便说一句:
signature.setFilter(PDSignature.SUBFILTER_ADBE_PKCS7_DETACHED)- 将过滤器设置为子过滤器名称没有意义。现在过滤器名称已经不再重要了,所以这可能不会导致失败,但设置它仍然是无稽之谈。 -
我没有开发代码。此代码是很久以前制作的,但感谢您启发我! :)