Как экспортировать поля формы pdf в xml автоматически

у меня есть pdf файл, включая поля формы, и необходимо экспортировать данные в автоматически. Вот экран образца формы, которую я создал для тестирования:

enter image description here

Примечание: он отлично работает, экспортируя его вручную использование Acrobat Professional, нажав на Tools > Form > Export Form Data и, наконец, выбрал расширение xml для вывода файла. Это результат, который я получаю, когда экспортирую его вручную:

<?xml version="1.0" encoding="UTF-8"?>
<fields>
    <first_name>John</first_name>
    <last_name>Doe</last_name>
</fields>

однако мне нужно автоматизировать его, например, с помощью скрипт python, реализация Java или какой-нибудь инструменты командной строки. Любые идеи, какие библиотеки или инструменты я мог бы использовать для экспорта данных поля формы в xml? Инструмент или библиотека должны быть открыть источник, что я могу интегрировать его в мой рабочий процесс.

Я уже пробовал python pdfminer библиотека, которая помогла мне экспортировать статические части (например Static form header, First name: и Last name:) файла pdf: но как экспортировать данные поля формы (в моем случае содержимое полей формы first_name и last_name)??

EDIT: не стесняйтесь загружать образец.pdf файл здесь.

5 ответов


как о Apache PDFBox? Он с открытым исходным кодом и может соответствовать вашим потребностям, так как на веб-сайте говорится: "извлеките данные форм из PDF-форм или заполните форму PDF."

EDIT: Проверьте пример PrintFields.


в bash вы можете сделать это (по крайней мере, с моей версией этих инструментов, меньше 444 и cat 8.13):

less ~/Downloads/sample.pdf | cat

Я получаю вывод, который выглядит так:

Static form header

First name:   John

Last name:    Doe

который вы можете разобрать довольно очевидно, используя Java/Python/awk / whatever.

конечно, в качестве альтернативы, если вы не хотите полагаться на поведение конкретных версий этих (не уверен, всегда ли они это делают или нет), вы можете посмотреть меньше исходный код чтобы увидеть, как это делает он.


в Java есть несколько библиотек для работы с PDF, но, как правило, трудно получить отформатированную информацию из PDF. Я никогда не реализовывал эту вещь, но Qoppa выглядит хорошо и кажется продвинутым, но это не бесплатно. Он содержит jPDFFields что должно быть полезно для извлечения значений из полей формы. Также есть похожие темы, в котором есть некоторая информация об инструменте командной строки.

Я надеюсь, что это будет полезно для вас.


Я имел большой успех, используя pdfminer:

pdf2txt.py -o out.xml -t xml sample.pdf

а затем разобрать его с помощью xpath и присоединиться к строкам, чтобы использовать его из кода отслеживать код здесь

кроме этого есть новый ребенок в блоке под названием tabula, написанный на ruby, который я еще не получил возможности использовать, но должен быть отличным

Я понимаю ваше нежелание использовать платный сервис, но все же стоит упомянуть, что Adobe имеет конверсию услуга, которая на момент написания стоит 2$ в месяц,зацените, просто говорю...


для решения Java вы можете использовать iText читать поля, а затем что-то вроде jackson-dataformat-xml для записи результатов в формате XML. A, несколько базовый пример этого:

// read fields
final PdfReader reader = new PdfReader("/path/to/my.pdf");

final AcroFields fields = reader.getAcroFields();
final Map<String, Object> values = new HashMap<>();
for (String fieldName : (Set<String>) fields.getFields().keySet()) {
    values.put(fieldName, fields.getField(fieldName));
}

// write
final XmlMapper mapper = new XmlMapper();
final String result = mapper.writeValueAsString(values);

System.out.println(result);

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