Как извлечь поля PDF из заполненной формы в Python?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как извлечь поля PDF из заполненной формы в Python?

Сообщение Anonymous »

Я пытаюсь использовать Python для обработки некоторых PDF-форм, которые были заполнены и подписаны с помощью Adobe Acrobat Reader.
Я пробовал:
  • Демо-версия pdfminer: он не выгружал никакие заполненные данные.
  • pyPdf: при моей попытке он загрузил ядро ​​на 2 минуты загрузите файл с помощью PdfFileReader(f) и я просто сдался и убил его.
  • Jython и PDFBox: все работает отлично, но время запуска слишком велико, я просто напишу внешнюю утилиту на чистом Java, если это мой единственный вариант.
Я могу продолжать искать библиотеки и пробовать их, но надеюсь, что у кого-то уже есть эффективное решение для этой проблемы.

Обновление: на основе данных Стивена ответ Я заглянул в pdfminer и он отлично справился со своей задачей.
from argparse import ArgumentParser
import pickle
import pprint
from pdfminer.pdfparser import PDFParser
from pdfminer.pdfdocument import PDFDocument
from pdfminer.pdftypes import resolve1, PDFObjRef

def load_form(filename):
"""Load pdf form contents into a nested list of name/value tuples"""
with open(filename, 'rb') as file:
parser = PDFParser(file)
doc = PDFDocument(parser)
return [load_fields(resolve1(f)) for f in
resolve1(doc.catalog['AcroForm'])['Fields']]

def load_fields(field):
"""Recursively load form fields"""
form = field.get('Kids', None)
if form:
return [load_fields(resolve1(f)) for f in form]
else:
# Some field types, like signatures, need extra resolving
return (field.get('T').decode('utf-16'), resolve1(field.get('V')))

def parse_cli():
"""Load command line arguments"""
parser = ArgumentParser(description='Dump the form contents of a PDF.')
parser.add_argument('file', metavar='pdf_form',
help='PDF Form to dump the contents of')
parser.add_argument('-o', '--out', help='Write output to file',
default=None, metavar='FILE')
parser.add_argument('-p', '--pickle', action='store_true', default=False,
help='Format output for python consumption')
return parser.parse_args()

def main():
args = parse_cli()
form = load_form(args.file)
if args.out:
with open(args.out, 'w') as outfile:
if args.pickle:
pickle.dump(form, outfile)
else:
pp = pprint.PrettyPrinter(indent=2)
outfile.write(pp.pformat(form))
else:
if args.pickle:
print(pickle.dumps(form))
else:
pp = pprint.PrettyPrinter(indent=2)
pp.pprint(form)

if __name__ == '__main__':
main()


Подробнее здесь: https://stackoverflow.com/questions/398 ... -in-python
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»