Метод getAcroForm (), возвращающий нулевые значения, но с PDFTextStripper я могу прочитать полный текст - PullRequest
0 голосов
/ 03 января 2019

У меня есть документ PDF. Я хочу прочитать поля этого документа, но объект PDAcroForm имеет значение null из docCatalog.getAcroForm();. с PDFTextStripper Я могу получить полный PDF в виде текста, но я хочу читать поля.

Документ здесь .

1 Ответ

0 голосов
/ 07 января 2019

PDF-файл, которым вы поделились, не содержит поля формы AcroForm.

Если вы проверите файл с помощью браузера PDF (например, iText RUPS или PDFBox PDFDebugger), вы увидите, что Каталог содержит только Pages и Type запись:

Catalog screen shot

В частности, нет записи AcroForm , которая объединяет данные формы AcroForm. Таким образом, docCatalog.getAcroForm(); не может вернуть любую существующую структуру поля.

Просмотр последних Содержание Поток, например. страница 1, каждый видит

Q
q
Q
q
1 0 0 1 329.78 655.45 cm
/Xi5 Do
Q
q
Q
q
1 0 0 1 324.17 624.51 cm
/Xi8 Do
Q
q
Q
q
1 0 0 1 265.95 702.31 cm
/Xi10 Do
Q
q
Q
q
1 0 0 1 554.46 655.6 cm
/Xi17 Do
Q
...

Это типично для PDF, который раньше содержал определение формы AcroForm, которое затем было сведено в содержимое страницы, для каждого бывшего поля формы XObject (который ранее определял внешний вид аннотации виджета поля формы) теперь ссылается непосредственно из потока содержимого страницы.

Таким образом, единственный способ извлечь содержимое - это извлечь текст.


Очевидная проблема с извлечением текста состоит в том, что может быть трудно различить прежнее содержимое поля и текст статической формы, такой как метки. В зависимости от количества PDF-файлов, из которых вам нужно извлечь данные, возможно, стоит расширить PDFTextStripper, чтобы добавить маркер для текста, извлеченного из некоторого содержимого XObject (в отличие от непосредственного содержимого страницы). Такие маркеры позволят вам достаточно хорошо дифференцироваться.

...