两行的字母互换,Adobe Reader可以完成这项工作

时间:2017-08-08 06:25:56

标签: java pdfbox

我对pdfbox 1.8.13有疑问。我试图从一页PDF文档中读取整个文本。 Adobe Reader可以完成这项工作,pdfbox几乎可以读取整个页面,但会对文档的前两行和文档的最后两行进行加扰,以便字母互换。

有人知道如何解决这个问题吗?首先,在哪里问,第二,我如何与你共享PDF,第三,是否有人有可能检查问题是否也存在于pdfbox的2.0.7版本中,我认为这完全不同,因而不是直截了当实施?

提前感谢您的帮助 斯蒂芬

Adob​​e 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版本,但这导致了同样的问题。

1 个答案:

答案 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.13pdfbox-2.0.7的简单文本提取API不一样,但非常相似,PDFTextStripper刚刚从{{1}移开转到util

text

要了解所有这些,正如您所说,命令行工具非常有用,以下是使用不同选项(https://pdfbox.apache.org/1.8/commandline.htmlhttps://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选项的结果相同。