Как автоматически экспортировать поля формы 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);
Здесь определенно есть место для улучшений, но это может быть достаточно хорошей отправной точкой.