Python提取PDF部分区域文字的方法

最近遇到一个需求,需要提取PDF部分区域的文字,具体方法如下:

  1. 提取PDF中目标内容所在区域
  2. 提取或识别目标区域内容

为了快速验证方法的可行性,使用Python结合PyMuPDF库进行开发。

环境配置

PyMuPDF介绍

PyMuPDF是一个高性能的Python库,用于PDF(和其他)文档的数据提取、分析、转换和操作。

依赖环境

  • python 3.8.5,可在windows7上运行,python 3.9以后版本不支持windows7
  • numpy==1.24.4
  • pandas==2.0.3
  • PyMuPDF==1.23.8
  • PyMuPDFb==1.23.7
  • python-dateutil==2.8.2
  • pytz==2023.3.post1
  • six==1.16.0
  • tzdata==2023.4

虚拟环境

1
2
3
4
5
6
7
8
mkdir pdf_extract
cd pdf_extract
python -m venv env
env\Scripts\activate.bat
pip install pymupdf
pip install pandas
pip freeze > requirement.txt
pip download -d packages -r requirements.txt

离线迁移

创建envConfig.bat批处理文件,一键执行离线环境配置。

1
2
3
python -m venv env
call env\Scripts\activate.bat
pip install --no-index --find-links=packages -r requirements.txt

具体实现

1
2
3
4
5
6
7
8
9
10
11
import fitz # imports the pymupdf library
pdfDoc = fitz.open("test.pdf") # open a document
page = pdfDoc[0]
mat = fitz.Matrix(1, 1) # 1.5表示放大1.5倍
rect = page.rect
#print(rect)
clip = fitz.Rect(0.22*rect.width, 0.19*rect.height,0.35*rect.width, 0.40*rect.height)
pix = page.get_pixmap(matrix=mat, alpha=False, clip=clip)
pix.save("test.png")
a_text = page.get_text(clip=clip)
print(a_text)

参考链接

  1. Python截图PDF,在指定区域并提取文本,by 快学Python.
  2. pymupdf doc,by pymupdf.