用于渲染 PDF 和对生成的图像进行 OCR 处理的 C# 解决方案
本文关键字:图像 处理 解决方案 OCR PDF 用于 | 更新日期: 2023-09-27 18:36:04
我正在寻找一种C#解决方案,用于将数据从PDF文档导入我们的数据库,在商业应用程序中。我们的客户将寻求导入任何任意文档。通常我会将其视为完全不可能,但是他们导入的文档将采用自己的设置布局。
我的计划是将PDF渲染为静态图像,然后允许用户设置自己的模板,这些模板基本上是使用OCR在PDF中预定义的像素偏移处提取文本。对于表,它们定义表的位置以及列和行大小的一系列其他值。然后,我们可以将模板应用于该文档类型。
所以,我真正要找的是两个库:一个用于将PDF转换为图像,另一个用于OCR这些图像。
要求:
- 是纯 C# 或具有本机 DLL 支持的 C# 包装器。
- 不分叉进程 - 在这种情况下,不允许基本上只创建命令行参数并启动外部可执行文件的包装器。 就自由和开放源码
- 软件而言,允许我们通过支付许可费来免除正常的自由和开放源码软件许可要求(即发布我们的源代码)。
我们当然不介意为商业解决方案付费,但我们宁愿不为软件的单个分发付费。
我知道这是一个非常具体的需求集 - 也许足以让一些人认为这个问题过于本地化,但我希望有人可以提出一种方法和一些对我有帮助的库,以及将来的其他人。
我为PDF方面研究过的东西:
- iTextSharp - 文档是一本你必须购买的书,不是一个好的开始。关于将 PDF 转换为公共领域的图像似乎没有太多有用的文档。许可是不透明的,看起来我们必须为我们分发的客户端付费。
- Docotic.Pdf - 仅文本,对我们没有用。
- pdftohtml - 同样,不生成图像。移植到 C# 也会一团糟。
- PdfFileParser - 仍然不是我们需要的。
- GhostScript - 几乎正是我们想要的,但需要分叉到一个程序。
对于OCR方面,我最终可能会使用Tesseract,因为Apache许可证是宽松的,并且得到了很好的评价。如果有替代方案,我也会对此感兴趣。
推荐Amyuni PDF Creator .Net来完成这项任务。
第一种情况:
如果您的PDF文件定义良好(没有缺少字体信息等),则可以通过在方法GetObjectsInRectangle
中指定矩形区域来直接从PDF中提取文本。您还应该使用选项 acGetRectObjectsOptimize
:
在返回文本对象之前对其进行优化。也就是说,合并文本 彼此靠近的对象合并为单个文本对象。
第二种情况:
如果涉及的图像也包含文本,则将整个页面呈现为图像,然后应用 OCR 可能是更好的选择。您可以使用 ExportToTiff、ExportToJPeg 或 RasterizePageRange 方法使用 Amyuni PDF Creator .Net 执行此操作。
从文档中:
IacDocument.RasterizePageRange 方法
方法将页面内容转换为彩色或灰度图像。什么时候 存档文档或执行 OCR,有时最好是 所有页面都存储为图像,而不是复杂的文本和图形 操作。
然后,您可以使用与Tesseract OCR集成的OCR插件,最后我们再次进入第一个场景(GetObjectsInRectangle)。为了将OCR应用于您的文件,您可以使用方法OCRPageRange
。
void OCRPageRange(int startPage, int EndPage, string Language, acOCROptions Options)
关于许可,Amyuni PDF Creator .Net提供(每个应用程序)免版税许可证。
通常的免责声明适用
我想你可能想再给Docotic.Pdf一次机会。
该库可以提取文本块、单词甚至单个字符及其边界矩形。请查看从 PDF 中提取单词的示例。
此外,Docotic.Pdf可以从PDF创建图像并在System.Drawing.Graphics
上绘制页面。请查看绘制和打印 Pdf 样本组。
免责声明:我是该库的开发人员之一。