PDF文件分割图片

import fitz  # PyMuPDF
from pathlib import Path

def pdf_to_jpg(pdf_path: str, output_folder: str, dpi: int = 300) -> list[str]:
    """
    将 PDF 的每一页转换为 JPG 图片
    
    参数:
        pdf_path: PDF 文件路径
        output_folder: 输出文件夹路径
        dpi: 图像分辨率(默认 300,越高越清晰但文件越大)
    
    返回:
        生成的 JPG 文件路径列表
    """
    # 打开 PDF 文件
    pdf_document = fitz.open(pdf_path)
    
    # 创建输出文件夹
    output_dir = Path(output_folder)
    output_dir.mkdir(parents=True, exist_ok=True)
    
    # 获取 PDF 文件名(不含后缀)
    pdf_name = Path(pdf_path).stem
    
    output_files = []
    
    print(f"开始转换: {pdf_path}")
    print(f"共 {len(pdf_document)} 页")
    
    # 遍历每一页
    for page_num in range(len(pdf_document)):
        page = pdf_document.load_page(page_num)
        
        # 设置缩放比例 (DPI: 72 是 PDF 默认,300 是打印质量)
        zoom = dpi / 72
        matrix = fitz.Matrix(zoom, zoom)
        
        # 渲染页面为图像
        pix = page.get_pixmap(matrix=matrix, colorspace="RGB")
        
        # 生成输出文件名,例如: document_001.jpg
        output_path = output_dir / f"{pdf_name}_{page_num+1:03d}.jpg"
        
        # 保存为 JPG
        pix.save(str(output_path), "JPEG", jpg_quality=95)
        
        output_files.append(str(output_path))
        print(f"已保存: {output_path}")
    
    pdf_document.close()
    print(f"转换完成!共生成 {len(output_files)} 张图片")
    
    return output_files


# 使用示例
if __name__ == "__main__":
    pdf_path = "1.pdf"
    output_folder = "output_images"
    
    # 转换,使用 300 DPI
    jpg_files = pdf_to_jpg(pdf_path, output_folder, dpi=300)
    
    print("\n生成的文件:")
    for file in jpg_files:
        print(file)

发表回复