【问题标题】:How to extract data from a PDF?如何从PDF中提取数据?
【发布时间】:2009-07-07 11:04:59
【问题描述】:

我的公司通过 Excel 从外部公司接收数据。我们将其导出到 SQL Server 以运行数据报告。他们现在正在更改为 PDF 格式,有没有办法可靠地将 PDF 中的数据移植到我们的 SQL Server 2008 数据库中?

这需要编写一个应用程序还是有一种自动化的方式来做到这一点?

【问题讨论】:

  • 这里没有准确的答案,Fermin,你有提取工具吗?
  • @CallMeLaNN - 我的公司与提供数据的第 3 方达成协议,因此最终我不需要为此写任何东西。

标签: sql-server-2008 pdf extraction


【解决方案1】:

如前所述 - 您必须编写一个应用程序来执行此操作,但理想情况下,您可以从外部公司获取原始数据,而不必处理 PDF。 p>

但是,如果您确实想从 PDF 中提取数据,我使用了 iText ,发现它非常强大、可靠而且最重要的是 - 免费罢工>。它有 Java 和 .Net 风格——iTextSharp 是 .Net 版本。它允许您以编程方式操作 PDF 文档,并将 PDF 的内容公开给您编写的应用程序。

【讨论】:

  • itext/itextsharp 因为 5.0 版不再免费
【解决方案2】:

这完全取决于他们如何在 PDF 中包含数据。一般来说,这里有两种可能的情况:

  1. 数据只是 PDF 中的文本对象。您需要使用工具从 PDF 中提取文本,然后将其插入数据库。

  2. 数据包含在 PDF 的表单域中。您需要使用工具从表单字段中提取数据并将其插入数据库。

希望场景 #2 适用于您,因为这正是 PDF 表单的设计目的。场景 #1 实际上只是一个 hack,只有在您没有任何其他选择的情况下才会使用它。从 PDF 中提取纯文本并不像您想象的那么容易或准确。

如果您收到的是 PDF 表单,那么您需要做的就是将 PDF 表单中的正确字段与数据库中的相应字段进行匹配,然后输入数据。如果您编写自己的应用程序,此过程可以完全自动化。

这是否需要编写应用程序或 有没有一种自动化的方法 这个?

是的,这两个选项都需要编写应用程序或购买应用程序。如果您编写自己的应用程序,则需要找到支持从表单字段中检索数据或从 PDF 中提取文本的第三方 PDF 库。

【讨论】:

    【解决方案3】:

    免责声明:我隶属于ByteScout PDF Extractor SDK工具的制造商

    只是想分享一些从 PDF 中提取文本数据的其他真实场景:

    1. 没有可搜索文本的扫描图像:应由 OCR 引擎处理(如 Google 提供的免费 Tesseract
    2. XFA forms:它是 PDF 的子集,主要由 Adob​​e 工具支持。但是可以使用 iTextSharp 等低级 PDF 处理工具或类似工具将数据提取为 XML 数据。
    3. ZUGFeRD PDF 文件,只是 PDF 文档,带有作为 XML 文件附加的表单数据的副本(可以使用 this 等工具提取)
    4. 某些 PDF 生成器对文本进行了错误编码(但可以通过 OCR 引擎以可接受的错误率恢复)。

    【讨论】:

      【解决方案4】:

      使用 ItextSharp,执行以下操作

      using System;
      using System.Configuration;
      using System.Data.SqlClient;
      using System.IO;
      using System.Text;
      using iTextSharp.text.pdf;
      
         protected void BtnSubmit_Click(object sender, EventArgs e)
              {
                  String FilePath = @"GetFilePath";
                  StringBuilder sb = new StringBuilder();
      
                  PdfReader reader = new PdfReader(FilePath);           
                  PdfStamper myStamp = new PdfStamper(reader, new FileStream(FilePath + "_TMP",    FileMode.Create));
                  AcroFields form = myStamp.AcroFields;
      
                  if (form.GetField("GetFieldIdFromPDF") != null)
                     sb.Append(form.GetField("GetFieldIdFromPDF").ToString());
         }
      

      【讨论】:

        【解决方案5】:

        我认为您必须为此编写一个应用程序。这个问题谈论extracting data from PDF。在此之后您可以将数据导出为 excel 格式,以便您可以保留现有的 import 格式。

        【讨论】:

          【解决方案6】:

          查找有关从 PDF 中“抓取”数据的信息。我相信 Adob​​e 有一些工具可以让您对简单的文本执行此操作,但我没有使用它们。

          但老实说,我会尽一切努力从您的供应商处以原始格式获取这些数据。

          【讨论】:

            猜你喜欢
            • 2022-10-09
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多