我正在寻找一个 C# 解决方案,用于在商业应用程序中将 PDF 文档中的数据导入到我们的数据库中。我们的客户将寻求导入任何任意文档。通常我会认为这是完全不可能的,但他们导入的文档将采用自己设定的布局。
我的计划是将 PDF 渲染为静态图像,然后允许用户设置自己的模板,这实际上是使用 OCR 在 PDF 中预定义的像素偏移处提取文本。对于表,它们定义表的位置以及一系列列和行大小的进一步值。然后我们可以将模板应用到该文档类型上。
所以,我真正想要的是两个库:一个用于将 PDF 转换为图像,另一个用于 OCR 这些图像。
要求:
我们当然不介意为商业解决方案付费,但我们不想为每个软件的单独分发付费。
我知道这是一个非常具体的要求集 - 也许足以让某些人认为这个问题过于本地化,但我希望有人可以建议一种方法和一些对我以及其他人有帮助的库未来。
我研究过 PDF 方面的内容:
对于 OCR 方面,我可能最终会使用 Tesseract,因为 Apache 许可证是宽松的并且它得到了很好的评价。如果有替代方案,我也会对此感兴趣。
我想推荐 Amyuni PDF Creator .Net 来完成此任务。
第一个场景:
如果您的 PDF 文件定义良好(没有丢失字体信息等),您可以通过在方法
GetObjectsInRectangle
中指定矩形区域来直接从 PDF 中提取文本。您还应该使用选项 acGetRectObjectsOptimize
:
在返回文本对象之前对其进行优化。也就是合并文本 彼此靠近的对象合并为单个文本对象。
场景二:
如果涉及的图像也包含文本,则将整个页面渲染为图像,然后应用 OCR 可能是更好的选择。您可以通过 Amyuni PDF Creator .Net 使用方法 ExportToTiff、ExportToJPeg 或 RasterizePageRange 来完成此操作。
来自文档:
IacDocument.RasterizePageRange 方法
RasterizePageRange 方法将页面内容转换为彩色或灰度图像。什么时候 归档文档或执行 OCR,有时更适合 所有页面都存储为图像而不是复杂的文本和图形 操作。
然后您可以使用我们与 Tesseract OCR 集成的 OCR 插件,最后我们再次陷入第一个场景(GetObjectsInRectangle)。为了将 OCR 应用于您的文件,您可以使用方法
OCRPageRange
。
void OCRPageRange(int startPage, int EndPage, string Language, acOCROptions 选项)
关于许可,Amyuni PDF Creator .Net 提供(每个应用程序)免版税许可。
适用通常的免责声明
我想你可能想再给Docotic.Pdf一次机会。
该库可以提取文本块、单词甚至单个字符及其边界矩形。请查看示例从 PDF 中提取单词。
此外,Docotic.Pdf 可以从 PDF 创建图像并在
System.Drawing.Graphics
上绘制页面。请查看在 C# 和 VB.NET 中渲染和打印 PDF 文档文章。
免责声明:我是该库的开发人员之一。