Комментарий Бруноса объясняет, почему PDF-файл зашифрован, даже если вам не нужно вводить пароль:
PDF может быть зашифрован двумя паролями: пароль пользователя и пароль владельца . Если PDF-файл зашифрован с помощью пароля user , вы не сможете открыть документ в программе просмотра PDF без ввода этого пароля. Если PDF-файл зашифрован только с помощью пароля owner , каждый может открыть PDF-файл без этого пароля, но могут быть некоторые ограничения. Вы можете распознать PDF-файлы, зашифрованные с помощью пароля владельца, поскольку в Adobe Reader упоминается «ЗАЩИЩЕНО».
Ваш PDF зашифрован с использованием только пароля владельца, т.е. пароль пользователя пуст. Таким образом, вы можете расшифровать его, используя пустой пароль ""
, например, в вашей версии PDFBox:
document.decrypt("");
(Кстати, этот «метод 1» точно такой же, как ваш «метод 2»
document.openProtection(new StandardDecryptionMaterial(""));
плюс некоторые исключения.)
Комментарий Тилмана подразумевает причину, по которой вы не извлекаете значения формы: ваш код использует PDFTextStripperByArea
для извлечения текста, но это извлечение текста только извлекает фиксированное содержимое страницы , а не содержимое аннотаций , плавающих на этой странице.
Содержимое, которое вы хотите извлечь, - это содержимое полей формы, виджеты которых являются аннотациями.
Предложение Тильмана
doc.getDocumentCatalog().getAcroForm().getField("form1[0].#subform[3].address[0]").getValueAsString()
показывает, как извлечь значение поля формы, имя которого вы знаете, "form1[0].#subform[3].address[0]"
в этом случае. Если вы не знаете имя поля, из которого вы хотите извлечь содержимое, у объекта PDAcroForm
, возвращаемого doc.getDocumentCatalog().getAcroForm()
, есть ряд других методов для доступа к содержимому поля.
Кстати, имя поля, например "form1[0].#subform[3].address[0]"
в определении AcroForm , указывает на еще одну особенность вашего PDF: на самом деле оно содержит два определения формы , ядро PDF * 1054 Определение * AcroForm и более независимое определение XFA . Оба описывают одну и ту же визуальную форму. Такая форма PDF называется гибридной формой PDF .
Преимущество гибридных форм заключается в том, что их можно просматривать и заполнять с помощью инструментов PDF, которые знают только AcroForm форм (которые по сути являются всеми программами, кроме Adobe), в то время как инструменты PDF с поддержкой XFA (в основном только Adobe) программное обеспечение) может использовать дополнительные функции XFA.
Недостаток гибридных форм заключается в том, что если они заполнены с помощью инструмента без поддержки XFA, обновляется только информация AcroForm , а информация XFA остается прежней. Таким образом, гибридный документ может содержать разные данные для одного и того же поля ...