【发布时间】:2010-09-06 16:33:55
【问题描述】:
如何在 C# 中从 pdf 或 word 文件中提取文本(删除粗体、图像和其他富文本格式媒体)?
【问题讨论】:
如何在 C# 中从 pdf 或 word 文件中提取文本(删除粗体、图像和其他富文本格式媒体)?
【问题讨论】:
您可以使用为索引服务设计/使用的过滤器。它们旨在从各种文档中提取纯文本,这对于在文档内部进行搜索很有用。您可以将它用于 Office 文件、PDF、HTML 等,基本上是任何具有过滤器的文件类型。唯一的缺点是您必须在服务器上安装这些过滤器,因此如果您无法直接访问服务器,这可能是不可能的。有些过滤器预装在 Windows 中,但有些过滤器,如 PDF,您必须自己安装。有关 C# 实现,请查看这篇文章:Using IFilter in C#
【讨论】:
您有多种选择。
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 以获得额外的文本格式信息。
【讨论】:
对于PDF,你有没有看过TallPDF
也检查一下这个:http://www.codeproject.com/KB/files/PDF_to_TEXT.aspx
【讨论】:
使用 Word 对象模型,这是唯一可靠的方法,因为 Word 格式不开放,并且因版本而异。
【讨论】:
您可能想查看 PDFBox。这是代码项目页面的链接,向您展示如何在 C# 以及其他有用的 cmets 中使用它。
http://www.codeproject.com/KB/string/pdf2text.aspx
对于 Word,使用 Word Object 模型的建议可能是最准确的。
【讨论】:
Docotic.Pdf library 可用于从 PDF 文件中提取文本。
图书馆可以extract plain text and text with formatting。此外,可以使用库的 API 检索 collection of words 或带有边界矩形的字符。
免责声明:我为图书馆的供应商工作。
【讨论】: