Подписание PDF-файла на основе XFA с помощью iText

У меня есть PDF на основе XFA, некоторые поля должны быть подписаны. Однако эти поля встроены в форму XFA, поэтому я не могу подписать ее, используя следующие коды

public void sign(String keystore, char[] password, String src, String name, String dest)
        throws GeneralSecurityException, IOException, DocumentException {
    KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());
    ks.load(new FileInputStream(keystore), password);
    String alias = (String)ks.aliases().nextElement();
    PrivateKey pk = (PrivateKey) ks.getKey(alias, password);
    Certificate[] chain = ks.getCertificateChain(alias);
    // Creating the reader and the stamper
    PdfReader reader = new PdfReader(src);
    FileOutputStream os = new FileOutputStream(dest);
    PdfStamper stamper = PdfStamper.createSignature(reader, os, '\0', null, true);

    // Creating the appearance
    PdfSignatureAppearance appearance = stamper.getSignatureAppearance();
    appearance.setVisibleSignature(name);
    // Creating the signature
    PrivateKeySignature pks = new PrivateKeySignature(pk, DigestAlgorithms.SHA256, "BC");
    ExternalDigest digest = new BouncyCastleDigest();
    MakeSignature.signDetached(appearance, digest, pks, chain, null, null, null, 0, MakeSignature.CryptoStandard.CMS);
}

Например, у меня есть поле с именем "root[0].mainpage[0].root[2].DefaultPage[0].Page1[0].SignArea[0].GSA[0].GSF-shinfo_sh-tmp03_sh_sf[0]". Когда я попытался поставить его в аргумент "имя", я получил сообщение об ошибке

"Исключение в потоке" main "java.lang.IllegalArgumentException: поле root [0].mainpage [0].root [2].DefaultPage [0].Page1 [0].SignArea [0].GSA [0]. GSF-shinfo_sh-tmp03_sh_sf [0] не существует. "

Я работал над этой проблемой в течение недели, но я не нашел решения. Есть ли идеи по этому вопросу? Спасибо!

PS: Это URL загрузки файла.

0 ответов

Другие вопросы по тегам