使用Java将PDF文件解析成Excel文件

安装pom依赖

xml 复制代码
<!--        解析pdf-->
        <dependency>
            <groupId>org.apache.pdfbox</groupId>
            <artifactId>pdfbox</artifactId>
            <version>2.0.27</version> <!-- 请检查并使用最新版本 -->
        </dependency>

测试读取pdf文件信息

java 复制代码
package com.ruoyi.sky.domain;

import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.text.PDFTextStripper;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;

public class PDFReader {

    /**
     * 从指定路径的 PDF 文件中提取文本内容。
     *
     * @param pdfFilePath PDF 文件的路径
     * @return 提取的文本内容
     */
    public static String extractTextFromPDF(String pdfFilePath) {
        PDDocument document = null;
        try {
            // 打开 PDF 文档
            document = PDDocument.load(new File(pdfFilePath));

            // 创建 PDFTextStripper 对象用于提取文本
            PDFTextStripper pdfStripper = new PDFTextStripper();

            // 设置是否按照原始顺序提取文本(可选)
            pdfStripper.setSortByPosition(true);

            // 提取文本
            return pdfStripper.getText(document);
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            // 关闭文档以释放资源
            if (document != null) {
                try {
                    document.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return null;
    }
    private static void writeTextToExcel(String pdfText, String excelFilePath) throws IOException {
        // 判断excel文件类型
        boolean isXlsx = excelFilePath.endsWith(".xlsx");
        // 创建Workbook对象
        Workbook workbook = isXlsx ? new XSSFWorkbook() : new HSSFWorkbook();
        // 创建Sheet对象
        Sheet sheet = workbook.createSheet("Sheet1");
        // 将pdfText按行分割
        String[] lines = pdfText.split("\n");
        // 初始化行索引
        int rowIndex = 0;
        // 遍历每一行
        for (String line : lines) {
            // 创建Row对象
            Row row = sheet.createRow(rowIndex++);
            // 将每一行按单元格分割(先尝试用制表符)
            String[] cells = line.split("\t"); // 使用\t表示制表符
            // 初始化单元格索引
            int cellIndex = 0;
            // 遍历每一个单元格
            for (String cellValue : cells) {
                // 对每个单元格值进一步检查是否有空格
                if (cellValue.contains(" ")) {
                    // 如果有空格,再按照一个或多个连续的空格进行分割
                    String[] subCells = cellValue.split("\\s+");
                    for (String subCellValue : subCells) {
                        // 创建Cell对象
                        Cell cell = row.createCell(cellIndex++);
                        // 设置单元格的值
                        cell.setCellValue(subCellValue);
                    }
                } else {
                    // 创建Cell对象
                    Cell cell = row.createCell(cellIndex++);
                    // 设置单元格的值
                    cell.setCellValue(cellValue);
                }
            }
        }
        // 将Workbook对象写入文件
        workbook.write(new FileOutputStream(excelFilePath));
        // 关闭Workbook对象
        workbook.close();
    }
    public static void main(String[] args) throws IOException {
        // 指定 PDF 文件的路径
        String pdfFilePath = "D:\\Users\\Administrator\\Desktop\\关务\\测试.pdf";
        String excelFilePath = "D:\\Users\\Administrator\\Desktop\\关务\\dome.xlsx";
        // 调用方法提取文本并打印
        String text = extractTextFromPDF(pdfFilePath);
        if (text != null) {
            System.out.println(text);
            writeTextToExcel(text, excelFilePath);
            System.out.println("PDF已成功转换为Excel!");
        } else {
            System.out.println("无法读取 PDF 文件或文件为空。");
        }
    }
}

效果图

相关推荐
考虑考虑18 小时前
Jpa使用union all
java·spring boot·后端
用户37215742613518 小时前
Java 实现 Excel 与 TXT 文本高效互转
java
浮游本尊19 小时前
Java学习第22天 - 云原生与容器化
java
渣哥21 小时前
原来 Java 里线程安全集合有这么多种
java
间彧21 小时前
Spring Boot集成Spring Security完整指南
java
间彧21 小时前
Spring Secutiy基本原理及工作流程
java
Java水解1 天前
JAVA经典面试题附答案(持续更新版)
java·后端·面试
洛小豆1 天前
在Java中,Integer.parseInt和Integer.valueOf有什么区别
java·后端·面试
前端小张同学1 天前
服务器上如何搭建jenkins 服务CI/CD😎😎
java·后端
ytadpole1 天前
Spring Cloud Gateway:一次不规范 URL 引发的路由转发404问题排查
java·后端