【问题标题】:PDF Form Field ManipulationPDF 表单字段操作
【发布时间】:2011-02-05 00:39:40
【问题描述】:

我正在制作一个网络界面,以使用数据库中的用户数据自动填充 pdf 表单。管理员需要能够上传 pdf(目前针对 IRS pdf 表单),然后将 pdf 中的字段与数据库中的数据字段相关联。

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

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

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

【问题讨论】:

标签: python django pdf


【解决方案1】:

这可能会偏离您的预期;但是,这可能值得考虑。我一直致力于将扫描的结构化文档解析为 Django 模型实例。使用 tesseract 和 unpaper 进行预处理和 OCR,我得到了超过 99% 的准确率。这让我可以使用 Levenshteinre 模块解析 OCR 输出文本并执行简单的 new_instance = MyModel(parsed1, parsed2, ...)

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

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

【讨论】:

    【解决方案2】:

    这里有一个后记解析器:https://github.com/haxwithaxe/py-ps-parser

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

    【讨论】:

      【解决方案3】:

      我可能对问题的解释有误,但由于我在该网站上工作了 5 个月,因此我在使用 python/django 生成 pdf 方面有很多经验。我建议使用 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 的 Ex 渲染模板)

      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()
      

      Latex 的学习曲线有些烦人且困难,但如果您花时间学习创建这些 pdf 文件所需的知识。

      希望这会有所帮助。

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-04-18
          • 2011-12-15
          • 2013-08-04
          • 2011-01-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-03-15
          相关资源
          最近更新 更多