如何从 Pdf、Word 和 Excel 文档中提取文本? [关闭]

2023-11-25

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

最好是免费工具!

你会推荐一些吗?

非常感谢,


作为花了很多天寻找(几乎)这个确切问题的免费解决方案的人,我可以相当诚实地告诉你,你不会找到一个能够从其中提取文本的免费库all这些格式很好。据我所知,唯一能很好地处理所有这些格式(以及更多格式)的库是一个商业库,它实际上并不是 .NET 原生的,它是一个带有 C++/CLI 的 C++/COM 库。 NET 包装器。

有哪些选择?

  • iTextSharp-- 这个工具在从 PDF 中提取文本方面绝对是非常棒的。虽然该库的后续版本是商业友好型 (LGPL),但作者决定对软件收费,因此他们改为在 AGPL 下发布它,因此除非您想发布所有源代码,您可能不想使用这些版本之一。然而,在 LGPL 下许可的最新版本 (4.1.6) 可以在互联网上找到。这个问题具有 LGPL 下版本的链接。

  • PdfBox-- 另一个 PDF 库。在我看来,这个更好,因为它采用 Apache 2.0 许可证。它有一些问题,因为它有时(也许很少)不会像 iTextSharp 那样出色。我将其更多地归因于它是一个较新的库这一事实。However,我对这个图书馆的体验来自months前。该项目正在积极开发中,仅在上个月就已解决了52个问题。我会密切关注这一点。请注意这是一个 java 库。 (请继续阅读下面的内容,了解有关我为何添加此内容的更多信息。)

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

  • 开放 XML SDK 2.0-- 用于读取/修改 Office 2007+(未加密的 OpenXML)文档的库是我的 Microsoft 自己创建的!这是一个处理此类文档的令人惊叹的库。然而,它是一个较低级别的库,因此实际上(据我所知)没有它做了一切文本提取类。有一个相当好的例子(我不确定它是否涵盖某些情况,例如表格中的文本等),从Word文档中提取文本在这个如此答案

  • Tika-- 再一次,另一个 Java 库(我不会无缘无故地告诉你 Java 库。继续阅读!:)),这将尽可能接近用于文本提取的“一个库”。 Tika 可以提取元数据并结构化文本内容使用现有的解析库从许多不同类型的文件中提取数据。它实际上使用 POI 和 PdfBox 来处理 Office 和 PDF 文档。

非商业用途

  • dtSearch-- 这是一个我非常熟悉的图书馆。它的工作非常出色,可以解析大量的文件格式。然而,它需要花钱,而且对于你的需要来说可能有点过分了。其实是exactly我们需要什么,但我们试图自己摆脱它,因为我们只使用它进行解析(它实际上是一个全文搜索引擎),并且有很多解析库可供我们使用或修改以适应我们的需求,但老实说,它让所有其他图书馆都大吃一惊。正如我之前提到的,它也不是本机 .NET 代码。 C++/CLI 包装器用于在 DLL 和 .NET 运行时之间进行交互。

