В настоящее время я работаю с PDF-файлами в приложении Java, которое вносит некоторые изменения в PDF-документы.
В настоящее время подписание этих PDF-файлов работает, так как я использую такие классы, как FileInputStream и FileOutputStream. По сути, я копирую исходные документы из исходной папки, а затем помещаю их в выходную папку с помощью. Я использую класс PDDocument с pdfbox 1.8.9
Однако я хочу использовать один и тот же файл, то есть я больше не претендую на то, что копирую PDF-файлы. Я хочу взять документ, подписать его и перезаписать оригинальный.
Поскольку я узнал, что указывать FileInputStream и FileOutputStream на один и тот же файл не очень хорошая идея, я просто попытался использовать класс File.
Я попробовал следующее:
File file = new File(locOriginal);
PDDocument doc = PDDocument.load(file);
PDSignature signature = new PDSignature();
Overlay overlay = new Overlay();
//The signature itself. It has not been modified
signature.setFilter(PDSignature.SUBFILTER_ADBE_PKCS7_DETACHED); // default filter
signature.setSubFilter(PDSignature.SUBFILTER_ADBE_PKCS7_DETACHED);
if (msg.getAreaNegocio().startsWith("A")) {
signature.setName(this.campoCertificadoAcquiring);
signature.setLocation(this.localCertificadoAcquiring);
signature.setReason(this.razaoCertificadoAcquiring);
}else {
signature.setName(this.campoCertificadoIssuing);
signature.setLocation(this.localCertificadoIssuing);
signature.setReason(this.razaoCertificadoIssuing);
}
// register signature dictionary and sign interface
doc.addSignature(signature,this);
doc.saveIncremental(file.getAbsolutePath());
doc.close();
Мой файл PDF перезаписывается, как задумано, однако подпись больше не действительна, когда я открываю файл. Я читаю эти вопросы ... Это относится к любому из этих вопросов? Что я могу сделать, чтобы решить это?
PDFBox 1.8.10: при заполнении и подписи PDF создаются недействительные подписи
PDFBox - открытие и сохранение подписанного PDF-файла делает мою подпись недействительной
Спасибо за помощь!