当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《以编程方式识别PDF文件中扫描的文本》经验,为你挑选了3个好方法。

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

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



1> Mark Bracket..:

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

如果你正在寻找更多DIY的东西,那就是iTextSharp库 - 一个Java的iText端口- 和PDFBox(是的,它说的是Java - 但它们通过IKVM.NET有一个.NET版本).这里有一些关于使用来自C#的iTextSharp和PDFBox的 CodeProject文章.

而且,如果你真的是一个受虐狂,你可以通过COM互操作调用Adobe的PDF IFilter.该IFilter的规格非常简单,但我猜互操作的开销将是显著.

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

我之前以交互方式使用过MODI,效果不错.它是COM,所以通过interop从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,但我有直接经验.我听说过它的优点和缺点,所以我想这很大程度上取决于你的音质.



2> 小智..:

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



3> MarlonRibuna..:

我发布了一篇关于在我的博客中解析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文件并将其作为文本输出到表单中的富文本框控件中.PDFBox for .NET库可以从sourceforge下载.

您需要添加对IKVM.GNU.Classpath和PDFBox-0.7.3的引用.此外,需要在应用程序的bin文件夹中添加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));
        }

     }
}


上面的链接不再有效 - 获取"无法打开与数据提供者的连接"错误消息
推荐阅读
雯颜哥_135
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有