iFilters can be used, and are mentioned in several other SO answers on different questions, but the text you will get back is unstructured. Sometimes it's just bad...unreadable for humans, at least. I believe that iFilters are also deprecated, and depending on license issues, you might not be able to redistribute them.


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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从 Pdf、Word 和 Excel 文档中提取文本? [关闭] 的相关文章

  • 如何在我的应用程序中使用 Windows Key

    Like Windows Key E Opens a new Explorer Window And Windows Key R Displays the Run command 如何在应用程序的 KeyDown 事件中使用 Windows
  • 将字符串从非托管代码传递到托管

    我在将字符串从非托管代码传递到托管代码时遇到问题 在我的非托管类中 非托管类 cpp 我有一个来自托管代码的函数指针 TESTCALLBACK FUNCTION testCbFunc TESTCALLBACK FUNCTION 接受一个字符
  • Skrollr 添加空白

    我已经尝试了一切 我在谷歌上阅读了 4 5 页试图找到适合我的修复程序 已经筋疲力尽了 即使我使用 skrollr 示例 我的问题仍然存在 不是说他们做错了什么 我知道我只是没有正确理解它 因此 我上传了一个演示 仅在移动设备上展示这个尴尬
  • c# Asp.NET MVC 使用FileStreamResult下载excel文件

    我需要构建一个方法 它将接收模型 从中构建excel 构建和接收部分完成没有问题 然后使用内存流导出 让用户下载它 不将其保存在服务器上 我是 ASP NET 和 MVC 的新手 所以我找到了指南并将其构建为教程项目 public File
  • A* 之间的差异 pA = 新 A;和 A* pA = 新 A();

    在 C 中 以下两个动态对象创建之间的确切区别是什么 A pA new A A pA new A 我做了一些测试 但似乎在这两种情况下 都调用了默认构造函数 并且仅调用了它 我正在寻找性能方面的任何差异 Thanks If A是 POD 类
  • 在 Selenium WebDriver 上如何从 Span 标签获取文本

    在 Selenium Webdriver 上 如何从 span 标记检索文本并打印 我需要提取文本UPS Overnight Free HTML代码如下 div id customSelect 3 class select wrapper
  • Windows 窗体不会在调试模式下显示

    我最近升级到 VS 2012 我有一组在 VS 2010 中编码的 UI 测试 我试图在 VS 2012 中启动它们 我有一个 Windows 窗体 在开始时显示使用 AssemblyInitialize 属性运行测试 我使用此表单允许用户
  • 我的 strlcpy 版本

    海湾合作委员会 4 4 4 c89 我的程序做了很多字符串处理 我不想使用 strncpy 因为它不会终止 我不能使用 strlcpy 因为它不可移植 只是几个问题 我怎样才能让我的函数正常运行 以确保它完全安全稳定 单元测试 这对于生产来
  • 更改窗口的内容 (WPF)

    我创建了一个简单的 WPF 应用程序 它有两个 Windows 用户在第一个窗口中填写一些信息 然后单击 确定 这会将他们带到第二个窗口 这工作正常 但我试图将两个窗口合并到一个窗口中 这样只是内容发生了变化 我设法找到了这个更改窗口内容时
  • C 中的位移位

    如果与有符号整数对应的位模式右移 则 1 vacant bit will be filled by the sign bit 2 vacant bit will be filled by 0 3 The outcome is impleme
  • AccessViolationException 未处理

    我正在尝试使用史蒂夫 桑德森的博客文章 http blog stevensanderson com 2010 01 28 editing a variable length list aspnet mvc 2 style 为了在我的 ASP
  • 检查 url 是否指向文件或页面

    我们需要以下内容 如果文件确实是文件 则从 URL 下载该文件 否则 如果它是一个页面 则什么也不做 举个简单的例子 我有以下命令来下载文件 My Computer Network DownloadFile http www wired c
  • 什么是 C 语言的高效工作流程? - Makefile + bash脚本

    我正在开发我的第一个项目 该项目将跨越多个 C 文件 对于我的前几个练习程序 我只是在中编写了我的代码main c并使用编译gcc main c o main 当我学习时 这对我有用 现在 我正在独自开展一个更大的项目 我想继续自己进行编译
  • 将应用程序从 Microsoft Access 迁移到 VB 或 C#.NET

    我目前正试图说服管理层需要将我们的应用程序之一移植到 NET 该应用程序已经发展成为 Access 中的一个庞然大物 SQL 后端 拥有 700 个链接表 650 个表单 子表单 130 个模块和 850 个查询 我几乎知道这样做的所有主要
  • 将日期参数传递给对 MVC 操作的 ajax 调用的安全方法

    我有一个 MVC 操作 它的参数之一是DateTime如果我通过 17 07 2012 它会抛出一个异常 指出参数为空但不能有空值 但如果我通过01 07 2012它被解析为Jan 07 2012 我将日期传递给 ajax 调用DD MM
  • 允许 iframe 跨域链接到目标父框架

    我有 2 个域 域 1 上的一个页面使用 iframe 加载域 2 中的内容 如何允许来自domain2 iframe 内 的链接在domain1 的完整父框架中打开 我一直在关注IE和w3c的新沙箱属性 http www w3 org T
  • 如何在内存中存储分子?

    我想将分子存储在内存中 这些可以是简单的分子 Methane CH4 C H bond length 108 7 pm H H angle 109 degrees But also more complex molecules like p
  • C++ 成员函数中的“if (!this)”有多糟糕?

    如果我遇到旧代码if this return 在应用程序中 这种风险有多严重 它是一个危险的定时炸弹 需要立即在应用程序范围内进行搜索和销毁工作 还是更像是一种可以悄悄留在原处的代码气味 我不打算writing当然 执行此操作的代码 相反
  • 为什么 strtok 会导致分段错误?

    为什么下面的代码给出了Seg 最后一行有问题吗 char m ReadName printf nRead String s n m Writes OK char token token strtok m 如前所述 读取字符串打印没有问题 但
  • 不同类型的指针可以互相分配吗?

    考虑到 T1 p1 T2 p2 我们可以将 p1 分配给 p2 或反之亦然吗 如果是这样 是否可以不使用强制转换来完成 或者我们必须使用强制转换 首先 让我们考虑不进行强制转换的分配 C 2018 6 5 16 1 1 列出了简单赋值的约束

