Java用のiText(最新バージョン)を使用して多くのPDFファイルに署名しようとしています。しかし、私は大きなものに問題があります。サイズが30Mバイトを超える(120 Mバイトまで)ファイルの場合、Acrobat Reader(およびその他のリーダー)で次のメッセージとともに署名が無効なエラーになります。SigDict/コンテンツの不正なデータ
同じコードは、サイズが30Mバイト未満の他のファイルでもうまく機能します。私が使用するコードは次のとおりです。
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)のバグに関連する問題のようです。
この投稿を参照してください:http://itext-general.2136553.n4.nabble.com/iText-error-in-signing-big-PDF-files-SigDict-Contents-illegal-data-td4655309.html#none
この種の問題を抱えているすべての人のために、私は投稿を開いたままにしておきます。