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

image.png

这个表格有10列,有若干行数据, 第一行数据里的 Description 列过长显示了三行,后面还有若干行数据,每一行数据的 Description 都有好几行,程序无法判定那几行 Description 属于那一行数据。

尝试换一个思路来解决这个问题,谷歌百度一下是否有工具可以把 pdf 文件转换成 excel 格式或 html 格式,然后再处理对应的 excel 或 html,应该能很好的解决这个问题。在找寻的过程中找到了2个非常好的工具。

tabula 这个工具是专门用来处理 pdf 里的表格,下载 windows 版本是一个 exe 或 jar 包,启动后自带一个 web 服务,但是浏览器访问网址后因为 gbk 的问题,打不开。没办法,在 centos 里启动后才可以。工具很强大,自带 web 管理页面,能图形化识别定位 pdf 文件里表格所在的位置,能解析 pdf 里的表格内容并导出各种格式,包括 excel ,可惜的是它把 Description 里三行数据也解析成 excel 里的 三个 cell,还是没办法解决我的问题。

pdf2htmlEX 这个工具作用如其名,pdf 转换成的 html 效果很好,生成的 html 就一个文件,而且显示的效果和 pdf 完全一样。看它带的例子,很复杂的 pdf 都能很好的转换。

安装有一些麻烦,在 centos 上按文档总是提示各种错误,后来改成 docker 安装,轻松搞定。参考wiki/Download

下载使用命令 :

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倍。

java itext 里表格_Java解析PDF里的表格内容相关推荐

  1. java生成pdf表格_java在pdf中生成表格的方法

    1.目标 在pdf中生成一个可变表头的表格,并向其中填充数据.通过泛型动态的生成表头,通过反射动态获取实体类(我这里是User)的get方法动态获得数据,从而达到动态生成表格. 每天生成一个文件夹存储 ...

  2. python读取pdf表格_[转]Python 解析 PDF 文本和表格的四大方法介绍

    Python 解析 PDF 文本和表格的四大方法介绍 == code for paper and NSFC Proj. parsing==: https://gitee.com/sonica/pdf_ ...

  3. 用Python提取解析pdf文档中内容

    用Python提取解析pdf文档中内容 文章目录: 参考: 1.https://blog.csdn.net/tmaczt/article/details/82876018 # Tika库 2.http ...

  4. java 取pdf表格内容数据_Java 在PDF中添加表格

    本文将介绍通过Java编程在PDF文档中添加表格的方法.添加表格时,可设置表格边框.单元格对齐方式.单元格背景色.单元格合并.插入图片.设置行高.列宽.字体.字号等. 使用工具:Free Spire. ...

  5. python读取pdf表格_【Python 库】解析PDF文本及表格——pdfminer、tabula、pdfplumber 的用法及对比...

    pdf 是个异常坑爹的东西,有很多处理 pdf 的库,但是没有完美的. 一.pdfminer3k pdfminer3k 是 pdfminer 的 python3 版本,主要用于读取 pdf 中的文本. ...

  6. Python:解析PDF文本及表格——pdfminer、tabula、pdfplumber 的用法及对比

    pdf 是个异常坑爹的东西,有很多处理 pdf 的库,但是没有完美的. 一.pdfminer3k pdfminer3k 是 pdfminer 的 python3 版本,主要用于读取 pdf 中的文本. ...

  7. java 设置word刷新_Java 设置Word中的表格自适应的3种方式

    概述 class="MsoNormal">在Word创建表格时,可设置表格"自动调整",有3种情况,通过Java程序设置可调用相应的方法来实现,即: 根据 ...

  8. java itext图片大小_java – iText:降低图像质量(减少生成的PDF大小)

    首先缩放图像,然后使用iText打开缩放图像. ImageDataFactory中有一个接受AWT图像的create方法.首先使用AWT工具缩放图像,然后像这样打开它: String imagePat ...

  9. pdf java解析_JAVA解析PDF内容

    不废话,很简单,超实用.表格,图片都可以解析, 1下载**Spire.Pdf.jar**, 点击此处下载jar包 2代码 public static void main(String[] args) ...

  10. java 容器的嵌套_java界面设计里怎么实现容器嵌套

    我想让tf独占一格在网上搜到只能嵌套怎么嵌套啊importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;publicclassJisuan ...

最新文章

  1. halcon与QT联合:(5.2)瓶盖检测以及QT界面搭建
  2. C#从SQL server数据库中读取l图片和存入图片
  3. IT专业人士需要知道的2018年七大技术趋势
  4. 动画狗奔跑gif图片_常用的GIF制作工具,自媒体人常用,你还不会做表情包
  5. 爬虫多线程生产者与消费者
  6. 以太坊Dapp项目-网页钱包开发手册
  7. ZH奶酪:如何在Ubuntu上安装Java/管理多个JAVA/设置JAVA_HOME
  8. 《Linux 就是这个范儿 - 阅读笔记2》 融于心而表于行(1)
  9. 操作系统—进程的定义、组成和组织方式(思维导图)
  10. 如何使用VS2012进行简单程序的DEBUG(入门级)
  11. 安卓intent发起广播事件给系统或当前app,并从系统或当前app中接收广播
  12. Blog访问量提升秘笈
  13. matlab频谱分析_想知道有限精度对FFT的影响?Matlab仿真看看
  14. 计算机开机今入dos系统,开机如何进入dos系统_如何进入纯dos系统
  15. AutoCAD.net 自定义窗体及面板与CAD交互时的焦点切换问题(C#)
  16. IoTF 2021第七届中国国际物联网博览会
  17. CodeForces - 855B(思维)
  18. 网站实现新浪微博登录
  19. 罗克韦尔 Allen-Bradley AB 1442系列传感器 电涡流传感器/速度传感器/加速度传感器
  20. [教程] 使用3D Infinite Runner Toolkit打造僵尸跑酷游戏

热门文章

  1. STM32驱动W25Q64读写数据
  2. c语言16qam,基于FPGA的高阶QAM调制器的实现
  3. java知识体系结构图
  4. Python实战:个人贷款计算器
  5. php怎么生成缩略图,php怎么生成缩略图
  6. 完美解决“运行引擎需要DX11特性等级10.0”
  7. 时间序列 ARMA 模型实战!
  8. 电子名片帮助实体服装产业快速融入互联网
  9. windows计划任务下 任务启动失败 错误码 2147942402
  10. 【Spring基础】CGLIB动态代理实现原理