从C#中的PDF中提取文本

Dun*_*ait 27 c# pdf text extract

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

我发现了一些非常粗略的免费C#库,这些库有些工作(最好的是使用iTextSharp),但是有很多格式错误,有些字符是乱码的,而且很多时候有空格('')无处不在 - 里面的单词,在每个字母之间,它们的大块占据了几行,这看起来有点随意.

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

Tar*_*don 22

这样做可能会有一些困难.问题是PDF是一种重视良好排版的演示格式.假设你只想输出一个单词:点击.

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

moveto (x1, y); output ("T")
moveto (x2, y); output ("ap")
Run Code Online (Sandbox Code Playgroud)

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

  • 从PDF中提取文本的潜在困难的优秀描述. (3认同)

Dav*_*ond 15

看看DotNet上的Tika,可通过Nuget获取:https://www.nuget.org/packages/TikaOnDotnet.TextExtractor/

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

var text = new TextExtractor().Extract(file.FullName).Text;
Run Code Online (Sandbox Code Playgroud)

更新:此解决方案的一个注意事项是IKVM上的开发已经结束.从长远来看,我不确定这意味着什么.http://weblog.ikvm.net/2017/04/21/TheEndOfIKVMNET.aspx