PDF表格字段操作

时间:2010-04-06 21:53:10

标签: python django pdf

我正在创建一个Web界面,使用来自数据库的用户数据自动填充pdf表单。管理员需要能够上传pdf(现在​​以IRS pdf格式为目标),然后将pdf中的字段与数据库中的数据字段相关联。

我需要一种方法来帮助管理员将字段名称(例如“topmostSubform [0] .Page2 [0] .p2-t66 [0]”)与数据库中的数据字段相关联。我正在寻找一种以编程方式修改PDF以便以某种方式提供此信息的方法。

基本上,我愿意接受有关如何在原始pdf的修改版本上以明显方式显示字段名称的建议。我最接近的是能够通过逐行编辑原始pdf将工具提示插入到pdf中的字段中。但是,当以这种方式编辑pdf时,字段名称是乱码,所以我不能只使用它们。

最佳解决方案是能够自动解析pdf并将每个字段的工具提示设置为字段名称的任何内容。任何可以从命令行或任何python工具运行的东西,或者只是从原始pdf文件中正确解析字段名称的基本内容都会很棒。

5 个答案:

答案 0 :(得分:1)

可能有一个比这更简单的解决方案,但你绝对可以通过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()

答案 1 :(得分:1)

这可能远离你想要的轨道;但是,值得一想。我一直在努力将扫描的结构化文档解析为Django模型实例。使用tesseract和unpaper进行预处理和OCR,我的准确率超过99%。这样我就可以使用Levenshteinre模块解析OCR输出文本并执行简单的new_instance = MyModel(parsed1, parsed2, ...)

您似乎正在尝试做类似的事情。查看http://www.irs.gov/formspubs/处的表单。他们往往在字段旁边放置文本标签。使用像py-tesseract这样的东西,您应该能够对标签进行OCR,将OCR文本覆盖在表单图像上,并允许用户选择/编辑字段标签。

有一个很好的小工具,ocrfeeder https://live.gnome.org/OCRFeeder,用python编写,可以让你基本了解该过程在桌面应用程序中的工作原理。祝你好运。

答案 2 :(得分:0)

可以在此处找到使用ReportLab和pyPDF的良好响应:Add text to Existing PDF using Python

答案 3 :(得分:0)

我可能会错误地解释这个问题但我在使用python / django生成pdf方面有很多经验,因为我工作了5个月的网站。我建议使用texlive。基本上我所做的是为文档构建了一个通用tex模板,然后使用django模板来插入字段。我使用render_to_string将模板渲染为html,然后使用pdflatex命令生成它。我使用pythons子进程模块和一些额外的运行pdflatex。为了进行生成,我使用了这些人pdflatex模块http://bit.ly/KaDMBp,并进行了一些修改。您需要的所有内容都在pdflatex目录的core.py中。

ex tex文件(test.tex))

\begin{document}

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

\end{document}

使用django模板和render_to_string进行渲染模板

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

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

生成为pdf)

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

Latex有一些令人烦恼,困难的学习曲线,但如果你花时间,你可以了解你需要知道什么才能创建这些pdf。

希望这有帮助。

答案 4 :(得分:0)

后记解析器位于此处:https://github.com/haxwithaxe/py-ps-parser

我一直对玩它很感兴趣,但还没有。