随机推荐

  • ES6中扩展类时是否可以定义回调

    本质上 如果我的库类被调用 我想做一些设置工作 例如 class Child extends Parent methods 我想分配一个在扩展父类时调用的函数 我希望以某种方式得到通知 在它即将发生之前 使用要作为参数附加的方法 或在使用
  • 无法在 Android NDK 中包含像矢量这样的 C++ 标头

    当我尝试在我的 Android NDK 项目中包含任何 C 类 例如向量 时 使用最新的 NDK r5b 我收到如下错误 Compile thumb test libstl lt test libstl cpp Users nitrex88
  • CSS 过渡忽略宽度

    我有一个显示为块的标签 页面加载时 其宽度会增加 css动画片从零到包含 div 的某个百分比 小提琴包含一个 MWE 但此 div 中有多个链接 每个链接都有不同的宽度 悬停时 我希望它使用 CSS 改变颜色 改变背景颜色 并扩展到 di
  • 去替换所有字符串

    我阅读了示例代码golang org 网站 本质上 代码如下所示 re regexp MustCompile a x b fmt Println re ReplaceAllString ab axxb T fmt Println re Re
  • CSS:在 CSS 中设置背景图像

    在 CSS 中设置背景图像时 正确的语法是什么 在Visual Studio中 自从出现以来 后台似乎没有任何问题 但在IE或FF等浏览器中 背景不会出现 我在这里错过了什么吗 我使用的语法如下 我认为是正确的 headerArea hei
  • Xerces-C:从 v2.x 迁移到 v3.x?

    我想将一个项目 我不太熟悉的遗留代码 从 Xerces C v2 x 迁移到 v3 x 事实证明 Xerces C v3 删除了 DOMBuilder 类 这迁移档案告诉我这个 作为最终 DOM Level 3 规范一致性工作的一部分 许多
  • Django post_save() 信号实现

    我有一个关于 django 的问题 我这里有ManyToMany模型 class Product models Model name models CharField max length 255 price models DecimalF
  • 如何将数据类型 CLOB 更改为 VARCHAR2(sql)

    表 客户 ID NAME DATATYPE NUMBER VARCHAR2 100 CLOB 我想改变DATA专栏来自CLOB到 VARCHAR2 1000 我已经尝试过ALTER TABLE customers MODIFY DATA V
  • 如何使用键值删除字典数组中的对象

    我有一个字典数组 如下所示 photo id 255025344921316 photo url https scontent xx fbcdn net v t1 0 0 p320x320 16143181 255025344921316
  • React 如何使用 TypeScript 在 Textfield Material-UI 中使用图标

    我使用 TypeScript Material UI 和 Formik 设计了一个带有验证的表单 我想要一个材质 UI 图标出现在我的文本字段区域中 这是我的代码 import React from react import Formik
  • 惰性变量定义后括号做什么?

    我正在分析一些第三方代码 有一个看起来像这样的 惰性 var 语句 我想了解 计算属性 大括号后面的括号在做什么 lazy var defaults NSUserDefaults return standardUserDefaults re
  • asp.net mvc 和 css:使菜单选项卡在选择时保持突出显示

    有一个更好的方法吗 我有一个 HTML 帮助器扩展方法 它检查当前选项卡菜单是否是选定的菜单 然后选择 selected css 类 我将 html IsSelected 链接放在每个 li 中 li class 其中 a 是选项卡名称 b
  • 批量 C# 数据表到 postgresql 表

    我有一个包含数千条记录的数据表 我有一个与数据表具有相同字段的 postgres 表 我想每天截断该表并再次填充数据表的数据 我见过sql批量复制 但它在postgres上不可用 那么 哪一种方法是最有效的呢 每条记录一次插入 多次插入 插
  • 结构类型嵌入字段访问

    我在尝试学习golang目前我正在尝试理解指针 我定义了三种结构类型 type Engine struct power int type Tires struct number int type Cars struct Engine Tir
  • stdout 在 docker 容器中缓冲

    我不完全确定这里发生了什么 但当我在容器中运行代码时 stdout 似乎正在被缓冲 但如果我在主机或 OSX 上运行它 则不会 https github com myles mcdonnell procwrap blob master pr
  • 如何在 clojure 中创建可执行文件?

    我一直在使用 Clojure Box 在 REPL 环境中学习 clojure 如何制作可执行文件 jar 我想知道这样的事情是否可能 在记事本上编写 clojure 代码并将其命名为project clj 编译项目 clj 获取可执行文件
  • 如何创建 Gmail API 消息

    我想使用 Google 的 Gmail API 发送消息 我已成功通过身份验证 并尝试使用 GmailService 发送消息 我想用这个 myService Users Messages Send myMessage me Execute
  • iPhone:如何获取当前毫秒数?

    获取当前系统时间毫秒的最佳方法是什么 如果您正在考虑将其用于相对计时 例如游戏或动画 我宁愿使用CA当前媒体时间 double CurrentTime CACurrentMediaTime 这是推荐的方式 NSDate从网络同步时钟获取 并
  • Angular 5 延迟加载错误:找不到模块

    我想使用延迟加载 但我不明白为什么它不起作用 它给了我错误 找不到模块 这是我的环境 角度 5 2 1 NET核心2 网页包 3 10 0 角度路由器加载器 0 8 2 角度 cli 1 6 5我在 loadChildren 中尝试了不同的
  • 如何从 Pdf、Word 和 Excel 文档中提取文本? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我需要一个 NET 库 以便使用它从 PDF Excel 和 Word 文件中提取文本数据 最好是免费工具 你会推荐一些吗 非常感谢 作为花了很多天