我有一个关于 pdfbox 1.8.13 的问题。我正在尝试阅读一页 PDF 文档中的整个文本。 Adobe Reader 可以完成这项工作,pdfbox 几乎可以读取整个页面,但会打乱文档的前两行和最后两行,以便互换字母。
有人知道如何解决这个问题吗?首先,在哪里问,第二,我如何与你分享PDF,第三,有人可以检查一下这个问题是否也存在于pdfbox 2.0.7版本中,我的理解是完全不同的,因此并不简单实现?
预先感谢您的帮助 斯蒂芬
Adobe Reader:
ScalableCapitalHRB217778,AmtsgerichtMünchenSeite1von1
VermögensverwaltungGmbHUSt-IdNr.DE300434774
Prinzregentenstr.
48Geschäftsführung:80538München
ErikPodzuweit,FlorianPrucker
pdf 盒:
SVecramlaöbgleenCsavpeitrawlaltung GmbH UHSRtB-I2d1N7r7.7D8E,3A0m0t4s3g4e7ri7c4ht München Seite 1 von 1
8P0ri5n3zr8egMeünntcehnesntr. 48 GEreikscPhoädftzsufwüheritu,nFglo: rian Prucker
PDF链接(我已验证问题与我上传的未修改和修改后的PDF相同):
https://wetransfer.com/downloads/5930649bce9a1d1a686a0da63f1b9bce20170808071518/9b9140
P.S.:同时,我也尝试了 pdfbox 1.8.13 中的 PDDocument.loadNonSeq 版本,但这导致了同样的问题。
最佳答案
感谢@tilman-hausherr 提供的有用提示。与他们一起,我成功地解决了我的问题。
您是对的,即使在 pdfbox-1.8.13
中,省略排序选项(我不知道为什么之前在我现在从事的项目中使用它)也解决了加扰问题。您是对的,使用 pdfbox-2.0.7
的文本提取结果给出了更好的结果。
我在 pdfbox-1.8.13
中使用的相关 Java 代码片段是:
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.util.PDFTextStripper;
...
PDDocument doc = PDDocument.load(file);
PDFTextStripper textStripper = new PDFTextStripper();
textStripper.setSortByPosition(true);
String text = textStripper.getText(doc);
如果我理解正确的话,从pdfbox-1.8.13
到pdfbox-2.0.7
的简单文本提取API并不相同,但非常相似, PDFTextStripper
刚刚从 util
移至 text
:
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.text.PDFTextStripper;
...
PDDocument doc = PDDocument.load(file);
PDFTextStripper textStripper = new PDFTextStripper();
// textStripper.setSortByPosition(true);
String text = textStripper.getText(doc);
要了解所有这些,正如您所说,命令行工具非常有用,以下是使用不同选项( https://pdfbox.apache.org/1.8/commandline.html 和 https://pdfbox.apache.org/2.0/commandline.html )提取文本的结果:
java -jar pdfbox-app-1.8.13.jar ExtractText -sort“20170801 Rechnung.pdf”:
SVecramlaöbgleenCsavpeitrawl HRBPrinzregentenstra.l4tu8ng GmbH GUSest-I
2d1N7r7.7D8E,3A0m0t4s3g4e7ri7c4ht München Seite 1 von 1
80538 München ErikcPhoädftzsufwüheritu,nFglo: rian Prucker
java -jar pdfbox-app-1.8.13.jar ExtractText“20170801 Rechnung.pdf”:
Scalable CapitalVermögensverwaltung GmbHPrinzregentenstr. 4880538 München
HRB 217778, Amtsgericht MünchenUSt-IdNr. DE300434774Geschäftsführung:Erik
Podzuweit, Florian Prucker
Seite 1 von 1
java -jar pdfbox-app-2.0.7.jar ExtractText -sort“20170801 Rechnung.pdf”:
Scalable Capital HRB 217778, Amtsgericht München Seite 1 von 1
Vermögensverwaltung GmbH USt-IdNr. DE300434774
Prinzregentenstr. 48 Geschäftsführung:
80538 München Erik Podzuweit, Florian Prucker
java -jar pdfbox-app-2.0.7.jar ExtractText“20170801 Rechnung.pdf”
Scalable Capital
Vermögensverwaltung GmbH
Prinzregentenstr. 48
80538 München
HRB 217778, Amtsgericht München
USt-IdNr. DE300434774
Geschäftsführung:
Erik Podzuweit, Florian Prucker
Seite 1 von 1
所以我认为 pdfbox-2.0.7
在这种情况下给出了最好的结果,特别是没有 -sort
选项,即使我不知道为什么算法行为有所不同,因为 pdfbox-1.8.3
在使用或不使用 -nonSeq
选项时都会给出相同的结果。
关于java - 两行字母互换,Adobe Reader 可以完成这项工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45560748/