PDF манипулирование полем формы - PullRequest
9 голосов
/ 07 апреля 2010

Я делаю веб-интерфейс для автозаполнения форм PDF с данными пользователя из базы данных. Администратор должен иметь возможность загрузить PDF (прямо сейчас нацеленный на формы PDF IRS), а затем связать поля в PDF с полями данных в базе данных.

Мне нужен способ помочь администратору связать имена полей (например, «topmostSubform [0] .Page2 [0] .p2-t66 [0]») с полями данных в базе данных. Я ищу способ программно изменить PDF, чтобы каким-то образом предоставить эту информацию.

По сути, я открыт для предложений о том, как сделать так, чтобы имена полей появлялись очевидным образом в модифицированной версии исходного PDF. Самое близкое, что я получил, - это возможность вставлять всплывающие подсказки в поля в формате PDF, просто построчно редактируя необработанный файл PDF. Тем не менее, при редактировании pdf таким образом имена полей являются бессмысленными, и поэтому я не могу их просто использовать.

Оптимальным решением будет все, что может автоматически проанализировать pdf и установить подсказку для каждого поля в качестве имени поля. Все, что можно запустить из командной строки, из любого инструмента python или просто как правильно разобрать имя поля из необработанного pdf-файла, было бы удивительно.

Ответы [ 5 ]

1 голос
/ 08 июня 2012

Это может быть далеко от вашего намеченного трека; но, возможно, стоит подумать. Я работал над анализом отсканированных структурированных документов в экземплярах модели Django. Используя tesseract и unpaper для предварительной обработки и распознавания текста, я получаю точность более 99%. Это позволяет мне анализировать выходной текст OCR с модулями Levenshtein и re и выполнять простое new_instance = MyModel(parsed1, parsed2, ...).

Кажется, вы пытаетесь сделать нечто подобное. Глядя на формы на http://www.irs.gov/formspubs/ У них, как правило, есть текстовые метки слева от полей. Используя что-то вроде py-tesseract, вы должны иметь возможность OCR меток, накладывать текст OCR на изображение формы и позволять пользователю выбирать / редактировать метки полей.

Существует небольшой симпатичный инструмент, ocrfeeder https://live.gnome.org/OCRFeeder,, написанный на python и который должен дать вам базовое представление о том, как этот процесс работает в настольном приложении. Удачи.

1 голос
/ 07 апреля 2010

Может быть более простое решение, чем это, но вы определенно могли бы выполнить работу с http://www.reportlab.com/software/opensource/rl-toolkit/'>ReportLab.

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

После того, как вы определились 1) Какие поля необходимо извлечь из базы данных, и 2) где они должны находиться внутри формы ...

это, по сути, то, что вы будете делать:

from reportlab.pdfgen import canvas 

report_string_values = ['Alex',500,500],['Guido',400,400],
c = canvas.Canvas('hello.pdf')
c.drawImage(background_image,x_pos,y_pos) # x_pos and w_pos are # pixels from bl origin
for rsv in report_string_values:  
    c.drawString(rsv.x_pos,rsv.,rsv.text) 
c.showPage()
c.save()
0 голосов
/ 23 мая 2012

Парсер постскриптума живет здесь: https://github.com/haxwithaxe/py-ps-parser

Мне было интересно играть с ним, но пока нет.

0 голосов
/ 16 мая 2012

Возможно, я неправильно истолковал вопрос, но у меня большой опыт создания pdf с python / django из-за сайта, над которым я работал 5 месяцев. Я бы предложил использовать texlive. По сути, я сделал общий шаблон tex для документа, а затем использовал шаблоны django для вставки полей. Я визуализировал шаблон, как если бы он был html, используя render_to_string, а затем сгенерировал его с помощью команды pdflatex. Я запустил pdflatex, используя модуль подпроцесса pythons и немного больше. Для генерации я использовал модуль pdflatex для парней http://bit.ly/KaDMBp, с некоторыми изменениями. Все, что вам нужно, находится в core.py внутри каталога pdflatex.

Ex tex документ (test.tex))

\begin{document}

my name is {{input_name}} and i live in {{input_location}}.

\end{document}

Ex шаблон рендеринга с шаблонами django и render_to_string)

params={input_name:"andrew",input_location:"nyc"}

tex_doc = render_to_string('test.tex', params)

Ex генерирует как pdf)

pdflatex = PDFLatex(texfile=tex_path,outputdir=pdf_path)
pdflatex.transform()

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

Надеюсь, это поможет.

0 голосов
/ 16 июля 2010

Хороший ответ с использованием ReportLab и pyPDF можно найти здесь: Добавление текста в существующий PDF с использованием Python

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...