尘封已久,再次开写。
为了回报社会,促进中国软件行业的发展。
我是大爱不留。
====================================================================
解析pdf,可以用itext, pdfbox,然而这2个解析pdf表格却不行。
不能一行一行的解析。 要解析pdf的表格,还是得用tabula-java。
用tabula-java解析pdf的表格,生成csv,再用opencsv读取csv的数据。
1. pom.xml
加入tabula-java、opencsv依赖
<dependencies>
<dependency>
<groupId>technology.tabula</groupId>
<artifactId>tabula</artifactId>
<version>1.0.2</version>
</dependency>
<dependency>
<groupId>com.opencsv</groupId>
<artifactId>opencsv</artifactId>
<version>4.2</version>
</dependency>
</dependencies>
2. 解析pdf表格,生成csv
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
String[] ar = {"-o=d:/output.csv", "-p=all", "E:\\doc\\pdf\\(2018) .pdf"};
CommandLineApp.main(ar);
//PdfUtil.convert2Csv("E:\\doc\\pdf\\(2018) .pdf", "output.csv");
}
3. 运行结果
4. 用opencsv解析csv
package com.lzm.util;
import java.io.FileReader;
import java.util.List;
import com.lzm.a1.bean.Case;
import com.opencsv.CSVReader;
public class CsvUtil {
public static void main(String[] args) throws Exception {
CSVReader reader = new CSVReader(new FileReader("d:/output.csv"));
// 一次读取全部行
// List<String[]> myEntries = reader.readAll();
Case c = new Case();
String[] nextLine;
int lineNumber = 1;
// 每次读一行
while ((nextLine = reader.readNext()) != null) {
// nextLine[] is an array of values from the line
if (lineNumber == 1) {
c.setCaseNo(nextLine[1]); // 第1行第2列
c.setHandler(nextLine[3]); // 第1行第4列
} else if (lineNumber == 2) {
c.setExecutedName(nextLine[1]);
c.setExecutedIdn(nextLine[3]);
}
lineNumber++;
}
System.out.println(c);
}
}
csdn比QQ空间好用!