根据报错信息 AttributeError: 'Document' object has no attribute 'load_page'
,您需要将新版的 load_page()
和 get_pixmap()
方法改为旧版 PyMuPDF (1.18.0) 兼容的驼峰命名法形式(loadPage()
和 getPixmap()
)。以下是完整修正后的代码:
import fitz # PyMuPDF
def extract_pdf_region_to_image(pdf_path, output_image_path, page_number, bbox, zoom=3):
"""
从PDF文件中截取指定区域的页面内容并保存为高清晰度图片,保持原始比例和大小。
:param pdf_path: PDF文件路径
:param output_image_path: 输出图片路径(支持PNG/JPEG等格式)
:param page_number: 要截取的页面编号(从0开始)
:param bbox: 截取区域的边界框(x0, y0, x1, y1),单位为PDF点(1点=1/72英寸)
:param zoom: 缩放因子,提高此值可获得更高清晰度的图片(默认为3)
"""
doc = fitz.open(pdf_path)
# 检查页面编号是否有效
if page_number >= len(doc):
raise ValueError(f"页面编号 {page_number} 超出范围(总页数:{len(doc)})")
# 修改为旧版API:loadPage() 代替 load_page()
page = doc.loadPage(page_number)
# 创建高清晰度的缩放矩阵
matrix = fitz.Matrix(zoom, zoom)
# 修改为旧版API:getPixmap() 代替 get_pixmap()
pix = page.getPixmap(matrix=matrix, clip=bbox)
# 保存图片(旧版API仍使用save)
pix.save(output_image_path)
print(f"截图已保存至:{output_image_path}(尺寸:{pix.width}x{pix.height} 像素,DPI:{72*zoom})")
# 示例用法(根据您的实际路径选择Windows或Linux版本)
# Windows路径示例
# pdf_path = r"C:\Leon\python_project\oceanxecm\2025\05\20250501-Dusty-BCM\pdf\BCM_test_first_page.pdf"
# output_image_path = r"C:\Leon\python_project\oceanxecm\2025\05\20250501-Dusty-BCM\png\BCM_pdf_first_img.png"
# Linux路径示例
pdf_path = r"/home/leon/20250501-Dusty-BCM/pdf/BCM_test_first_page.pdf"
output_image_path = r"/home/leon/20250501-Dusty-BCM/png/BCM_pdf_first_img.png"
page_number = 0 # 第一页(从0开始)
# 定义截取区域的边界框(需要根据实际内容调整)
# 格式:(x0, y0, x1, y1),坐标原点在页面左上角
bbox = (55, 500, 560, 655) # 示例值,请按需调整
extract_pdf_region_to_image(pdf_path, output_image_path, page_number, bbox, zoom=3)
关键修改点:
- 将
load_page()
改为loadPage()
- 将
get_pixmap()
改为getPixmap()
- 保持其他参数和逻辑不变(如
Matrix
和save
的用法在旧版中相同)
注意事项:
- 如果仍有兼容性问题,可以考虑显式安装旧版:
pip install PyMuPDF==1.16.0
- 边界框
bbox
的坐标需要根据实际PDF内容手动调整,建议先用page.rect
打印页面完整尺寸作为参考。