如何从Pdf,Word和Excel文档中提取文本?

时间:2012-06-11 14:33:02

标签: c# .net html pdf extract

我需要一个.NET库,以便使用它从PDF,Excel和Word文件中提取文本数据。

理想情况下,免费工具!

你会推荐吗?

非常感谢,

6 个答案:

答案 0 :(得分:29)

作为花了很多天寻找(几乎)这个确切问题的免费解决方案的人,我可以相当诚实地告诉你,你找不到一个能够从所有中提取文本的免费库

有哪些选择?

  • iTextSharp - 这个从PDF中提取文本非常棒。虽然此库的后续版本是商业友好型(LGPL),但作者已经决定他们想要为该软件收费,所以他们反而在AGPL下发布它,所以除非您想要发布所有来源代码,您可能不想使用其中一个版本。但是,LGPL许可的最新版本(4.1.6)可以在互联网上找到。 This SO question有一个指向LGPL下的版本的链接。

  • PdfBox - 另一个PDF库。这个,IMO,更好,因为它是在Apache 2.0许可下。它有一些问题,因为有时(可能很少)不会像iTextSharp那样做得好。我更多地将其归因于它是一个比其他任何东西更新的库。 但是,我使用此库的经验来自 months 之前。该项目积极开发,就在上个月,已经解决了52个问题。我会留意这个。请注意这是一个java库。 (请继续阅读以下内容,了解有关我为何包含此内容的详细信息。)

  • POINPOI - 这些是专门为Microsoft Office文档编写的库,特别是2007年之前的格式,OLE二进制文件格式。它确实支持较新的OpenXML格式,但我不确定该部分库的成熟程度。 POI是java版本(请继续阅读下面的内容,了解我为何包含此内容的更多信息。),其中NPOI是本机.NET版本。但是,NPOI仅支持Excel文档,其中POI可以在many more types上进行文本提取。

  • Open XML SDK 2.0 - 用于阅读/修改office 2007+(未加密的OpenXML)文档的库自己创建了我的Microsoft!这是一个用于处理这些文档的惊人库。但是,它是一个较低级别的库,因此实际上并没有(据我所知),有一个它可以完成所有文本提取类。这是一个相当不错的例子,(我不确定它涵盖某些案例,如表格中的文字等),从单词文档中提取文本at this SO answer

  • Tika - 再次,另一个Java库(我没有理由告诉你有关java库的信息。继续阅读!:)),这将是接近"一个图书馆"你可以获得文本提取。 Tika可以使用现有的解析库从许多不同类型的文件中提取元数据和结构化文本内容。它实际上使用POI和PdfBox作为办公室和PDF文档。

非商业

  • dtSearch - 这是一个我非常熟悉的图书馆。它做得很棒,可以解析大量的文件格式。但是,它需要花钱,而且可能对你所需要的东西有些过分。它实际上完全我们需要什么,但我们自己试图摆脱它,因为我们只使用它来解析(它实际上是一个全文搜索引擎),那里有大量的解析库,我们可以使用或修改以满足我们的需求,但它真实地将所有这些其他库从水中吹走。正如我之前提到的,它也不是本机.NET代码。 C ++ / CLI包装器用于在DLL和.NET运行时之间进行交互。

可以使用iFilters,并在不同问题的其他几个SO答案中提及,但您将获得的文本是非结构化的。有时它只是坏...至少对人类来说是不可读的。我相信iFilters也已被弃用,并且根据许可证问题,您可能无法重新分发它们。


为什么我提到所有这些Java库?好吧,有两个原因。首先,没有 free .NET等价物接近这些Java库的质量。其次,您可以在.NET中使用这些库(我亲自使用这些库完成了这些库,因此我至少可以保证这一点)使用IKVM。它是.NET内部的Java实现。 Here is a good example使用IKVM将Tika转换为可在项目中使用的.NET程序集。也许关于IKVM最可怕的事情就是它才有效!

编辑:我忘记了该博客的作者实际上已在a github project上发布了代码并转换了库。所以,如果你想快速查看它,你可以在那里。然而,它是一个更老的Tika版本,已有一年多了。如果结果不符合您的预期,我建议您自己尝试使用最新版本。

答案 1 :(得分:7)

您可以查看toxy.codeplex.com。 Toxy是一个纯.NET文本提取框架。

使用Toxy非常简单。例如,要提取名为test.xlsx的Excel电子表格文件。

ParserContext context = new ParserContext("test.xlsx");
ISpreadsheetParser parser = ParserFactory.CreateSpreadsheet(context);
ToxySpreadsheet ss = parser.Parse();
//then you can start handle the result - a ToxySpreadsheet object

答案 2 :(得分:2)

以下是从word文档中提取的链接:

How to extract text from MS office documents in C#

对于pdf,我会使用PDFsharp,它是开源的,并且在他们的网站上有一些很好的例子等:

http://pdfsharp.com/PDFsharp/

答案 3 :(得分:1)

从pdf itextsharp中提取文本非常棒。它是免费和开源的。

从pdf读取文本使用此库非常容易。

答案 4 :(得分:1)

我会推荐Aspose Total。几年前,我做了一个项目,几乎完全按照你的要求进行操作,并与在不同版本的Office之间使用Office Interop的东西进行比较(在更改为XML之前)Aspose是最强大的库。您可能不得不根据您所说的内容进行一些OCR。 它并不便宜但我发现它们的API非常可靠,适用于您要询问的大多数文件类型。您应该可以使用免费试用版来查看它是否适合您的项目。我与Aspose没有任何关系,除了我在生产环境中使用他们的工具。

Aspose Total

答案 5 :(得分:0)

如果您只需要文字,那么您可以使用iFilter。它不是单一产品,而是免费的。 iFilter用于提取文本以支持Microsoft Index Service。有关如何使用它的示例,请在iFilter .NET C#上搜索。如果您需要格式化文本,那么不是正确的工具。它只提取大量换行符的原始文本。