Можно ли создать цифровую подпись для уже подписанного документа PDF?
В общем, да, но дополнительная подпись должна быть добавлена в инкрементном обновлении, чтобы не сделать недействительной существующую подпись. Для некоторых фонов см. этот ответ .
В случае вашего кода это означает, что вы должны заменить строку
stamper = PdfStamper.createSignature(reader, os, '\0');
от
stamper = PdfStamper.createSignature(reader, os, '\0', null, true);
true
указывает на то, что подпись должна применяться в режиме добавления , который является языком iText для добавления изменений в добавочное обновление.
Кроме того, вы должны убедиться, что новая подпись создана в другом поле формы. Ваш код добавляет подпись в поле "sig" с кодированным кодом:
appearance.setVisibleSignature(new Rectangle(800, 732, 512, 780), 1, "sig");
Если вы знаете, что имя поля ранее существовавшей подписи отличается, это нормально. В противном случае вы можете заменить «sig» на null
, что заставит iText создать уникальное имя поля для новой подписи.
Выше я сказал «в общем, да» - есть исключение, если оригинальная подпись является сертификационной подписью с «изменения не допускаются», применение дополнительной подписи нарушит оригинальную подпись, так как применение является изменением.