我想要一个C#程序,它搜索PDF文件中只包含扫描图像的字符串。此外,代码应显示搜索到的字符串所在的特定页面。
例如,考虑一个包含收据扫描图像(.png)的PDF文件。我想搜索receipt_number。然后,应该在PDF阅读器中打开存在该特定receipt_number的页面。
我想使用MODI。
答案 0 :(得分:2)
嗯,这实际上是一项相当复杂的任务。我以前尝试过类似的东西,结果并不总是很好;然而,我创建并且目前拥有的程序可以做我需要它做得足够好的程序。它对我有用的原因是因为我专注于页面的一个非常特定的区域,我知道我会找到特定格式的文本。请注意,只有印刷文字效果很好...加盖印花或手写文字是一件很难处理的事情。通过足够的OCR培训,我确信可以修复,但我没有足够的时间投入到该项目中。
您的结果将在很大程度上取决于您选择的OCR方法,扫描质量,手动输入或写入,扫描是完全对齐还是略微倾斜等等。
我不会给你任何代码,因为如果我这样做你就不会学到任何东西,但我会给你一些如何开始的提示。如果您遇到困难,请在此处发布特定问题,希望您能得到一些帮助。
我尝试的方法和方法有很多种,通过将扫描的PDF文件转换为图像(每页一个)。然后,我通过识别算法运行图像,试图检索所有文本(在我的例子中,它是图像上的特定矩形)。
因此,要将图像输出为PDF,您可以使用类似Magick.NET的内容。它甚至可以通过NuGet获得,所以这应该是一个简单的部分。由于它是扫描的PDF,因此您不应该在将图像输出时出现任何问题。有很多教程,如果你在本网站上发布一个特定的问题就被卡住了。
光学字符识别部分是困难部分;但是,有一些图书馆可以帮助您,或者至少可以让您入门。我使用了tessnet2库(http://www.pixel-technology.com/freeware/tessnet2/)。
有一些C#包装器,您甚至可以从NuGet中找到一些东西。这是GitHub上的一个地方(https://github.com/charlesw/tesseract)。另外,请看这里:https://code.google.com/p/tesseractdotnet/和此处:https://github.com/charlesw/tesseract-ocr-dotnet。
其中一些用于tessnet3,一些用于tessnet2。我在tessnet2 32位版本上取得了成功,但其他版本没有。所以,让他们一起去看看对你有用的东西,
提前知道你正在潜入一个非常复杂的区域,如果你遇到困难或不理解某些事情,不要感到沮丧......给它时间。