序言
我们有个需求要解析pdf,尤其是pdf中的表格,某遍观github,没有找到一个符合需求的,于是花了一周时间做了一个解析pdf表格的工具,batonce。
地址:github地址
Quik Start
引入batonce的包
<dependency>
<groupId>io.github.xiaopdtext</groupId>
<artifactId>batonce</artifactId>
<version>1.0.0</version>
</dependency>
引入之后,需要解析的pdf中有表格,输入表格的部分表头,可以智能找到表头,表头在pdf中需要唯一(这个约束将会在下个版本中取消)。然后如果您需要的是所有数据,要所有的数据则
Object data = wiredTableParsing.getData(null);
否则
File pdfFile = new File("test.pdf");
PDDocument load = PDDocument.load(pdfFile);
JSONDataHandler jsonDataHandler = new JSONDataHandler();
WirelessTableParsing wiredTableParsing = new WirelessTableParsing(jsonDataHandler);
wiredTableParsing.process(load, load.getPage(0));
wiredTableParsing.load("Name", "ID");
Object data = wiredTableParsing.getData("Name", "ID");
System.out.println(data);
try {
load.close();
} catch (IOException e) {
e.printStackTrace();
}
您可以以任何格式接收数据,只需要实现handler即可,例如内置的json模板:
public class JSONDataHandler extends BaseTypeHandler<String> {
public JSONDataHandler() {
}
public String getResultWithFiled(Map<String, List<Cell>> fieldListMap) {
return JSONObject.toJSONString(fieldListMap, new Feature[0]);
}
public String getResultWithoutFiled(Table table) {
return JSONObject.toJSONString(table, new Feature[0]);
}
}
您也可以继承BaseTypeHandler即可。用来承接结果。至于要多少数据,自己去实现就行
结束语
这个工具比较赶,难免会出现纰漏,请各位大神斧正,如果对这个项目感兴趣,可以贡献代码。以后的方向是解析整个pdf中的元素。