【问题标题】:C# solution for rendering PDFs and OCRing the resulting images? [closed]用于渲染 PDF 和 OCR 生成图像的 C# 解决方案? [关闭]
【发布时间】:2012-05-31 10:38:50
【问题描述】:

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

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

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

要求:

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

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

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

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

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

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

【问题讨论】:

  • 使用 PDF IFilter,您可以读取 PDF 数据并将其放入数据库。示例 Foxit 提供了一个 IFilter 组件来读取 PDF 文档。
  • iTextSharp 许可证是 Affero GNU 公共许可证。
  • @Robert-PaulHoving 不过,这难道不是针对实际包含文本的 PDF 的解决方案吗?这些 PDF 可能只是一个巨大的扫描图像的包装。我还需要能够在特定位置(像素偏移)抓取东西 - IFilter 支持吗?
  • @Oded 如果我没看错的话,许可证要求我们在使用 AGPL 时分发应用程序的源代码。他们有一个发布许可证,但它并不能真正满足我们的需要。
  • @多项式。 IFilter 仅搜索文本。因此,带有文本的扫描图像将不会被索引。像素偏移,我不知道。也许它可以依赖于 IFilter 类型。

标签: c# pdf ocr pdf-rendering


【解决方案1】:

我想为这项任务推荐Amyuni PDF Creator .Net

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

在返回之前优化文本对象。也就是结合文字 将彼此靠近的对象合并为一个文本对象。

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

来自文档:

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

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

void OCRPageRange(int startPage, int EndPage, string Language, acOCROptions 选项)

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

通常的免责声明适用

【讨论】:

    【解决方案2】:

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

    该库可以提取文本块、单词甚至单个字符及其边界矩形。请查看extraction of words from PDFs 的示例。

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

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

    【讨论】:

    • 我没有意识到 Docotic.Pdf 有这个功能。现在调查。如果它运作良好,您很可能已经完成了销售! :)
    • 我玩过它,结果看起来很有希望。但是,在绘制页面时创建的输出图像分辨率很差,几乎无法辨认。这是一个已知问题,还是我做错了什么?
    • 忽略前面,我只需要放大!
    猜你喜欢
    • 1970-01-01
    • 2010-12-23
    • 1970-01-01
    • 2012-10-04
    • 1970-01-01
    • 1970-01-01
    • 2017-11-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多