我对pdfbox 1.8.13有疑问。我试图从一页PDF文档中读取整个文本。 Adobe Reader可以完成这项工作,pdfbox几乎可以读取整个页面,但会对文档的前两行和文档的最后两行进行加扰,以便字母互换。
有人知道如何解决这个问题吗?首先,在哪里问,第二,我如何与你共享PDF,第三,是否有人有可能检查问题是否也存在于pdfbox的2.0.7版本中,我认为这完全不同,因而不是直截了当实施?
提前感谢您的帮助 斯蒂芬
Adobe Reader:
<DockPanel>
<Button DockPanel.Dock="Bottom" Name="btn" HorizontalAlignment="Center"
VerticalAlignment="Bottom"></Button>
</DockPanel>
PDFBOX:
ScalableCapitalHRB217778,AmtsgerichtMünchenSeite1von1
VermögensverwaltungGmbHUSt-IdNr.DE300434774
Prinzregentenstr.
48Geschäftsführung:80538München
ErikPodzuweit,FlorianPrucker
链接到PDF(我已经确认问题与我上传的未经修改和修改过的PDF相同):
https://wetransfer.com/downloads/5930649bce9a1d1a686a0da63f1b9bce20170808071518/9b9140
P.S。:与此同时,我也在pdfbox 1.8.13中尝试过PDDocument.loadNonSeq版本,但这导致了同样的问题。
答案 0 :(得分:1)
感谢@ 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
刚刚从{{1}移开转到util
:
text
要了解所有这些,正如您所说,命令行工具非常有用,以下是使用不同选项(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”:
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);
java -jar pdfbox-app-1.8.13.jar ExtractText“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-2.0.7.jar ExtractText -sort“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“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
所以我认为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
选项的结果相同。