程序员

Java解析PDF里的表格内容

2019-09-26  本文已影响0人  voxer

需要从每日生成的 pdf 文件中解析出内容存入数据库,对于 Java 来说,可选择的二个常用库是 Apache pdfboxiText 。 这二个库解析一般的 pdf 文件获取内容方式都很简单。pdf 文件里有表格,要解析表格里的内容并不难,但是困难是无法确定解析出来的内容是归属于那一组数据 。如下图:

image.png
这个表格有10列,有若干行数据, 第一行数据里的 Description 列过长显示了三行,后面还有若干行数据,每一行数据的 Description 都有好几行,程序无法判定那几行 Description 属于那一行数据。
尝试换一个思路来解决这个问题,谷歌百度一下是否有工具可以把 pdf 文件转换成 excel 格式或 html 格式,然后再处理对应的 excel 或 html,应该能很好的解决这个问题。在找寻的过程中找到了2个非常好的工具。
docker pull bwits/pdf2htmlex

转换命令:

docker run -ti --rm -v ~/pdf:/pdf bwits/pdf2htmlex pdf2htmlEX --zoom 1.3 test.pdf

回来笔者碰到的问题,右键查看源码,发现一行对应的 Description 都在第一列值的下面,理论上应该可以解决这个问题,但是实际肯定要繁琐很多,每个pdf都要调用 docker 命令去转换一遍,而且解析html也复杂,里面所有的 class 都不一样。

后来发现通过 pdfbox 和 itext 解析的内容分析,结合起来可以解决这个问题,最后每个 pdf 分别用这二个库解析出来的文本,通过算法不是很完美的完成这个工作,这里面还得有一些前提条件,比如第三列到最后一列都必须有值(客户确认过所有pdf这几列都有值)。总之利用提供的8个 pdf 示例,凑出了解决方法,如果碰到新的情况,还得改进算法,或者让客户自己手动去修改。

不管如何,比客户每天手动去打开 pdf 文件再去拷贝里面一项项内容效率会高n倍。

上一篇 下一篇

猜你喜欢

热点阅读