对于不会多复杂的表格数据,tabula基本能实现完美的数据转换,对于格式制作良好的pdf表格,tabula对单元格中的多行数据也能进行处理,但事无绝对,由于再封装特性是 自上而下自左而右的文本识别,依然还是会出现识别错位,那这样基本获取到字符串也很难获取有效信息了
所以推荐: 对于表制式的pdf识别 最好保证 数据足够简单(不要出现过多的一个单元格中就有三行及以上数据)。
开源地址:https://github.com/tabulapdf/tabula-java
可调用下列方法自己测试,得到的字符串将是由坐标加文本的 格式,可用gsonformat插件自动生成JavaBean类,再调用阿里巴巴的fastjsonAPI去转换。
依赖
1 2 3 4 5 6 7 8 9 10 11 12 |
<!--tabula--> <dependency> <groupId>technology.tabula</groupId> <artifactId>tabula</artifactId> <version>1.0.3</version> <exclusions> <exclusion> <artifactId>slf4j-simple</artifactId> <groupId>org.slf4j</groupId> </exclusion> </exclusions> </dependency> |
调用方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
//多表处理 Public static String pdfByTabulafor3(String pdfPath){ String[] args=newString[]{ "-f=JSON","-p=all",pdfPath}; CommandLineParser parser=newDefaultParser(); CommandLine cmd=null; StringBuilder stringBuilder=newStringBuilder(); List<String> list=newArrayList<>(); try{ cmd = parser.parse(CommandLineApp.buildOptions(),args); newCommandLineApp(stringBuilder,cmd).extractTables(cmd); }catch(ParseExceptione){ e.printStackTrace(); System.out.println("文件解析失败,请校验是否为PDF格式文件"); } String string=stringBuilder.toString(); String tabulaPdfString=string.replaceAll("\r", |