【发布时间】: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