欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 名人名企 > springboot集成pdfbox解析pdf文件

springboot集成pdfbox解析pdf文件

2024/10/24 23:22:16 来源:https://blog.csdn.net/qq_35853455/article/details/142984379  浏览:    关键词: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;}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com