識別法院PDF文件特定字段并插入數據庫【正則表達式+本地化部署】

pdf解析法院協助單特定字段,開源項目,結合若依項目進行開發,不連互聯網,本地開發部署,前端使用vue3技術,后端用若依分離版spring botot技術,實現將pdf法院協助執行通知書中的特定字段如:時間、文號、戶名、開戶行、賬號、劃扣金額、保單號等識別出來,并插入數據庫表。

1. 后端開發

(1) 添加 Maven 依賴
在若依分離版項目的 pom.xml 中添加必要的依賴項:

<dependencies><!-- Apache PDFBox --><dependency><groupId>org.apache.pdfbox</groupId><artifactId>pdfbox</artifactId><version>2.0.27</version></dependency><!-- 其他必要依賴 -->
</dependencies>

(2) 創建 PDF 解析服務
創建一個服務類用于解析 PDF 文件并提取特定字段。

package com.ruoyi.system.service.impl;import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.text.PDFTextStripper;
import org.springframework.stereotype.Service;import java.io.File;
import java.util.HashMap;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;@Service
public class PdfParseService {/*** 解析 PDF 文件并提取特定字段*/public Map<String, String> extractFieldsFromPdf(File pdfFile) throws Exception {Map<String, String> fields = new HashMap<>();try (PDDocument document = PDDocument.load(pdfFile)) {PDFTextStripper pdfStripper = new PDFTextStripper();String content = pdfStripper.getText(document);// 提取特定字段(根據實際模板調整正則表達式)fields.put("notice_time", extractField(content, "通知時間:(\\S+)"));fields.put("document_number", extractField(content, "文號:(\\S+)"));fields.put("account_name", extractField(content, "戶名:(\\S+)"));fields.put("bank_name", extractField(content, "開戶行:(\\S+)"));fields.put("account_number", extractField(content, "賬號:(\\S+)"));fields.put("amount", extractField(content, "劃扣金額:(\\S+)"));fields.put("policy_number", extractField(content, "保單號:(\\S+)"));}return fields;}/*** 使用正則表達式提取字段*/private String extractField(String text, String regex) {Pattern pattern = Pattern.compile(regex);Matcher matcher = pattern.matcher(text);return matcher.find() ? matcher.group(1) : null;}
}```
(3) 創建數據庫操作服務
編寫一個服務類將解析結果插入數據庫。```csharp
package com.ruoyi.system.service.impl;import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.system.mapper.CourtNoticeMapper;
import com.ruoyi.system.domain.CourtNotice;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import java.util.Map;@Service
public class CourtNoticeService {@Autowiredprivate CourtNoticeMapper courtNoticeMapper;/*** 插入解析結果到數據庫*/public void saveToDatabase(Map<String, String> fields) {CourtNotice notice = new CourtNotice();notice.setNoticeTime(DateUtils.parseDate(fields.get("notice_time")));notice.setDocumentNumber(fields.get("document_number"));notice.setAccountName(fields.get("account_name"));notice.setBankName(fields.get("bank_name"));notice.setAccountNumber(fields.get("account_number"));notice.setAmount(Double.parseDouble(fields.getOrDefault("amount", "0")));notice.setPolicyNumber(fields.get("policy_number"));notice.setCreateTime(DateUtils.getNowDate());courtNoticeMapper.insertCourtNotice(notice);}
}

(4) 創建 Controller 接口
編寫一個接口接收上傳的 PDF 文件并調用上述服務。

package com.ruoyi.system.controller;import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.system.service.PdfParseService;
import com.ruoyi.system.service.CourtNoticeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;@RestController
@RequestMapping("/api/pdf")
public class PdfController extends BaseController {@Autowiredprivate PdfParseService pdfParseService;@Autowiredprivate CourtNoticeService courtNoticeService;@PostMapping("/parse")public AjaxResult parsePdf(@RequestParam("file") MultipartFile file) {try {// 保存上傳的文件到臨時目錄File tempFile = File.createTempFile("upload", ".pdf");try (FileOutputStream fos = new FileOutputStream(tempFile)) {fos.write(file.getBytes());}// 解析 PDF 并提取字段var fields = pdfParseService.extractFieldsFromPdf(tempFile);// 將解析結果插入數據庫courtNoticeService.saveToDatabase(fields);return success("解析成功!");} catch (Exception e) {e.printStackTrace();return error("解析失敗:" + e.getMessage());}}
}

(5) 數據庫表設計
創建一個用于存儲解析結果的表。例如:

