我正在尝试使用 iText(最新版本)为 Java 签署大量 PDF 文件。但我对大的有问题。对于大小超过 30 MByte(直到 120 MByte)的文件,我在 Acrobat 阅读器(和其他阅读器)中收到签名无效错误并显示以下消息:SigDict / Contents 非法数据
相同的代码适用于大小 < 30 MByte 的其他文件。这是我使用的代码:
KeyStore ks = KeyStore.getInstance("JKS");
ks.load(new FileInputStream(keystore_path), keystore_password.toCharArray());
String alias = prop.getProperty("key.alias");
PrivateKey pk = (PrivateKey)ks.getKey(alias , key_password.toCharArray());
Certificate[] chain = ks.getCertificateChain(alias);
PdfReader reader = new PdfReader(fileIn.getPath(), ownerpassword);
PdfStamper stamper = PdfStamper.createSignature(reader, new FileOutputStream(fileOut), '\0', null , true);
PdfSignatureAppearance appearance = stamper.getSignatureAppearance();
appearance.setCrypto(pk, chain, null, PdfSignatureAppearance.WINCER_SIGNED);
Rectangle rect = new Rectangle(Integer.parseInt(prop.getProperty("sign.field.start.x")),
Integer.parseInt(prop.getProperty("sign.field.start.y")),
Integer.parseInt(prop.getProperty("sign.field.end.x")),
Integer.parseInt(prop.getProperty("sign.field.end.y")));
appearance.setReason(prop.getProperty("sign.field.reason"));
appearance.setLocation(prop.getProperty("sign.field.location"));
appearance.setVisibleSignature(rect, Integer.parseInt(prop.getProperty("sign.field.page")), "SignField");
stamper.close();
- - 更新 - -
这似乎是一个与 Java 的 iText(至少 5.2.1)错误有关的问题。
我为所有遇到此类问题的人打开了帖子。