从C#中的PDF中提取文本
很简单,我需要从多个PDF中删除文本(实际上非常多),以便在将内容粘贴到SQL数据库之前分析内容。
我发现了一些非常粗略的免费C#库,这些库有点工作(最好的是使用iTextSharp),但是有很多格式错误,有些字符是乱码的,而且很多时候有空格(”)无处不在 – 里面的单词,在每个字母之间,它们的大块占据了几行,这看起来有点随机。
是否有任何简单的方法可以完全忽略(很可能!)或者是否有一项艰巨的任务涉及将提取的字节值可靠地转换为字母?
你可以看一下这篇文章 。 它基于优秀的iTextSharp库。
这样做可能会有一些困难。 问题是PDF是一种重视良好排版的演示格式。 假设你只想输出一个单词: 点击 。
PDF渲染引擎可能会将此输出为2个单独的调用,如此伪代码所示:
moveto (x1, y); output ("T") moveto (x2, y); output ("ap")
这样做是因为字母T和a之间的默认字距调整 (字母间间距)可能不是渲染引擎可接受的,或者它可能是在字符之间添加或删除一些微空间以获得完全对齐的线。 这最终导致的是,在PDF中找到的实际文本片段通常不是完整的单词,而是它们的一部分。
看看DotNet上的Tika,可通过Nuget获取: 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
您可以尝试使用Toxy,一种.NET中的文本/数据提取框架。 在Toxy 1.0中,将支持PDF。 有关详细信息,请访问http://toxy.codeplex.com
您可以尝试Docotic.Pdf库 (免责声明:我为Bit Miracle工作)从PDF文件中提取文本。 该库使用一些启发式方法来提取漂亮的文本,而文字中的字母之间没有不需要的空格。
请查看显示如何从PDF中提取文本的示例。
如果您正在寻找“免费”替代方案,请查看PDF Clown 。 我个人已经使用了基于iFilter的方法,它似乎工作正常,以防您需要轻松支持其他文件类型。 示例代码在这里 。
如果您正在处理PDF文件以将数据导入数据库,那么我建议考虑使用ByteScout PDF Extractor SDK 。 包括一些有用的function
- 表检测;
- 文本提取为CSV,XML或格式化文本(可选的布局恢复);
- 支持正则表达式的文本搜索;
- 用于访问文本对象的低级API
免责声明:我隶属于ByteScout