java - 从 PDF 中提取所有带有字符串位置的文本

标签 java pdfbox pdf-parsing

这似乎是一个老问题,但我花了半个小时在 SO 上搜索后没有找到详尽的答案。

我正在使用 PDFBox,我想从 PDF 文件中提取所有文本以及每个字符串的坐标。我正在使用他们的 PrintTextLocations 示例 ( http://pdfbox.apache.org/apidocs/org/apache/pdfbox/examples/util/PrintTextLocations.html ) 但对于我正在使用的 pdf 类型 (E-Tickets),程序无法识别字符串,分别打印每个字符。输出是一个字符串列表(每个字符串代表一个 TextPosition 对象),如下所示:

String[414.93896,637.2442 fs=1.0 xscale=8.0 height=4.94 space=2.2240002 width=4.0] s
String[418.93896,637.2442 fs=1.0 xscale=8.0 height=4.94 space=2.2240002 width=4.447998] a
String[423.38696,637.2442 fs=1.0 xscale=8.0 height=4.94 space=2.2240002 width=1.776001] l
String[425.16296,637.2442 fs=1.0 xscale=8.0 height=4.94 space=2.2240002 width=4.447998] e

虽然我希望程序将字符串“sale”识别为唯一的 TextPosition 并给我它的位置。 我还尝试使用 setSpacingTolerance()setAverageCharacterTolerance() PDFTextStripper 方法,在标准值之上和之下设置不同的值(仅供引用分别为 0.5 和 0.3),但输出根本没有改变。我哪里错了?提前致谢。

最佳答案

正如 Joey 所说,PDF 只是一组指令,告诉您应该在何处打印某个字符。

为了提取单词或行,您必须执行一些数据分割:研究字符的边界框应该让您识别那些在同一行上的字符,然后识别哪些字符构成单词。

关于java - 从 PDF 中提取所有带有字符串位置的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9975036/

相关文章:

java - 在Java中分割以 "."结尾的段落并在点后换行

python - 寻找有关如何将 PDF 转换为结构化格式的建议

java - 如何在selenium中读取PDF内容

java - 更改 TextView 的下划线颜色

java - PDFBox 不支持多种语言

java - 在数据库中存储 joda-time 日期时间

java - 当我在 Apache PDFBox 2.x 中为带有 moveTo/lineTo/stroke 的版本切换已弃用的 drawLine() 方法时,为什么我的线条消失了?

node.js - 在 Node.js 中解析 PDF

java - 返回数组中重复数的最小索引值

java - 无法在Java中的特定目录中创建文件(系统找不到指定的路径)