【问题标题】:PDF to Text conversion when uploading to IIS Web App?上传到 IIS Web App 时 PDF 到文本的转换?
【发布时间】:2009-04-30 15:34:25
【问题描述】:

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

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

将使用文本的下游进程设置为使用PDFBox,这似乎运行良好。但是:

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

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

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

提前致谢。

【问题讨论】:

    标签: .net asp.net pdf text


    【解决方案1】:

    我最初询问如何将二进制数据写入 Process.StandardInput (StreamWriter),因为它只处理字符数据:答案是使用 Process. StandardInput.BaseStream)。

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

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

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

    【讨论】:

      【解决方案2】:

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

      在过去,我听说过一些例子,Adobe 搜索和 MS 索引服务结合起来也可以提取 PDF 文件的文本。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-12-03
        相关资源
        最近更新 更多