[英]Problem with adding long term validation to signed pdf using iText
I have a problem with adding long-term-validation to PDF signed using iText.我在向使用 iText 签名的 PDF 添加长期验证时遇到问题。 Do not know why it generates broken pdf.
不知道为什么会生成损坏的 pdf。 When I try to add LTV to PDF signed by different lib (ex 'node-signpdf') then I got valid PDF.
当我尝试将 LTV 添加到由不同库(例如“node-signpdf”)签名的 PDF 时,我得到了有效的 PDF。
Signing of pdf looks like this: pdf 的签名如下所示:
private static void applySignature(InputStream src,
OutputStream dest,
Certificate[] chain,
PrivateKey pk,
String digestAlgorithm,
String provider,
PdfSigner.CryptoStandard subfilter,
String reason,
String location)
throws GeneralSecurityException, IOException {
PdfReader reader = new PdfReader(src);
PdfSigner signer = new PdfSigner(reader, dest, true);
PdfSignatureAppearance appearance = signer.getSignatureAppearance()
.setReason(reason)
.setLocation(location)
.setReuseAppearance(false);
Rectangle rect = new Rectangle(0, 0, 0, 0);
appearance.setPageRect(rect).setPageNumber(1);
signer.setFieldName("Signature1");
IExternalSignature pks = new PrivateKeySignature(pk, digestAlgorithm, provider);
IExternalDigest digest = new BouncyCastleDigest();
signer.signDetached(digest, pks, chain, null, null, null, 0, subfilter);
}
Enabling LTV is basically taken from iText examples -> https://github.com/mkl-public/testarea-itext7/blob/master/src/main/java/mkl/testarea/itext7/signature/AdobeLtvEnabling.java Enabling LTV is basically taken from iText examples -> https://github.com/mkl-public/testarea-itext7/blob/master/src/main/java/mkl/testarea/itext7/signature/AdobeLtvEnabling.java
My code can be found here -> https://github.com/lstachowiak/pdf-sign-and-enable-ltv-example我的代码可以在这里找到-> https://github.com/lstachowiak/pdf-sign-and-enable-ltv-example
Thanks in advance for any help!提前感谢您的帮助!
In your PdfExample.main
you do在你的
PdfExample.main
你做
public static void main(String[] args) throws Exception {
...
PdfReader pdfSigned = new PdfReader(new FileInputStream(OUT_SIGNED_PDF));
PdfDocument pdf = new PdfDocument(pdfSigned, new PdfWriter(OUT_SIGNED_LTV_PDF), new StampingProperties().preserveEncryption().useAppendMode());
AdobeLtvEnabling adobeLtvEnabling = new AdobeLtvEnabling(pdf);
adobeLtvEnabling.enable();
}
Here you forget to call pdf.close()
or alternatively use a try-with-resources construct:在这里,您忘记调用
pdf.close()
或使用 try-with-resources 构造:
try (
PdfReader pdfSigned = new PdfReader(new FileInputStream(OUT_SIGNED_PDF));
PdfDocument pdf = new PdfDocument(pdfSigned, new PdfWriter(OUT_SIGNED_LTV_PDF), new StampingProperties().preserveEncryption().useAppendMode());
) {
AdobeLtvEnabling adobeLtvEnabling = new AdobeLtvEnabling(pdf);
adobeLtvEnabling.enable();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.