PDFBox 1.8.10: заполнить и подписать PDF создает недействительные подписи
Я заполняю (программно) форму (AcroPdf) в документе PDF и впоследствии подписываю документ. Я начинаю с doc.pdf, создаю doc_filled.pdf, используя пример setFields.java для PDFBox. Затем я подписываю doc_filled.pdf, создавая doc? Fill_signed.pdf, используя некоторый код, основанный на примерах подписи, и открываю pdf в Acrobat Reader. Введенные данные поля видны, и панель подписи говорит мне
«Есть ошибки в форматировании или информации, содержащейся в этой подписи (недопустимый байтовый массив подписи)»
До сих пор я знаю, что:
код подписи, примененный один (то есть непосредственно создавая некоторый файл doc_signed.pdf), создает действительную подписьпроблема существует для «невидимых подписей», видимых подписей и видимых подписей, добавляемых в существующие поля подписи.проблема даже возникает, если я не заполняю форму, а только открываю и сохраняю ее, т.е.
PDDocument doc = PDDocument.load(new File("doc.pdf"));
doc.save(new File("doc_filled.pdf"));
doc.close();
Достаточно сломать впоследствии примененный код подписи.
С другой стороны, если я возьму тот же файл doc.pdf, введите значения поля вручную в Adobe, код подписи создаст действительные подписи.
Что я делаю неправильно?
Обновить:
@mkl попросил меня предоставить файлы, о которых я говорю (у меня сейчас недостаточно репутации, чтобы публиковать все файлы как ссылки, извините за неудобства):
odc.pdf:https://www.dropbox.com/s/ev8x9q48w5l0hof/doc.pdf?dl=0doc_filled.pdf:https://www.dropbox.com/s/fxn4gyneizs1zzb/doc_filled.pdf?dl=0doc_filled_signed.pdf:https://www.dropbox.com/s/xm846sj8f9kiga9/doc_filled_signed.pdf?dl=0doc_filled_and_signed.pdf:https://www.dropbox.com/s/5jftje6ke87jedr/doc_filled_and_signed.pdf?dl=0последний был создан, подписав и заполнив документ за один раз, используя
doc.saveIncremental();
Как я уже писал в комментарии, некоторые
setNeedToBeUpdate(true);
кажется, отсутствует, хотя. Со ссылкой на второй комментарий @mkl я нашел такой вопрос:Значение сохраненного текстового поля не отображается должным образом в PDF, созданном с использованием PDFBOX, что также относится к некоторому введенному тексту, который не отображается. Я дал ему первую попытку, применяя
setBoolean(COSName.getPDFName("NeedAppearances"), true);
в словарь поля и формы, который затем показывает контекст полей, но подпись не добавляется в конце. Тем не менее я должен смотреть дальше в этом.
Обновить: История продолжается здесь:PDFBox 1.8.10: заполнить и подписать документ, заполнение снова не удается