以编程方式识别PDF文件中扫描的文本

以编程方式识别PDF文件中扫描的文本,pdf,ocr,Pdf,Ocr,我有一个PDF文件,其中包含我们需要导入数据库的数据。这些文件似乎是打印的字母数字文本的pdf扫描。看起来像10磅。《新罗马时报》 是否有任何工具或组件可以让我识别和解析此文本?一个快速的谷歌搜索显示了这个有希望的结果。 您可以使用类似perl的模块来提取文本。并使用另一个工具将相关信息导入数据库 我确信有用于.NET的PDF组件,但我没有尝试过任何组件,因此我不知道什么是好的。在我曾经工作过的一家公司,我们使用ActivePDF toolkit取得了一些成功: 我想你至少需要标准版或专业版,

我有一个PDF文件,其中包含我们需要导入数据库的数据。这些文件似乎是打印的字母数字文本的pdf扫描。看起来像10磅。《新罗马时报》


是否有任何工具或组件可以让我识别和解析此文本?

一个快速的谷歌搜索显示了这个有希望的结果。

您可以使用类似perl的模块来提取文本。并使用另一个工具将相关信息导入数据库


我确信有用于.NET的PDF组件,但我没有尝试过任何组件,因此我不知道什么是好的。

在我曾经工作过的一家公司,我们使用ActivePDF toolkit取得了一些成功:


我想你至少需要标准版或专业版,但他们有试用版,你可以看看它是否能满足你的需要。

我最近发现了Python。

如果PDF是打印文本的扫描,你自己很难做到(包括图像处理、字符识别等)。PDF通常会在内部以JPEG格式存储扫描的文档。您最好使用第三方工具(OCR工具)来实现这一点。

您无法从PDF中提取扫描文本。你需要OCR软件。好消息是,您可以尝试一些开源应用程序,OCR路线很可能比使用PDF库提取文本更容易。查看Tesseract和GOCR。

我曾经成功地将表格从PDF剥离到CSV。它基于,这是一个更通用的工具,包括。我只是把它包装成一个进程。从C#开始调用

如果你想找一些更DIY的东西,有一个库——Java的一个端口——和(是的,它说的是Java——但是他们有一个.NET版本)。这里有一些关于使用和来自C#的CodeProject文章

而且,如果你真的是一个受虐狂,你可以通过COM互操作调用Adobe。这是非常简单的,但我想互操作开销将是巨大的

编辑:在重新阅读问题和随后的答案后,很明显OP正在处理PDF中的图像。在这种情况下,您将需要提取图像(上面的PDF库可以相当容易地做到这一点),并通过OCR引擎运行它

我以前用过交互方式,效果不错。它是COM,因此通过interop从C#调用它也是一种非常好的方式:


其他人喜欢,但我有直接的经验。我听说过关于它的好消息和坏消息,所以我想这在很大程度上取决于你的源代码质量。

如果我没有弄错,sheebz会问如何提取PDF字段并将数据加载到数据库中。你看了吗

我在我的一个博客上发布了关于解析pdf的帖子。点击此链接:

编辑:链接不再工作。以下引自

下面是基于网络上流行的例子。 这样做的目的是“读取”pdf文件并将其作为文本输出到 窗体中的富文本框控件。.NET库的PDFBox可以是 从sourceforge下载

您需要添加对IKVM.GNU.Classpath和PDFBox-0.7.3的引用。及 此外,还需要添加FontBox-0.1.0-dev.dll和PDFBox-0.7.3.dll 应用程序的bin文件夹。不知什么原因,我想不起来了 (可能是其中一个教程中的内容),我还将其添加到了bin中 IKVM.GNU.Classpath.dll

在旁注上,我刚从Keith那里拿到了我的“头先C#”(Head First C# (建议)来自亚马逊。这本书很酷!它真的是为你而写的 初学者。本版本涵盖VS2008和框架3.5

给你


根据马克·布兰克特的回答,我创建了一个包装

它的目标是.net标准1.6和.net框架4.5

用法:

using XpdfNet;

var pdfHelper = new XpdfHelper();

string content = pdfHelper.ToText("./pathToFile.pdf");

这是一个极好的资源列表。。谢谢如果PDF来自扫描仪,那么它实际上只是一个图像,PDFbox将无法从中获取文本:。此外,请参见@jm4的答案上面的链接不再有效-获取“无法打开与数据提供商的连接”错误消息如果PDF是扫描图像,PDFBOX将无法从PDF中获取文本:PDF可以是文本和图像的任意组合。如果已经是文本,则不需要ocr。
/* Marlon Ribunal
 * Convert PDF To Text
 * *******************/

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;
using System.Drawing.Printing;
using System.IO;
using System.Text;
using System.ComponentModel.Design;
using System.ComponentModel;
using org.pdfbox.pdmodel;
using org.pdfbox.util;

namespace MarlonRibunal.iPdfToText
{
    public partial class MainForm : Form
    {
        public MainForm()
        {
            InitializeComponent(); 
        }

        void Button1Click(object sender, EventArgs e)    
        {    
            PDDocument doc = PDDocument.load("C:\\pdftoText\\myPdfTest.pdf");
            PDFTextStripper stripper = new PDFTextStripper();
            richTextBox1.Text=(stripper.getText(doc));
        }

     }
}
using XpdfNet;

var pdfHelper = new XpdfHelper();

string content = pdfHelper.ToText("./pathToFile.pdf");