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

时间:2008-10-01 16:23:48

标签: pdf ocr

我有一个PDF文件,其中包含我们需要导入数据库的数据。这些文件似乎是打印的字母数字文本的pdf扫描。看起来像10点。英语字体格式一种。

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

10 个答案:

答案 0 :(得分:22)

我使用pdftohtml成功地将PDF格式的表格删除为CSV格式。它基于Xpdf,这是一个更通用的工具,包括pdftotext。我只是把它作为来自C#的Process.Start调用。

如果您正在寻找更多DIY的东西,那就是iTextSharp库 - Java的iText - 和PDFBox的端口(是的,它说的是Java - 但它们有通过IKVM.NET的.NET版本。以下是有关使用C#中的iTextSharpPDFBox的一些CodeProject文章。

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

编辑:在重新阅读问题和后续答案之后,很明显OP正在处理他的PDF中的图像。在这种情况下,您需要提取图像(上面的PDF库能够相当容易地完成)并通过OCR引擎运行它。

之前我曾以交互方式使用MODI,效果不错。它是COM,所以通过interop从C#调用它也是doable和漂亮simple

' lifted from http://en.wikipedia.org/wiki/Microsoft_Office_Document_Imaging
Dim inputFile As String = "C:\test\multipage.tif"
Dim strRecText As String = ""
Dim Doc1 As MODI.Document

Doc1 = New MODI.Document
Doc1.Create(inputFile)
Doc1.OCR()  ' this will ocr all pages of a multi-page tiff file
Doc1.Save() ' this will save the deskewed reoriented images, and the OCR text, back to the inputFile

For imageCounter As Integer = 0 To (Doc1.Images.Count - 1) ' work your way through each page of results
   strRecText &= Doc1.Images(imageCounter).Layout.Text    ' this puts the ocr results into a string
Next

File.AppendAllText("C:\test\testmodi.txt", strRecText)     ' write the OCR file out to disk

Doc1.Close() ' clean up
Doc1 = Nothing

其他像Tesseract,但我有直接的经验。我听说过它的优点和缺点,所以我想这很大程度上取决于你的源质量。

答案 1 :(得分:6)

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

答案 2 :(得分:5)

我发布了一篇关于在我的博客中解析pdf的文章。点击此链接:

http://devpinoy.org/blogs/marl/archive/2008/03/04/pdf-to-text-using-open-source-library-pdfbox-another-sample-for-grade-1-pupils.aspx

编辑:链接不长。以下引自http://web.archive.org/web/20130507084207/http://devpinoy.org/blogs/marl/archive/2008/03/04/pdf-to-text-using-open-source-library-pdfbox-another-sample-for-grade-1-pupils.aspx

  

嗯,以下内容基于网上流行的例子。   这样做是“读取”pdf文件并将其作为文本输出   表单中的富文本框控件。 PDFBox for .NET库可以   从sourceforge下载。

     

您需要添加对IKVM.GNU.Classpath&的引用。 PDFBox的-0.7.3。和   另外,需要添加FontBox-0.1.0-dev.dll和PDFBox-0.7.3.dll   您的应用程序的bin文件夹。出于某种原因,我不记得了   (也许是来自其中一个教程),我也加入了垃圾箱   IKVM.GNU.Classpath.dll。

     

另一方面,我得到了“Head First C#”的副本(在Keith的   建议)来自亚马逊。这本书很酷!这是真的写的   初学者。此版本涵盖VS2008和框架3.5。

     

你去......

/* 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));
        }

     }
}

答案 3 :(得分:2)

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

http://www.activepdf.com/products/serverproducts/toolkit/index.cfm

我认为你至少需要标准版或专业版,但他们有试用版,所以你可以看看它是否符合你的要求。

答案 4 :(得分:1)

快速谷歌搜索显示了这一有希望的结果。 http://www.pdftron.com/net/index.html

答案 5 :(得分:1)

您可以使用像perl PDF这样的模块来提取文本。并使用其他工具将相关信息导入数据库。

我确信.NET有PDF组件,但我没有尝试过,所以我不知道什么是好的。

答案 6 :(得分:1)

如果PDF是对打印文本的扫描,那么自己完成它将很难(涉及图像处理,字符识别等)。 PDF通常会在内部将扫描的文档存储为JPEG。您最好使用执行此操作的第三方工具(OCR工具)。

答案 7 :(得分:0)

我最近发现了ReportLab用于Python。

答案 8 :(得分:0)

如果我做对了,sheebz就会问如何提取PDF字段并将数据加载到数据库中。你看过iTextSharp了吗? - http://sourceforge.net/projects/itextsharp/

答案 9 :(得分:0)

根据Mark Brackett的回答,我创建了一个Nuget package来包裹pdftotext

open source,定位 .net标准1.6 .net framework 4.5

用法:

int test[3];
auto n = _countof(test);