2010-04-06 22 views
8

Estoy haciendo una interfaz web para autocompletar formularios en PDF con datos de usuario de una base de datos. El administrador debe poder cargar un pdf (ahora mismo dirigido a los formularios de IRS pdf) y luego asociar los campos en el pdf con los campos de datos en la base de datos.PDF Form Field Manipulation

Necesito una forma de ayudar al administrador a asociar los nombres de campo (cosas como "topmostSubform [0] .Page2 [0] .p2-t66 [0]") con los campos de datos en la base de datos. Estoy buscando una manera de modificar el PDF programáticamente para de alguna manera proporcionar esta información.

Básicamente estoy abierto a sugerencias sobre cómo podría hacer que los nombres de campo aparezcan de manera obvia en una versión modificada del pdf original. Lo más cercano que he conseguido es poder insertar información sobre herramientas en los campos en el pdf simplemente editando el pdf sin procesar línea por línea. Sin embargo, al editar el pdf de esta manera, los nombres de campo son un galimatías, por lo que no puedo usarlos.

Una solución óptima sería cualquier cosa que pueda analizar automáticamente un pdf y establecer el tooltip de cada campo para que sea el nombre del campo. Cualquier cosa que se pueda ejecutar desde la línea de comandos, o cualquier herramienta de python, o simplemente una forma básica de analizar correctamente el nombre de un campo desde un archivo pdf sin procesar sería increíble.

+0

Consulte esta pregunta http://stackoverflow.com/questions/1890570/how- can-i-auto-populate-a-pdf-form-in-django-python – sepulchered

Respuesta

1

Puede haber una solución más fácil que esta, pero definitivamente puede hacer el trabajo con http://www.reportlab.com/software/opensource/rl-toolkit/'>ReportLab.

Si puede guardar los formularios de impuestos actuales como una imagen, puede determinar dónde se escriben cada uno de los artículos y desarrollar su código para que coloque automáticamente los valores apropiados de la base de datos en la parte superior de la imagen (el formulario de impuestos, o lo que sea).

Una vez que haya determinado 1) Lo que necesitan campos para ser sacado de la base de datos, y 2) en el que se supone que debemos seguir dentro de la forma ...

esto es esencialmente lo que sería haciendo:

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

que puede estar interpretando mal la pregunta pero tengo mucha experiencia en la generación de pdf con Python/Django debido a la sitio en el que trabajé durante 5 meses. Sugeriría usar texlive. Básicamente, lo que hice fue construir una plantilla tex genérica para un documento y luego usar plantillas django para insertar los campos. Representé la plantilla como si fuera html usando render_to_string y luego la generé usando el comando pdflatex. Ejecuté pdflatex usando el módulo de subproceso de pitones y un poco más. Para hacer la generación utilicé este módulo chicos pdflatex http://bit.ly/KaDMBp, con algunas modificaciones. Todas las cosas que necesita están en core.py dentro del directorio pdflatex.

Ex documento tex (test.tex))

\begin{document} 

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

\end{document} 

Ex plantilla de representación con plantillas django y render_to_string)

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

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

Ex generación como pdf)

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

látex tiene una curva de aprendizaje algo molesta y difícil pero si pones el tiempo puedes aprender lo que necesitas o saber para crear estos pdfs.

Espero que esto ayude.

1

Esto puede estar muy alejado de la ruta deseada; pero, valdría la pena pensar. He estado trabajando en el análisis de documentos estructurados escaneados en instancias de modelo de Django. Usando tesseract y unpaper para hacer el preprocesamiento y el OCR, obtengo una precisión superior al 99%. Eso me permite analizar el texto de salida de OCR con los módulos Levenshtein y re y hacer un simple new_instance = MyModel(parsed1, parsed2, ...).

Parece que estás intentando hacer algo similar. Mirando los formularios al http://www.irs.gov/formspubs/ Tienden a tener etiquetas de texto a la izquierda de los campos. Usando algo como py-tesseract, debería poder OCR las etiquetas, superponer el texto de OCR sobre la imagen del formulario y permitir al usuario seleccionar/editar las etiquetas de campo.

Hay una pequeña herramienta, ocrfeederhttps://live.gnome.org/OCRFeeder, que está escrita en python y debería darle una idea básica de cómo funciona el proceso en una aplicación de escritorio. Buena suerte.