使用 C# 从 PDF 中提取文本[已关闭]

问题描述 投票:0回答:6

很简单,我需要从多个 PDF(实际上很多)中提取文本,以便在将其粘贴到 SQL 数据库之前分析内容。

我发现了一些相当粗略的免费 C# 库,可以工作(最好的一个使用 iTextSharp),但存在无数格式错误,一些字符被打乱,而且很多时候单词内部到处都有空格 (' ') ,每个字母之间,大块的字母占据了好几行,这一切看起来都有点随机。

是否有任何简单的方法可以做到这一点,而我完全忽略了(很可能!),或者这是一项艰巨的任务,需要将提取的字节值可靠地转换为字母?

c# pdf text extract
6个回答
28
投票

可靠地做到这一点可能会有些困难。问题是 PDF 是一种重视良好排版的“演示文稿”格式。假设您只想输出一个单词:Tap PDF 渲染引擎可能会将其输出为 2 个单独的调用,如以下伪代码所示:

moveto (x1, y); output ("T") moveto (x2, y); output ("ap")

这样做是因为字母 T 和 a 之间的默认 
kerning

(字母间距)可能无法被渲染引擎接受,或者它可能会添加或删除字符之间的一些微小空间以获得完全合理的行。最终导致的结果是,在 PDF 中找到的实际文本片段通常不是完整的单词,而是其中的片段。


18
投票
https://www.nuget.org/packages/TikaOnDotnet.TextExtractor/

这是使用 IKVM 的非常好的 Tika java 库的包装。非常易于使用,可处理除 PDF 之外的各种文件类型,包括新旧办公格式。它将根据文件扩展名自动选择解析器,因此非常简单:

var text = new TextExtractor().Extract(file.FullName).Text;

更新:

此解决方案的一个警告是 IKVM 的开发已结束。我不确定这从长远来看意味着什么。 http://weblog.ikvm.net/2017/04/21/TheEndOfIKVMNET.aspx


3
投票
ByteScout PDF Extractor SDK

。包括一些有用的功能是

表检测;
  • 将文本提取为 CSV、XML 或格式化文本(具有可选的布局恢复功能);
  • 支持正则表达式的文本搜索;
  • 用于访问文本对象的低级 API
免责声明:我隶属于 ByteScout


3
投票
https://github.com/nissl-lab/toxy


1
投票
Docotic.Pdf 库

(免责声明:我为 Bit Miracle 工作)从 PDF 文件中提取文本。该库使用一些启发式方法来提取美观的文本,而单词中的字母之间不会出现不需要的空格。 请查看示例,其中显示了

如何从 PDF 中提取文本


0
投票
PDF Clown

。我个人使用过基于 iFilter 的方法,如果您需要轻松支持其他文件类型,它似乎工作得很好。示例代码这里

© www.soinside.com 2019 - 2024. All rights reserved.