我研究了几个 C# DLL,但没有发现任何工作得特别好的。我的要求是:

  • PDF 文档通过 ASPX 页面上传。
  • 需要提取文本并将其与 PDF 一起存储在数据库中。
  • 解决方案不能有复制 Web 应用程序的额外成本(所以如果我 知道 它会起作用,将考虑固定费用的解决方案,但不按安装付费)。
  • 虽然良好的转化是最重要的,但用户可能希望上传 许多 一次生成 PDF 文件,因此速度也很重要。

将使用文本的下游进程设置为使用 PDF盒, ,这似乎运作良好。但:

  • PDF盒 是用Java编写的,所以我需要将它作为一个单独的进程启动并检索结果(我拒绝通过以下方式使用它) IKVM).
  • 默认情况下,它从磁盘文件读取,但为了简单性和速度,我更喜欢 标准输入->标准输出 筛选。修复 PDFBox 很简单,但从 C# 获取子进程的 I/O 却很乏味。
  • 我知道我可以将新磁盘写入硬盘驱动器,启动 PDFBox,等待它退出,然后从硬盘驱动器(或其 标准输出),但这看起来很黑客并且可能会更慢。

我很惊讶我找不到 PDF 转换器配方,这似乎是一个常见的要求。那么,任何人都可以帮助我:

  • 您使用的有效的固定转换解决方案 至少PDF盒.
  • 如果在 IIS 后面使用 stdio 过滤器确实是一个坏主意,请解释一下 为什么.

提前致谢。

有帮助吗?

解决方案

我最初问如何将二进制数据写入 流程.标准输入 (流写入器)因为它只处理字符数据:答案是使用 流程.StandardInput.BaseStream (溪流).

此外,由于两个管道都可能填满(64KB 缓冲区 IIUC),因此我使用了以下模式:

  • 生成一个线程来写入数据,然后设置一个标志,
  • 生成一个线程来读取所有返回数据,然后设置一个标志,
  • 循环调用 Thread.Sleep(100),直到两个标志都被设置。
  • 返回从进程读取的数据。

因此,除了将可执行文件放入 WebApp 中(或需要单独安装)这一黑客行为之外,这似乎工作正常 - 但我仍然需要进行一些滥用测试。

其他提示

如果您可以在服务器上运行 Process(),则可以使用 XPDF http://www.foolabs.com/xpdf/ 其中一个实用程序是 PDFtoText,它能够提取 PDF 文件中的文本,甚至维护某种类型的布局。

以前,我听说过 Adob​​e 搜索和 MS Index 服务相结合也可以提取 PDF 文件文本的例子。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top