【问题标题】:Extract text from pdf and word files从 pdf 和 word 文件中提取文本
【发布时间】:2010-09-06 16:33:55
【问题描述】:

如何在 C# 中从 pdf 或 word 文件中提取文本(删除粗体、图像和其他富文本格式媒体)?

【问题讨论】:

    标签: c# pdf ms-word


    【解决方案1】:

    您可以使用为索引服务设计/使用的过滤器。它们旨在从各种文档中提取纯文本,这对于在文档内部进行搜索很有用。您可以将它用于 Office 文件、PDF、HTML 等,基本上是任何具有过滤器的文件类型。唯一的缺点是您必须在服务器上安装这些过滤器,因此如果您无法直接访问服务器,这可能是不可能的。有些过滤器预装在 Windows 中,但有些过滤器,如 PDF,您必须自己安装。有关 C# 实现,请查看这篇文章:Using IFilter in C#

    【讨论】:

    • 这正是我所需要的。谢谢!
    【解决方案2】:

    PDF:

    您有多种选择。

    pdf转文本:
    下载XPDF utilities。在 .zip 文件中有各种命令行实用程序。一个是pdftotext(.exe)。它可以从表现良好的 PDF 文件中提取所有文本内容。键入pdftotext -help 以了解其命令行参数。

    Ghostscript:
    安装latest version of Ghostscript (v.8.71)。 Ghostscript 是 PostScript 和 PDF 解释器。您也可以使用它从 PDF 中提取文本:

    gswin32c.exe ^
     -q ^
     -sFONTPATH=c:/windows/fonts ^
     -dNODISPLAY ^
     -dSAFER ^
     -dDELAYBIND ^
     -dWRITESYSTEMDICT ^
     -dSIMPLE ^
     -f ps2ascii.ps ^
     -dFirstPage=3 ^
     -dLastPage=7 ^
     input.pdf ^
     -dQUIET 
    

    这会将input.pdf 第 3-7 页中包含的文本输出到标准输出。您可以通过将> /path/to/output.txt 附加到命令来将其重定向到文件。 (检查以确保 PostScript 实用程序 ps2ascii.ps 存在于 Ghostscript 的 lib 子目录中。)

    如果省略-dSIMPLE 参数,文本输出将猜测换行符和字间距。有关详细信息,请查看 ps2ascii.ps 文件本身中的 cmets。您甚至可以将该参数替换为 -dCOMPLEX 以获得额外的文本格式信息。

    【讨论】:

      【解决方案3】:

      对于PDF,你有没有看过TallPDF

      也检查一下这个:http://www.codeproject.com/KB/files/PDF_to_TEXT.aspx

      【讨论】:

        【解决方案4】:

        使用 Word 对象模型,这是唯一可靠的方法,因为 Word 格式不开放,并且因版本而异。

        【讨论】:

        • 但是怎么样?这是没有代码示例的无用响应。
        【解决方案5】:

        您可能想查看 PDFBox。这是代码项目页面的链接,向您展示如何在 C# 以及其他有用的 cmets 中使用它。

        http://www.codeproject.com/KB/string/pdf2text.aspx

        对于 Word,使用 Word Object 模型的建议可能是最准确的。

        【讨论】:

          【解决方案6】:

          Docotic.Pdf library 可用于从 PDF 文件中提取文本。

          图书馆可以extract plain text and text with formatting。此外,可以使用库的 API 检索 collection of words 或带有边界矩形的字符。

          免责声明:我为图书馆的供应商工作。

          【讨论】: