系列文章:
Python PDF神器PyMuPDF使用指南 (一)——安装和基础功能
Python PDF神器PyMuPDF使用指南 (二)——文件和文本功能
Python PDF神器PyMuPDF使用指南 (三)——图像和注释功能
Python PDF神器PyMuPDF使用指南 (四)——绘图、多线程和OCR功能
Python PDF神器PyMuPDF使用指南 (五)——命令行使用
Python PDF神器PyMuPDF使用指南 (六)——Document类详解
Python PDF神器PyMuPDF使用指南 (七)——Page类详解
Python PDF神器PyMuPDF使用指南 (八)——基础使用指南
正文:
PyMuPDF是一个高性能的Python库,用于PDF(和其他)文档的数据提取、分析、转换和操作。
Github地址为:pymupdf代码库
官方文档地址为:PyMuPDF文档
本文将介绍PyMuPDF的安装方式和基本的处理PDF的功能。
安装方式
基本安装方式(系统包含PyMuPDF的.whl文件)
以下所有示例假设您在一个 Python 虚拟环境中运行。详情请参见:https://docs.python.org/3/library/venv.html。同时假设您的 pip 是最新的。
例如:
Windows:
py -m venv pymupdf-venv
.\pymupdf-venv\Scripts\activate
python -m pip install --upgrade pip
Linux,MacOS:
python -m venv pymupdf-venv
. pymupdf-venv/bin/activate
python -m pip install --upgrade pip
通过pip安装PyMuPDF:
pip install --upgrade pymupdf
注意:这里是指系统平台有.whl文件,直接用.whl文件安装
如果系统平台没有.whl文件的安装方式
如果系统没有合适的.whl文件,pip 将自动从源代码构建,使用 Python sdist 文件。
这需要安装C/C++开发工具:
在Windows上:
- 安装Visual Studio 2019。如果未安装在标准位置,请将环境变量PYMUPDF_SETUP_DEVENV设置为http://DEVENV.com二进制文件的位置。
- 安装其他版本的Visual Studio(例如Visual Studio 2022)可能会导致问题,因为最终可能会使用不同的编译器版本编译MuPDF和PyMuPDF代码。
该构建将自动下载并构建MuPDF。
安装后可能出现的问题
- 在Windows上,Python报错:
ImportError: DLL load failed while importing _fitz
有时会出现这个问题,通常是因为缺少 MSVCP140.dll,且这个问题出现在某些版本(2015-2017) 的 Microsoft Visual C++ Redistributables 中。
建议在 MSDN 中搜索 MSVCP140.dll,以查找如何重新安装它的说明。例如,您可以访问 Microsoft 支持页面 获取最新支持的版本链接。
更多详情请参考 PyMuPDF GitHub 问题页面。
- Python错误:
ModuleNotFoundError: No module named 'frontend'
如果使用了 PyMuPDF 的旧名称 fitz
(例如 import fitz
而不是 import pymupdf
),且安装了一个名为 fitz
的无关 Python 包(pypi.org/fitz),就可能会发生这个问题。
fitz
包似乎不再维护(最后的版本是 2017 年发布的),而且遗憾的是无法将其从 pypi.org 删除。该包本身也无法正常工作,并且会破坏 PyMuPDF 使用旧名称的功能。
解决此问题有几种方法:
使用import pymupdf
替代import fitz
,并更新代码以匹配。
卸载fitz
包并重新安装 PyMuPDF:
pip uninstall fitz
pip install --force-reinstall pymupdf
或者使用
import pymupdf as fitz
,但这种方式没有经过充分测试。
- 在 Apple Silicon(arm64)的 Jupyter Lab 上,Python 错误:
ImportError: /opt/conda/lib/python3.11/site-packages/pymupdf/libmupdf.so.24.4: undefined symbol: fz_pclm_write_options_usage
这似乎是 Jupyter Lab 中的一个问题,更多详情请参见: