【发布时间】:2015-12-24 09:03:07
【问题描述】:
我正在尝试使用 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 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. result z 8.583.482,18 416.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());
}
如何正确获取这些字符串及其值,您能帮帮我吗?由于我认为这个解决方案不够好,还有其他有用的方法吗?
【问题讨论】:
标签: java parsing pdf itext java.util.scanner