最近遇到一个需求,需要提取PDF部分区域的文字,具体方法如下:
- 提取PDF中目标内容所在区域
- 提取或识别目标区域内容
为了快速验证方法的可行性,使用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 requirement.txt
|
离线迁移
创建envConfig.bat批处理文件,一键执行离线环境配置。
1 2 3
| python -m venv env call env\Scripts\activate.bat pip install --no-index --find-links=packages -r requirement.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)
|
参考链接
- Python截图PDF,在指定区域并提取文本,by 快学Python.
- pymupdf doc,by pymupdf.