4

我正在寻找一种 C# 解决方案,用于在商业应用程序中将 PDF 文档中的数据导入我们的数据库。我们的客户将希望导入任意文件。通常我会把它写成完全不可能的,但是他们正在导入的文档将在他们自己的设置布局中。

我的计划是将 PDF 呈现为静态图像,然后允许用户设置自己的模板,这些模板基本上使用 OCR 在 PDF 中以预定义的像素偏移量提取文本。对于表,它们定义了表的位置以及列和行大小的一系列进一步值。然后,我们可以将模板应用于该文档类型。

所以,我真正在寻找的是两个库:一个用于将 PDF 转换为图像,另一个用于对这些图像进行 OCR。

要求:

  • 是纯 C# 或在本机 DLL 上具有受支持的 C# 包装器。
  • 不派生进程 - 在这种情况下,不允许使用本质上只是创建命令行参数并启动外部可执行文件的包装器。
  • 在 FOSS 的情况下,允许我们通过支付许可费来免除正常的 FOSS 许可要求(即发布我们的源代码)。

我们当然不介意为商业解决方案付费,但我们宁愿不拘泥于为软件的每个单独分发付费。

我知道这是一个非常具体的要求集 - 可能足以让某些人认为这个问题过于本地化,但我希望有人可以提出一种方法和一些对我以及未来其他人有帮助的库.

我在 PDF 方面研究过的东西:

  • iTextSharp - 文档是你必须买的书,不是一个好的开始。关于将 PDF 转换为公共领域的图像似乎没有太多有用的文档。许可是不透明的,看起来我们必须为我们分发给的每个客户付费。
  • Docotic.Pdf - 纯文本,对我们没用。
  • pdftohtml - 同样,不产生图像。移植到 C# 也会很麻烦。
  • PdfFileParser - 仍然不是我们需要的。
  • GhostScript - 几乎正是我们想要的,但需要分叉到一个程序。

对于 OCR 方面,我可能最终会使用 Tesseract,因为 Apache 许可证是宽松的,并且得到了很好的评价。如果有替代方案,我也会对此感兴趣。

4

2 回答 2

2

我想推荐Amyuni PDF Creator .Net来完成这项任务。

第一种情况:
如果您的 PDF 文件定义明确(没有丢失字体信息等),您可以通过在方法中指定一个矩形区域直接从 PDF 中提取文本GetObjectsInRectangle。您还应该使用以下选项acGetRectObjectsOptimize

在返回之前优化文本对象。即,将彼此靠近的文本对象组合成一个文本对象。

第二种情况:
如果涉及的图像还包含文本,则将整个页面渲染为图像然后应用 OCR 可能是更好的选择。您可以通过使用方法ExportToTiffExportToJPegRasterizePageRange使用 Amyuni PDF Creator .Net 执行此操作。

从文档中:

IacDocument.RasterizePageRange 方法
RasterizePageRange 方法将页面内容转换为彩色或灰度图像。在归档文档或执行 OCR 时,有时最好将所有页面存储为图像,而不是复杂的文本和图形操作。

然后您可以使用我们与 Tesseract OCR 集成的OCR 插件,最后我们再次进入第一个场景 (GetObjectsInRectangle)。为了将 OCR 应用于您的文件,您可以使用该方法OCRPageRange

void OCRPageRange(int startPage,int EndPage,字符串语言,acOCROptions 选项)

关于许可,Amyuni PDF Creator .Net 提供(按应用程序)免版税许可。

通常的免责声明适用

于 2012-05-31T13:30:51.563 回答
0

我想你可能想再给 Docotic.Pdf 一次机会。

该库可以提取文本块、单词甚至单个字符及其边界矩形。请查看从 PDF 中提取单词的示例。

此外,Docotic.Pdf 可以从 PDF 创建图像并在System.Drawing.Graphics. 请查看Draw and print Pdf样本组。

免责声明:我是该库的开发人员之一。

于 2012-05-31T17:58:06.017 回答