无需工具即可提取PDF文本

时间:2019-01-28 17:12:44

标签: vb.net pdf text itext extraction

当前,我正在使用itextsharp工具(在VB.net中)提取PDF的文本。 我想独立于其他工具/库,因为我无法在程序中将它们提供给其他人。

是否有任何编程语言都可以快速提取PDF文本的解决方案(没有.dll等)?

1 个答案:

答案 0 :(得分:2)

简短答案:

当然有这样做的一种方式。 iText(以及其他许多PDF库)能够这样做的。因此,有用于提取文本的算法。

长答案:

PDF不是所见即所得的格式。 PDF文档是“互相引用的对象”与“编程语言”之间的不道德的结合。

让我解释一下。 PDF文档具有图形状态。因此,每当您在PDF文档中(例如在Adobe Reader等查看器中)看到文本时,您实际上就可以看到PDF文档中某些“代码”的结果,

  

转到位置50,720
  将活动字体设置为Helvetica,字体大小12
  将活动图形颜色设置为黑色
  绘制字形相应于字符“H”
  转到位置53,720
  绘制字形对应的字符“E”
  等

指令和资源(如字体,图像,矢量图形)可以在对象中分组在一起。

为每个对象分配了一个数字,并在交叉引用表(在PDF文档末尾)中明确提及。

因此,要读取PDF文档中的文本,您需要:

  1. 读取XREF表
  2. 断定从哪里(字节位置)的\页面对象启动
  3. 解析\ page对象及其所有子对象(再次使用XREF表确定这些子对象在文件中的位置)
  4. 解析几何指令(图形状态不需要与文本相同的方向流动)
  5. 根据您希望文本被写入的方向对所有可见字符(比较背景和前景色,被其他对象(例如图像)遮挡等)
  6. 构建返回字符串

这可能是为什么其他人使用库。 不要误会我的意思,我是一个自己做的忠实粉丝(这是对某些事情的工作方式有深入了解的最好方法。)

但看看它的观点用户的一个点。 您会更信任什么?

  • 使用“自写”代码处理PDF文档的程序(解析PDF文档的总经验<1年),
  • 或仅调用PDF库的程序( 解析PDF文档> 20年)