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

Java 两行中的字母可以互换,Adobe Reader可以完成这项工作,java,pdfbox,Java,Pdfbox,我有一个关于pdfbox 1.8.13的问题。我试图从一页PDF文档中阅读全文。AdobeReader可以完成这项工作,pdfbox可以读取几乎整个页面,但会将文档的前两行和最后两行置乱,以便互换字母 有人知道如何解决这样的问题吗?首先,在哪里提问,第二,我如何与您共享PDF,第三,是否有人有可能检查pdfbox版本2.0.7中是否也存在此问题,我理解pdfbox版本完全不同,因此无法直接实现 提前感谢您的帮助 斯蒂芬 Adobe Reader: ScalableCapitalHRB217778

我有一个关于pdfbox 1.8.13的问题。我试图从一页PDF文档中阅读全文。AdobeReader可以完成这项工作,pdfbox可以读取几乎整个页面,但会将文档的前两行和最后两行置乱,以便互换字母

有人知道如何解决这样的问题吗?首先,在哪里提问,第二,我如何与您共享PDF,第三,是否有人有可能检查pdfbox版本2.0.7中是否也存在此问题,我理解pdfbox版本完全不同,因此无法直接实现

提前感谢您的帮助 斯蒂芬

Adobe Reader:

ScalableCapitalHRB217778,AmtsgerichtMünchenSeite1von1 
VermögensverwaltungGmbHUSt-IdNr.DE300434774 
Prinzregentenstr. 
48Geschäftsführung:80538München 
ErikPodzuweit,FlorianPrucker 
pdfbox:

SVecramlaöbgleenCsavpeitrawlaltung GmbH UHSRtB-I2d1N7r7.7D8E,3A0m0t4s3g4e7ri7c4ht München Seite 1 von 1
8P0ri5n3zr8egMeünntcehnesntr. 48 GEreikscPhoädftzsufwüheritu,nFglo: rian Prucker
链接到PDF(我已验证问题与我上传的未修改和修改的PDF相同):


注意:与此同时,我还尝试了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);
如果我理解正确,用于简单文本提取的API从
pdfbox-1.8.13
pdfbox-2.0.7
是不同的,但非常相似,
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);
要了解所有这些,正如您所说,命令行工具非常有用,下面是使用不同选项(和)提取文本的结果:

java-jar pdfbox-app-1.8.13.jar ExtractText-sort“20170801 Rechnung.pdf”:

java-jar pdfbox-app-1.8.13.jar ExtractText“20170801 Rechnung.pdf”:

java-jar pdfbox-app-2.0.7.jar ExtractText-sort“20170801 Rechnung.pdf”:

java-jar pdfbox-app-2.0.7.jar ExtractText“20170801 Rechnung.pdf”


因此,我认为
pdfbox-2.0.7
在这种情况下给出了最好的结果,尤其是没有
-sort
选项,即使我不知道为什么算法表现不同,因为
pdfbox-1.8.3
在有或没有
-nonSeq
选项的情况下给出了相同的结果。

将PDF上传到共享主机,然后发布链接,例如dropbox、google drive、wikisend、filedropper等,您也可以使用ExtractText命令行应用程序进行测试。只需从下载站点下载pdfbox应用程序。2.0.7版本的pdfbox应用程序绝对更好。用于简单文本提取的API是相同的。您不显示用于进行文本提取的代码。这使得帮助变得很困难。@mkl他使用了排序选项。这在1.8中带来了糟糕的结果(但在2.0中没有)。虽然对于您的文档来说,使用
sort
选项可能不是一个好主意,阅读此答案的读者应该知道,也有许多PDF提取,如果没有该选项,将导致完全胡说八道。您能否解释为什么会出现这种情况,或者是否可以要求PDF的创建者纠正/修改这种行为?“为什么是”-PDF最初是一种跨平台相同显示文档的格式。其他功能(如文本提取)是可选的。“纠正这种行为”-这很难,因为这种行为一开始并不错误,见上文。“修改此行为”-您可以要求创建者创建正确标记的PDF,以便您可以根据标记信息应用文本提取。创建者甚至可能不知道他/她的PDF具有奇怪顺序的图示符-PDF是由计算机创建的。发票的程序员可能希望从顶部和底部开始,然后是项目,然后是总额。然而,序列也可能不同,看起来仍然一样。为什么在1.8中排序时失败了?我想这是因为字体读错了。PDFBox在字体方面有很多问题,可能它没有正确地获得大小,因此,它认为所有内容都是同一行的一部分。(使用1.8渲染文件看起来非常糟糕)
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
Scalable CapitalVermögensverwaltung GmbHPrinzregentenstr. 4880538 München
HRB 217778, Amtsgericht MünchenUSt-IdNr. DE300434774Geschäftsführung:Erik 
Podzuweit, Florian Prucker
Seite 1 von 1
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