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

У меня есть pdf файл, содержащий поля формы и необходимо экспортировать данные в xml файл АВТОМАТИЧЕСКИ. Вот экран образца формы, который я создал для тестирования:

Примечание: он отлично работает, экспортируя его вручную, используя 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? Инструмент или библиотека должны быть с открытым исходным кодом, чтобы я мог интегрировать их в свой рабочий процесс.

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

РЕДАКТИРОВАТЬ: не стесняйтесь скачать файл sample.pdf здесь.

5 ответов

Решение

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

РЕДАКТИРОВАТЬ: Проверьте пример PrintFields.

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

less ~/Downloads/sample.pdf | cat

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

Static form header

First name:   John

Last name:    Doe

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

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

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

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

У меня был большой успех с использованием pdfminer:

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

а затем проанализируйте его, используя строки xpath и join, чтобы использовать его из своего кода.

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

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

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

// 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);

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

Другие вопросы по тегам