 CREATE TABLE court_notice (id BIGINT AUTO_INCREMENT PRIMARY KEY,notice_time DATETIME NOT NULL COMMENT '通知時間',document_number VARCHAR(50) NOT NULL COMMENT '文號',account_name VARCHAR(100) NOT NULL COMMENT '戶名',bank_name VARCHAR(100) NOT NULL COMMENT '開戶行',account_number VARCHAR(50) NOT NULL COMMENT '賬號',amount DECIMAL(10, 2) NOT NULL COMMENT '劃扣金額',policy_number VARCHAR(50) COMMENT '保單號',create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '創建時間'
);

2. 前端開發

(1) 安裝 Axios
確保前端項目中已經安裝了 axios:
(2) 創建上傳組件
在若依分離版的前端項目中,創建一個頁面用于上傳 PDF 文件并與后端交互。

<template><div><el-uploadclass="upload-demo"dragaction="/api/pdf/parse":headers="headers":on-success="handleSuccess":on-error="handleError"accept=".pdf"><i class="el-icon-upload"></i><div class="el-upload__text">將文件拖到此處,或<em>點擊上傳</em></div><template #tip><div class="el-upload__tip">只能上傳 PDF 文件</div></template></el-upload><div v-if="message">{{ message }}</div></div>
</template><script>
import { ref } from 'vue';
import axios from 'axios';export default {setup() {const message = ref('');const token = localStorage.getItem('token'); // 獲取用戶的登錄令牌const headers = {Authorization: `Bearer ${token}`, // 若依分離版需要攜帶 JWT Token};const handleSuccess = (response) => {console.log('成功響應:', response);message.value = '解析成功!';};const handleError = (error) => {console.error('錯誤信息:', error);message.value = '解析失敗:' + error.message;};return {message,headers,handleSuccess,handleError,};},
};
</script><style scoped>
.upload-demo {width: 50%;margin: auto;
}
</style>

3. 測試與部署

后端測試:
確保 PDF 文件上傳接口正常工作。
驗證解析邏輯是否能正確提取字段并插入數據庫。
前端測試:
在前端頁面上傳 PDF 文件,驗證解析結果和提示信息。
部署:
打包后端 Spring Boot 項目為 JAR 文件,并部署到服務器。
打包前端 Vue 項目為靜態資源文件,并部署到 Nginx 或其他 Web 服務器。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/77262.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/77262.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/77262.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

擁抱健康養生,開啟活力生活

在快節奏的現代生活中&#xff0c;人們愈發重視健康養生。它并非高深莫測的學問&#xff0c;而是融合于日常點滴&#xff0c;對我們的生活有著深遠影響。 合理飲食是健康養生的基石。一日三餐&#xff0c;應遵循營養均衡原則。多攝入蔬菜、水果&#xff0c;它們富含維生素與膳食…

無人機姿態穩定與動態控制模塊概述!

一、設計難點 1. 動態算力需求與硬件能力的不匹配** 無人機邊緣計算設備通常受限于體積和重量&#xff0c;導致其計算單元&#xff08;如CPU、GPU&#xff09;的算力有限&#xff0c;難以應對突發的高負載任務&#xff08;如實時圖像處理、AI推理&#xff09;。 挑戰&am…

MySQL 臨時表介紹

在 MySQL 數據庫中&#xff0c;臨時表是一種特殊類型的表&#xff0c;它在數據庫會話期間存在&#xff0c;會話結束時自動刪除。臨時表為處理特定的、臨時性的數據操作任務提供了一種高效且便捷的方式。 一、臨時表的創建 使用CREATE TEMPORARY TABLE語句來創建臨時表。其語法…

量子糾纏物理本質、技術實現、應用場景及前沿研究

以下是關于 量子糾纏(Quantum Entanglement) 的深度解析,涵蓋物理本質、技術實現、應用場景及前沿研究,以技術視角展開: 一、量子糾纏的物理本質 1. 核心定義 量子糾纏是多個量子系統(如粒子)間的一種關聯狀態,表現為: 非局域性:糾纏態粒子無論相距多遠,測量其中一…

掃雷-C語言版

C語言掃雷游戲設計&#xff08;完整版&#xff09; 游戲背景 掃雷是一款經典的益智類單人電腦游戲&#xff0c;最早出現在1960年代&#xff0c;并在1990年代隨著Windows操作系統而廣為人知。游戲目標是在不觸發任何地雷的情況下&#xff0c;揭開所有非地雷的格子。玩家需要根…

深入理解 Linux 權限管理:從 Shell 到文件權限

&#x1f33c;&#x1f33c; 在 Linux 系統中&#xff0c;權限是保障系統安全與穩定的核心之一。每個操作都可能涉及權限的管理和控制&#xff0c;特別是當你開始以不同用戶的身份進行操作時。本文將通過生動的比喻與詳細的技術解析&#xff0c;帶你一起深入理解 Linux 權限系統…

【Java面試系列】Spring Cloud微服務架構中的分布式事務解決方案與Seata框架實現原理詳解 - 3-5年Java開發必備知識

【Java面試系列】Spring Cloud微服務架構中的分布式事務解決方案與Seata框架實現原理詳解 - 3-5年Java開發必備知識 引言 在微服務架構中&#xff0c;分布式事務是一個不可避免的挑戰。隨著業務復雜度的提升&#xff0c;如何保證跨服務的數據一致性成為了面試中的高頻問題。本…

【c語言】——深入理解指針2

文章目錄 一、指針數組指針數組模擬二維數組 二、數組指針二維數組傳參的本質 三、字符指針變量四、函數指針變量4.1. 函數指針的應用4.2 兩端有趣的代碼4.3. typedef關鍵字4.3.1 typedef 的使用4.3.2. typedef與#define對比 五、函數指針數組函數指針數組的應用 一、指針數組 …

python20-while和for in的美

課程&#xff1a;B站大學 記錄python學習&#xff0c;直到學會基本的爬蟲&#xff0c;使用python搭建接口自動化測試就算學會了&#xff0c;在進階webui自動化&#xff0c;app自動化 分支語句那些事兒 循環的類型循環的作用循環的構成要素while 循環while 循環實戰循環語句 for…

私人筆記:動手學大模型應用開發llm-universe項目環境創建

項目代碼&#xff1a;datawhalechina/llm-universe: 本項目是一個面向小白開發者的大模型應用開發教程&#xff0c;在線閱讀地址&#xff1a;https://datawhalechina.github.io/llm-universe/ 項目書&#xff1a;動手學大模型應用開發 一、初始化項目 uv init llm-universe-te…

剖析 Rust 與 C++:性能、安全及實踐對比

1 性能對比&#xff1a;底層控制與運行時開銷 1.1 C 的性能優勢 C 給予開發者極高的底層控制能力&#xff0c;允許直接操作內存、使用指針進行精細的資源管理。這使得 C 在對性能要求極高的場景下&#xff0c;如游戲引擎開發、實時系統等&#xff0c;能夠發揮出極致的性能。以…

詳細講解一下Java中的Enum

Java 中的 枚舉&#xff08;Enum&#xff09; 是一種特殊的類&#xff0c;用于表示一組固定且有限的常量&#xff08;如狀態、類型、選項等&#xff09;。它提供類型安全的常量定義&#xff0c;比傳統的常量&#xff08;如 public static final&#xff09;更強大和靈活。以下是…

首席人工智能官(Chief Artificial Intelligence Officer,CAIO)的詳細解析

以下是**首席人工智能官&#xff08;Chief Artificial Intelligence Officer&#xff0c;CAIO&#xff09;**的詳細解析&#xff1a; 1. 職責與核心職能 制定AI戰略 制定公司AI技術的長期戰略&#xff0c;明確AI在業務中的應用場景和優先級&#xff0c;推動AI與核心業務的深度…

LeetCode【劍指offer】系列(位運算篇)

劍指offer15.二進制中1的個數 題目鏈接 題目&#xff1a;編寫一個函數&#xff0c;輸入是一個無符號整數&#xff08;以二進制串的形式&#xff09;&#xff0c;返回其二進制表達式中數字位數為 ‘1’ 的個數&#xff08;也被稱為 漢明重量).&#xff09;。 思路一&#xff…

前端路由緩存實現

場景&#xff1a;以一體化為例&#xff1a;目前頁面涉及頁簽和大量菜單路由&#xff0c;用戶想要實現頁面緩存&#xff0c;即列表頁、詳情頁甚至是編輯彈框頁都要實現數據緩存。 方案&#xff1a;使用router-view的keep-alive實現 。 一、實現思路 1.需求梳理 需要緩存模塊&…

Buildroot編譯過程中下載源碼失敗

RK3588編譯編譯一下recovery&#xff0c;需要把buildroot源碼編譯一遍。遇到好幾個文件都下載失敗&#xff0c;如下所示 pm-utils 1.4.1這個包下載失敗&#xff0c;下載地址http://pm-utils.freedesktop.org/releases 解決辦法&#xff0c;換個網絡用windows瀏覽器下載后&…

Operator 開發入門系列(一):Hello World

背景 我們公司最近計劃將產品遷移到 Kubernetes 環境。 為了更好地管理和自動化我們的應用程序&#xff0c;我們決定使用 Kubernetes Operator。 本系列博客將記錄我們學習和開發 Operator 的過程&#xff0c;希望能幫助更多的人入門 Operator 開發。 目標讀者 對 Kubernete…

Java基礎知識面試題(已整理Java面試寶典pdf版)

什么是Java Java是一門面向對象編程語言&#xff0c;不僅吸收了C語言的各種優點&#xff0c;還摒棄了C里難以理解的多繼承、指針等概念&#xff0c;因此Java語言具有功能強大和簡單易用兩個特征。Java語言作為靜態面向對象編程語言的代表&#xff0c;極好地實現了面向對象理論…

科學視角下的打坐:身心獲益的實證探究

在快節奏的現代生活中&#xff0c;人們在追求物質豐富的同時&#xff0c;也愈發關注身心的健康與平衡。古老的打坐修行方式&#xff0c;正逐漸走進科學研究的視野&#xff0c;并以大量實證數據展現出對人體多方面的積極影響。? 什么是打坐&#xff1a; 打坐是一種養生健身法…

javaSE————網絡編程套接字

網絡編程套接字~~~~~ 好久沒更新啦&#xff0c;藍橋杯爆掉了&#xff0c;從今天開始爆更嗷&#xff1b; 1&#xff0c;網絡編程基礎 為啥要有網絡編程呢&#xff0c;我們進行網絡通信就是為了獲取豐富的網絡資源&#xff0c;說實話真的很神奇&#xff0c;想想我們躺在床上&a…