如何在PHP中提取PDF指定区域文本并存储至数据库?
PDF发票指定区域文本提取解决方案
方法1:针对可编辑PDF(原生PDF)提取指定区域文本
如果你的发票是原生可编辑PDF,推荐使用**PyMuPDF(fitz)**库,它能精准提取指定坐标范围内的文本:
- 安装依赖
pip install pymupdf
获取目标区域坐标
用PDF阅读器(如Adobe Acrobat、Foxit Reader)打开发票PDF,查看黄色高亮区域的**左上角(x1,y1)和右下角(x2,y2)**坐标(PDF坐标系以左下角为原点)。编写提取脚本
import fitz # PyMuPDF def extract_region_text(pdf_path, page_num, rect): doc = fitz.open(pdf_path) page = doc[page_num] # rect格式:(x1, y1, x2, y2) text = page.get_text("text", clip=rect) doc.close() return text.strip() # 示例:替换为你的PDF路径、页码和目标区域坐标 pdf_path = "your_invoice.pdf" target_rect = (100, 200, 300, 300) # 替换为实际坐标 extracted_text = extract_region_text(pdf_path, 0, target_rect) print(extracted_text)
方法2:针对扫描版PDF(图片型PDF)提取指定区域文本
如果发票是扫描生成的图片PDF,需要先提取指定区域的图片,再通过OCR识别文本:
- 安装依赖
pip install pymupdf pytesseract
同时需本地安装Tesseract OCR引擎,根据你的操作系统下载对应官方版本安装即可。
- 提取区域图片并OCR识别
import fitz import pytesseract from PIL import Image def extract_region_ocr(pdf_path, page_num, rect): doc = fitz.open(pdf_path) page = doc[page_num] # 提取指定区域的图片 pix = page.get_pixmap(clip=rect) img = Image.frombytes("RGB", [pix.width, pix.height], pix.samples) doc.close() # OCR识别文本(中文用chi_sim,英文用eng) text = pytesseract.image_to_string(img, lang="chi_sim") return text.strip() # 示例调用 pdf_path = "scanned_invoice.pdf" target_rect = (100, 200, 300, 300) ocr_text = extract_region_ocr(pdf_path, 0, target_rect) print(ocr_text)
存入数据库
提取到文本后,可使用对应数据库的Python驱动(如sqlite3、psycopg2、pymysql)将数据插入数据库,示例(SQLite):
import sqlite3 def save_to_db(text): conn = sqlite3.connect("invoices.db") cursor = conn.cursor() # 首次运行创建表 cursor.execute("CREATE TABLE IF NOT EXISTS invoice_data (id INTEGER PRIMARY KEY AUTOINCREMENT, content TEXT)") # 插入数据 cursor.execute("INSERT INTO invoice_data (content) VALUES (?)", (text,)) conn.commit() conn.close() # 调用保存 save_to_db(extracted_text)
内容的提问来源于stack exchange,提问作者marco77sa
相关产品推荐
相关产品推荐

