当前位置: 首页 > 知识库问答 >
问题:

无需工具即可提取PDF文本

常培
2023-03-14

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

在任何编程语言中是否有一种解决方案(无dll等)可以快速提取PDF的文本?

共有1个答案

燕照
2023-03-14

简短回答:

当然有一种方法可以做到这一点。iText(以及许多其他PDF库)能够做到这一点。所以有一种提取文本的算法

长答案:

PDF不是所见即所得的格式。PDF文档有点像“相互引用的对象”和“编程语言”之间不虔诚的结合。

让我解释一下。PDF文档具有图形状态。因此,每当你在PDF文档(在Adobe Reader之类的查看器中)中看到文本时,你基本上看到的是PDF文档中某些“代码”的结果,这些代码表示:

转到位置50720,将活动字体设置为Helvetica,fontsize 12,将活动绘图颜色设置为黑色,绘制与字符“H”对应的字形,转到位置53720,绘制与字符“e”对应的字形

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

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

因此,为了阅读PDF文档中的文本,您需要:

  1. 阅读外部参照表
  2. 找出页面对象的起始位置(字节位置)
  3. 解析页面对象及其所有子对象(再次使用外部参照表找出每个子对象在文件中的位置)
  4. 解析几何指令(图形状态不需要与文本流向相同)
  5. 根据您希望文字书写的方向,对所有可见字符进行排序(比较背景和前景颜色、被其他对象(如图像)遮挡等)
  6. 生成返回字符串

这可能就是其他人使用库的原因。别误会,我非常喜欢自己动手(这是深入了解某些事物如何工作的最佳方式)。

但是从你的一个用户的角度来看,你会更信任什么?

  • 使用“自编”代码处理PDF文档的程序(解析PDF文档的总体经验
 类似资料:
  • 我正在尝试使用表单识别器-Azure认知服务从pdf文件中提取文本。我使用的是定制模型,我用我的模型训练这项服务,然后尝试提取数据。 我的PDF通常有超过1页。但是我对从第一页提取文本感兴趣。Rest所有页面没有任何重要性。 那么,有没有什么方法可以训练我的系统通过给出页码从选定的页面中提取文本? 祝好 玛杜

  • 问题内容: 我想在应用程序中连接到wifi网络。 码: 但是问题是我不知道。如何获取WiFi网络的SSID ? 问题答案: 如果您想获得所有可用的wifi: 如果要连接wifi ssid: 如果您想添加新的wifi设置,我已在下面编写了演示应用程序:

  • 我正在使用Python3.4,需要从PDF中提取所有文本,然后将其用于文本处理。 邦森

  • 我的问题是: 如何从按列划分的PDF文件中提取文本,以获得由该列分隔的结果? 背景:我从事一个关于文本分析(尤其是科学文本)的项目。这些文本有时以多列布局发布,每列都有单独的页码。要按布局页码对提取的文本进行排序,按列提取文本会很有用。 我使用pdfBox并尝试/搜索了以下内容: 我尝试了类的getThreadBeads()方法- 问题是pdfBox似乎会自动将文本按列划分:如果我将PDFText

  • 问题内容: 我遇到一个问题,我需要将数据从.txt文件读取到SQL Server中的变量中。读取需要以编程方式执行,因为它将构成存储过程的一部分,并且不需要使用BULK方法,因为我没有权限在所讨论的数据库上使用BULK方法。这可能吗? 提前致谢 :) 问题答案: 您可以让他们允许临时分布式查询吗?然后,您可以使用OpenRowset或OpenDatasource。 如果需要,这是重新配置代码: 但

  • 以下是从PDF中提取内容和元数据的程序。 import java.io.File; import java.io.FileInputStream; import java.io.IOException; import org.apache.tika.exception.TikaException; import org.apache.tika.metadata.Metadata; import o