Java 当使用itext读取PDF时,获取字符串及其int值的正确方法是什么?
我正在尝试使用Itext阅读Java中的PDF文件。在我的PDF文件中,我有一些计算结果。在一行中有一个元素及其两个计算结果,它们不在表中。我的PDF文件如下所示:Java 当使用itext读取PDF时,获取字符串及其int值的正确方法是什么?,java,parsing,pdf,itext,java.util.scanner,Java,Parsing,Pdf,Itext,Java.util.scanner,我正在尝试使用Itext阅读Java中的PDF文件。在我的PDF文件中,我有一些计算结果。在一行中有一个元素及其两个计算结果,它们不在表中。我的PDF文件如下所示: I. Result X 12.551.734,75 9.284.925,26 . A. Result Y 8.583.482,18 416.187,03 . 1. result z
I. Result X 12.551.734,75 9.284.925,26
. A. Result Y 8.583.482,18 416.187,03
. 1. result z 83.708,72 91.220,23
. 3. result a 8.499.773,46 324.966,80
. B. Result B 0,00 199.942,00
. 4. result c 0,00 199.942,00
. C. Result D 780.316,81 5.376.366,65
. 1. result e 66.041,73 3.962.399,52
. 2. result f 685.579,00 1.367.086,66
我试图做的是解析字符串及其值。我找不到合适的方法,我尝试了下面的代码。但这条线路的逻辑问题是:
。1.结果z 8.583.482,18416.187,03
它只打印字符串的”,然后打印1和第一个数字。我无法将整个”.1.result z“部分作为字符串,然后是其值,因为它在看到int值后直接打印,并跳过其余部分
int page = 1;
PdfReader reader = new PdfReader(pdf);
PdfReaderContentParser parser = new PdfReaderContentParser(reader);
strategy = parser.processContent(page, new LocationTextExtractionStrategy());
Scanner scanner = new Scanner(strategy.getResultantText());
...
for (int j = page; j <= reader.getNumberOfPages(); j++) {
while (scanner.hasNextLine()) {
String nextToken = scanner.nextLine();
String rName = "";
StringTokenizer tok = new StringTokenizer(nextToken);
while (tok.hasMoreTokens()) {
String nToken = tok.nextToken();
try {
number = fmt.parse(nToken);
System.out.println(rName);
System.out.println(number);
while (tok.hasMoreTokens()) {
try {
nToken = tok.nextToken();
number = fmt.parse(nToken);
System.out.println(number);
} catch (ParseException e) {
if(rName.isEmpty()){
rName = nToken;
}else{
rName = rName + " " + nToken;
}
}
}
break;
} catch (ParseException e) {
if(rName.isEmpty()){
rName = nToken;
}else{
rName = rName + " " + nToken;
}
}
}
}
strategy = parser.processContent(++page, new LocationTextExtractionStrategy());
scanner = new Scanner(strategy.getResultantText());
}
int page=1;
PdfReader reader=新PdfReader(pdf);
PdfReaderContentParser=新的PdfReaderContentParser(读取器);
strategy=parser.processContent(页面,新位置TextExtractionStrategy());
Scanner Scanner=新扫描仪(strategy.getResultantText());
...
for(int j=page;j感谢您提供的所有详细信息。通常,您会使用正则表达式来解析复杂的行。尽管有时编程解析更容易理解。与其使用StringTokenizer拆分行,不如尝试以下操作:
String line = scanner.nextLine();
String[] tokens = line.split("\\s+");
String value1 = tokens[tokens.length-2];
String value2 = tokens[tokens.length-1];
String rowTitle = line.substring(0, line.indexOf(value1)).trim();
System.out.print(rowTitle + "\t");
System.out.print(value1 + "\t");
System.out.println(value2);
谢谢,这是一个非常简单的解决方案,现在它解决了我的问题。