当前位置: 首页 > article >正文

springboot集成pdfbox解析pdf文件

springboot集成pdfbox解析pdf文件

  • 1、引入依赖
  • 2、获取PDF文件
  • 3、获取需要的字段信息
  • 4、获取多字段时,步骤3需要优化,以下为优化后代码

1、引入依赖

<dependency>
    <groupId>org.apache.pdfbox</groupId>
    <artifactId>pdfbox</artifactId>
    <version>2.0.24</version> <!-- 请检查最新版本 -->
</dependency>


2、获取PDF文件

 String filePath = "C:\\xx\\a.pdf"; // pdf的路径
    PDDocument document = PDDocument.load(new File(filePath));
    PDFTextStripper pdfStripper = new PDFTextStripper();
    // 排序文本行按其位置
    pdfStripper.setSortByPosition(true);
    //获取整个pdf文本内容
    String text = pdfStripper.getText(document);
    document.close();

3、获取需要的字段信息

    private Map<String,String> pdfStr(String invoiceInfo) {
        Map<String,String> map=new HashMap<>();
        //因解析出的括号不确定为中文还是英文,统一替换为英文字符
        invoiceInfo = invoiceInfo.replaceAll("(","(").replaceAll(")",")");
        // 定义正则表达式模式
        Pattern patternInvoiceNumber = Pattern.compile("发票号码:(\\d+)");

        // 创建Matcher对象
        Matcher matcherInvoiceNumber = patternInvoiceNumber.matcher(invoiceInfo);

        // 提取数据
        if (matcherInvoiceNumber.find()) {
            map.put("invoiceNumber",matcherInvoiceNumber.group(1));
        }
        return map;
    }

4、获取多字段时,步骤3需要优化,以下为优化后代码

public static Map<String, String> pdfStr(String invoiceInfo) {
        // 提取数据
        Map<String, String> result = new HashMap<>();

        invoiceInfo = invoiceInfo.replaceAll("(", "(").replaceAll(")", ")");

        // 定义正则表达式模式
        Map<String, String> patterns = new HashMap<>();
        patterns.put("invoiceNumber", "发票号码:(\\d+)");
        patterns.put("invoiceDate", "开票日期:(\\d{4}年\\d{1,2}月\\d{1,2}日)");
        patterns.put("buyerName", "购 名称:(.+?) 销 名称:(.+?)\n");
        patterns.put("itemDetails", "税 额\\s+(.*?)合 计");
        patterns.put("total", "\\(小写\\)¥(\\d+(\\.\\d+)?)");
        patterns.put("batchNumber", "批号:(.+?)/");
        patterns.put("productionDate", "生产日期:(\\d{4}-\\d{1,2}-\\d{1,2})/");
        patterns.put("expirationDate", "有效期至:(\\d{4}-\\d{1,2}-\\d{1,2})/");
        patterns.put("taxIncludedPrice", "含税单价:(\\d+(\\.\\d+)?)");
        patterns.put("manufacturer", "生产厂家:(.+?)/");
        patterns.put("approvalNumber", "批准文号:(.+?)/");
        patterns.put("issuer", "开票人:(.+)");


        for (Map.Entry<String, String> entry : patterns.entrySet()) {
            Pattern pattern = Pattern.compile(entry.getValue(), Pattern.DOTALL);
            Matcher matcher = pattern.matcher(invoiceInfo);
            if (matcher.find()) {
                result.put(entry.getKey(), matcher.group(1).trim());
            }
        }

        // 处理项目名称、规格型号、单位、数量、单价、金额、税率/征收率、税额
        if (result.containsKey("itemDetails")) {
            String[] details = result.get("itemDetails").replace("\n", " ").split(" ");
            if (details.length >= 8) {
                result.put("productName", details[0].trim() + (details.length > 8 ? details[8].trim() : ""));
                result.put("specification", details[1].trim());
                result.put("unit", details[2].trim());
                result.put("quantity", details[3].trim());
                result.put("unitPrice", details[4].trim());
                result.put("amount", details[5].trim());
                result.put("taxRate", details[6].trim());
                result.put("taxAmount", details[7].trim());
            }
        }
        return result;
    }

http://www.kler.cn/news/351181.html

相关文章:

  • 鲸鱼优化算法(Whale Optimization Algorithm, WOA)原理与MATLAB例程
  • 江苏省医疗损害鉴定管理办法
  • C++大沥2019年真题——数字圈
  • MP9928模块分析
  • Java 语法糖详解(2)
  • LinuxDebian系统安装nginx
  • 最近项目的笔记总结。
  • 私有变量、类函数、断言assert
  • vue播放flv和rtsp 格式视频
  • 找到你的乐趣,这六个网站不容错过!
  • 【算法题】62. 不同路径(LeetCode)
  • 安装vue发生异常:npm ERR! the command again as root/Administrator.
  • Docker 下安装 ElasticSearch 和 Kibana (单节点)
  • Python办公自动化案例:实现word表格转换成Excel表格
  • 【MySQL】入门篇—基本数据类型:使用WHERE子句进行数据过滤
  • conda新建环境中存在大量ros相关python包
  • SpinalHDL之设计错误(Design Errors)(二)
  • Sequelize 提示报错ERR_HTTP_HEADERS_SENT
  • 京存助力自动驾驶,打造智能出行未来
  • 使用git页面如何用旧项目创建一个新项目出来并且保留所有分支内容和提交历史
  • GC1277替代OCH477/灿瑞芯片在电脑散热风扇中的应用
  • 计算机网络—静态路由
  • set的基本用法 和 底层简单了解
  • 一个人走到一条岔路,不知道该往哪里走,前面有两个人,但是这两个人中其中一个人永远说真话,另一个人永远说假话
  • 【Linux进程信号】Linux信号机制深度解析:保存与处理技巧
  • Spring Boot图书管理:进销存系统的现代化解决方案