getTokens()给出了垃圾数据和单字符PDFBox-1.8.9版本

getTokens()给出了垃圾数据和单字符PDFBox-1.8.9版本,pdf,pdfbox,Pdf,Pdfbox,我是pdfbox的新手。我正在使用pdfbox-app-2.0.0-RC1version使用PDFTextStripperByArea从pdf中获取整个文本。我是否可以分别获取每个字符串 比如说,, 在下文中 提名:姓名及地址 托运人:托运人姓名 我需要提名作为单独的字符串和“姓名和地址”作为单独的字符串。相反,我将分别获取每个角色。我试过使用不同的PDF。对于大多数PDF,我能够得到精确的字符串,但对于少数PDF,我不能 我使用以下代码来获取单独的字符串 for (PDPage page :

我是pdfbox的新手。我正在使用
pdfbox-app-2.0.0-RC1
version使用PDFTextStripperByArea从pdf中获取整个文本。我是否可以分别获取每个字符串

比如说,, 在下文中

提名:姓名及地址 托运人:托运人姓名

我需要提名作为单独的字符串和“姓名和地址”作为单独的字符串。相反,我将分别获取每个角色。我试过使用不同的PDF。对于大多数PDF,我能够得到精确的字符串,但对于少数PDF,我不能

我使用以下代码来获取单独的字符串

for (PDPage page : doc.getPages()) {
    PDFStreamParser parser = new PDFStreamParser(page);
    parser.parse();
    List<Object> tokens = parser.getTokens();
       for (int j = 0; j < tokens.size(); j++) {
                Object next = tokens.get(j);
                if (next instanceof Operator) {
                    Operator op = (Operator) next;
                    if (op.getName().equals("Tj")) {
                        COSString previous = (COSString) tokens.get(j - 1);
                        String string = previous.getString();
                        System.out.println("string1===" + string);
                        if (string.contains("Plant")) {
                            int size = al.size();
                            al.add(string);
                            stop = false;
                            continue;
                        }
                        if (!string.contains("_") && !stop) {
                            if (string.contains("Nomination")) {
                                stop = true;
                            } else {
                                al.add(string);
                            }
                        }

                    } else if (op.getName().equals("TJ")) {
                        COSArray previous = (COSArray) tokens.get(j - 1);
                        for (int k = 0; k < previous.size(); k++) {
                            Object arrElement = previous.getObject(k);
                            if (arrElement instanceof COSString) {
                                COSString cosString = (COSString)arrElement;
                                String string = cosString.getString();
                                System.out.println("string2====>>"+string);
                                al.add(string);
                            }
                        }
                    }
                }
            }
    }
for(PDPage:doc.getPages()){
PDFStreamParser=新的PDFStreamParser(第页);
parser.parse();
List tokens=parser.getTokens();
对于(int j=0;j>”+字符串);
al.添加(字符串);
}
}
}
}
}
}
我得到以下输出:

字符串2==>>名称

string2==>>i

string2==>>na

字符串2==>>t

string2==>>i

string2===>>打开

字符串1==

string2==>>(

字符串2==>>T

string2==>>o

字符串1==

string2==>>Loa

string2==>>di

string2==>>ng

字符串1==

string2==>>Fa

字符串2==>>c

string2==>>i

字符串2==>>l

string2==>>i

字符串2==>>t

string2==>>y

字符串2===>>)


我将分别获取每个字符-不,在您发布的输出中有一些多字母组。也就是说,你没有得到整个字符串而是这些片段的原因是,在pdf中,不是你的整个字符串一次被画出来,而是作为这些片段。如果你想要整个字符串,你必须把这些片段放在一起,这就是文本剥离器为你做的。目前的版本是RC2。(虽然这不会改变你所遇到的“问题”,但事情与mkl所描述的完全一样)。谢谢你的回复。因此,pdfbox会根据pdf的编写方式对其进行解析。??使用getTokens()--string1===>>在另一个pdf中获取垃圾数据!“#$$string1===>>string1===>%&'string1====>>()string1====>>string1=====>>string1=====>>”$*string1======>>*!$*string1===>>string1===>>“$*string1====>>*!+string1==>>string1==>>,string1===>>,)string1====>>string1====>>string1===>$#/0*1”字符串===字符串===字符串===>%23.4 string1===>$1==>string1==>string1=>string1=>>,string1=========>,String4.string1=>;方法返回正确的文本。解析器函数有问题吗??