从C#中的PDF中提取文本

时间:2010-01-22 10:05:06

标签: c# pdf text extract

非常简单,我需要从多个PDF中删除文本(实际上非​​常多),以便在将内容粘贴到SQL数据库之前对其进行分析。

我发现了一些相当粗略的免费C#库(最好的一个使用iTextSharp),但是有很多格式错误,有些字符是乱码的,而且很多时候都有空格('')无处不在 - 在每个字母之间,在每个字母之间,它们的大块占据了几行,这似乎有点随机。

是否有任何简单的方法可以完全忽略(非常可能!)或者是否有一项艰巨的任务涉及将提取的字节值可靠地转换为字母?

7 个答案:

答案 0 :(得分:21)

可靠地执行此操作可能会有一些困难。问题是PDF是一种表示格式,它重视良好的排版。假设您只想输出一个单词:点按

PDF渲染引擎可能会将其输出为2个单独的调用,如此伪代码所示:

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

这样做是因为字母T和a之间的默认字距(字母间间距)可能不被渲染引擎接受,或者它可能是添加或删除之间的一些微小空间获得完全对齐线的字符。最终导致的结果是,在PDF中找到的实际文本片段通常不是完整的单词,而是它们的一部分。

答案 1 :(得分:14)

通过Nuget查看DotNet上的Tika: 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

答案 2 :(得分:8)

您可以查看this article。它基于优秀的iTextSharp库。

答案 3 :(得分:3)

您可以在.NET中尝试Toxy,一个文本/数据提取框架。在Toxy 1.0中,将支持PDF。有关详细信息,请访问http://toxy.codeplex.com

答案 4 :(得分:2)

如果您正在处理PDF文件以便将数据导入数据库,那么我建议您考虑ByteScout PDF Extractor SDK。包括一些有用的功能

  • 表检测;
  • 将文本提取为CSV,XML或格式化文本(使用可选的布局恢复);
  • 支持正则表达式的文本搜索;
  • 访问文本对象的低级API

免责声明:我隶属于ByteScout

答案 5 :(得分:1)

您可以尝试Docotic.Pdf library(免责声明:我为Bit Miracle工作)从PDF文件中提取文本。该库使用一些启发式方法来提取漂亮的文本,而不会在单词中的字母之间留下不需要的空格。

请查看显示how to extract text from PDF的示例。

答案 6 :(得分:0)

如果您正在寻找“免费”替代方案,请查看PDF Clown。我个人已经使用了基于iFilter的方法,如果您需要轻松支持其他文件类型,它似乎工作正常。示例代码here