编程识别PDF文件从扫描文本[关闭](Programmatically recognize text

2019-08-20 00:29发布

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

有没有可以让我认识到和解析这个文本工具或零件?

Answer 1:

我用pdftohtml成功剥离出表的PDF为CSV。 它是基于xpdf的 ,这是一个比较通用的工具,包括pdftotext 。 我只是把它包装成从C#中的Process.Start呼叫。

如果你正在寻找的东西多一点DIY,还有的iTextSharp的图书馆- Java的的端口iText的 -和PDFBox的 (是的,它说爪哇-但他们有通过的方式.NET版本IKVM.NET )。 下面是关于使用一些CodeProject上的文章iTextSharp的和PDFBox的从C#。

而且,如果你真的受虐狂,你可以打电话到Adobe的PDF IFilter的与COM互操作。 该IFilter的规格非常简单,但我猜互操作的开销将是显著。

编辑:在重新阅读的问题,并随后回答后,它很清楚,OP正在处理他的PDF格式的图像 。 在这种情况下,你需要提取的图像(上面的PDF库能够做到这一点很容易),并通过OCR引擎运行。

我用MODI交互之前,体面的结果。 它的COM,所以从C#调用它通过互操作也是可行的 ,漂亮简单 :

' 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 ,但我与它的直接经验。 我听说过它好的和坏的东西,所以我想这在很大程度上取决于你的源质量。



Answer 2:

你不能提取从PDF扫描文本。 你需要OCR软件。 好消息是,有一些开源的应用程序,你可以尝试和OCR路线很可能是比使用PDF库中提取文本更容易。 退房正方体和GOCR。



Answer 3:

我已经发布有关分析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-另一个样本换级-1- pupils.aspx

好了,下面是根据网络上提供的最典型的例子。 这样做是“读”的PDF文件,并将其输出作为在形式丰富的文本框控件文本。 对于.NET库PDFBox的可以从SourceForge下载。

您需要添加参考IKVM.GNU.Classpath&PDFBox的-0.7.3。 而且,FontBox-0.1.0-dev.dll和PDFBox的-0.7.3.dll需要对您的应用程序的bin文件夹中。 出于某种原因,我不记得(也许是从教程之一),我也加入到仓IKVM.GNU.Classpath.dll。

在侧面说明,刚刚从亚马逊得到了我的“深入浅出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));
        }

     }
}


Answer 4:

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

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

我认为你至少需要标准版或专业版,但他们的审判,所以你可以看到,如果它会做你想要什么。



Answer 5:

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



Answer 6:

您可以使用一个模块像Perl的PDF中提取文本。 而使用其他工具导入相关信息到数据库中。

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



Answer 7:

如果PDF是印刷文本的扫描,这将是很难(涉及到图像处理,文字识别等)来自己做。 PDF通常将存储扫描文件的JPEG文件作为内部。 您是使用第三方工具(OCR工具),这是否更好。



Answer 8:

我最近发现的ReportLab的 Python的。



Answer 9:

如果我得到它的权利,sheebz是问如何提取PDF字段和数据加载到数据库中。 你看iTextSharp的? - http://sourceforge.net/projects/itextsharp/



Answer 10:

根据马克·布拉克特的回答,我创建了一个NuGet包包裹pdftotext 。

它是开源的 ,针对.NET标准1.6.NET Framework 4.5。

用法:

using XpdfNet;

var pdfHelper = new XpdfHelper();

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


文章来源: Programmatically recognize text from scans in a PDF File [closed]
标签: pdf ocr