spire.pdf.free解析pdf,根据表格划分

pom

XML 复制代码
  <repositories>
      <repository>
          <id>com.e-iceblue</id>
          <name>e-iceblue</name>
          <url>https://repo.e-iceblue.cn/repository/maven-public/</url>
      </repository>
  </repositories>

  <!-- https://mvnrepository.com/artifact/e-iceblue/spire.pdf.free -->
  <dependency>
      <groupId>e-iceblue</groupId>
      <artifactId>spire.pdf.free</artifactId>
      <version>5.1.0</version>
  </dependency>

  <!--操作word文档内容-->
  <dependency>
      <groupId>e-iceblue</groupId>
      <artifactId>spire.doc.free</artifactId>
      <version>5.2.0</version>
  </dependency>

pdf解析

java 复制代码
        // 创建一个PdfDocument对象
        PdfDocument pdf = new PdfDocument();
        // 加载一个PDF文档
        pdf.loadFromFile("XXX.pdf");
        // 创建一个PdfTableExtractor对象
        PdfTableExtractor extractor = new PdfTableExtractor(pdf);
        StringBuilder sb = new StringBuilder();
        // 从每一页中提取表格
        for (int pageIndex = 0; pageIndex < pdf.getPages().getCount(); pageIndex++) {
            if(StringUtils.isNotBlank(sb.toString())){
                sb.append("\n");
            }
            PdfTable[] tables = extractor.extractTable(pageIndex);
            // 如果表格不为空,则遍历表格
            if (tables != null) {
                for (int tableIndex = 0; tableIndex < tables.length; tableIndex++) {
                    PdfTable table = tables[tableIndex];
                    // 创建一个StringBuilder对象
                    StringBuilder tableText = new StringBuilder();
                    // 遍历行和列
                    for (int rowIndex = 0; rowIndex < table.getRowCount(); rowIndex++) {
                        for (int colIndex = 0; colIndex < table.getColumnCount(); colIndex++) {
                            // 获取单元格文本并移除换行符
                            String cellText = table.getText(rowIndex, colIndex);
                            cellText = cellText.replaceAll("\\r|\\n", "");
                            if (colIndex < table.getColumnCount() - 1) {
                                tableText.append(cellText).append("\t");
                            } else {
                                tableText.append(cellText).append("\n");
                            }
                        }
                    }
                    sb.append(tableText);
                }
            }
        }

注意:如果还需要用到doc,必须要和pdf的pom版本兼容,例如上面的5.1.0和5.2.0。因为是免费版,所以只能解析10页数据,如果超过10页,可以去查找如何摆脱限制,这里不在赘述。

该案例只是将pdf中的表格内容解析(每个表格为一块数据),解析完后,可以对字符串做数据业务处理。

相关推荐
多客:duokelijie21 分钟前
代练订单系统选型思路:跨品类游戏接入、订单分层管理、自动结算逻辑拆解!
数据库·mysql·微信小程序·前端框架·uni-app·php·持续部署
PingCAP22 分钟前
平凯星辰上榜!2026 年胡润全球独角兽企业
数据库
PingCAP24 分钟前
轨道交通 AFC 系统升级,平凯 Loop 把跨部门协同变成可追溯闭环
数据库
w_zero_one1 小时前
递归算法(一)
java·开发语言·算法
java_logo2 小时前
Docker 部署 CloudBeaver:轻松搭建网页数据库管理平台
数据库·docker·容器·数据库管理·dbeaver·轩辕镜像·cloudbeaver
SL_staff2 小时前
私有化低代码不是减配版开发:JVS双模式建模如何重建IT交付信任
java·低代码·spring cloud
墨着染霜华2 小时前
Redocly 生成 OpenAPI 接口文档踩坑实录|Node 版本兼容 + 接口地址错误问题解决
java
文丑颜不良啊2 小时前
LeetCode1881~1990题目解析
java·leetcode
李白客3 小时前
AI 数据库落地 NL2SQL:准确率卡在四成,问题在表注释不在模型
数据库
十碗饭吃不饱3 小时前
后端运维:网络联通、进程查询、Java服务启动脚本
java·运维·网络