本文目录导读:

我来帮你实现PDF转图片的脚本,这里提供几种常用的方法:
使用PyMuPDF(推荐)
import fitz # PyMuPDF
import os
def pdf_to_images(pdf_path, output_folder, dpi=200):
"""
将PDF每一页转换为图片
Args:
pdf_path: PDF文件路径
output_folder: 输出图片文件夹
dpi: 图片分辨率(默认200)
"""
# 创建输出文件夹
os.makedirs(output_folder, exist_ok=True)
# 打开PDF文件
pdf_document = fitz.open(pdf_path)
for page_num in range(len(pdf_document)):
# 获取页面
page = pdf_document[page_num]
# 设置缩放矩阵(控制分辨率)
zoom = dpi / 72 # PDF默认72 DPI
mat = fitz.Matrix(zoom, zoom)
# 渲染为图片
pix = page.get_pixmap(matrix=mat)
# 保存图片
output_path = os.path.join(output_folder, f'page_{page_num + 1}.png')
pix.save(output_path)
print(f"已保存第 {page_num + 1} 页")
pdf_document.close()
print(f"转换完成!共转换 {len(pdf_document)} 页")
# 使用示例
if __name__ == "__main__":
pdf_to_images("example.pdf", "output_images", dpi=300)
使用pdf2image
from pdf2image import convert_from_path
import os
def pdf_to_images_pdf2image(pdf_path, output_folder, dpi=200):
"""
使用pdf2image转换PDF为图片
Args:
pdf_path: PDF文件路径
output_folder: 输出文件夹
dpi: 图片分辨率
"""
os.makedirs(output_folder, exist_ok=True)
# 转换PDF为图片
images = convert_from_path(pdf_path, dpi=dpi)
for i, image in enumerate(images):
output_path = os.path.join(output_folder, f'page_{i + 1}.jpg')
image.save(output_path, 'JPEG', quality=95)
print(f"已保存第 {i + 1} 页")
print(f"转换完成!共转换 {len(images)} 页")
# 使用示例
if __name__ == "__main__":
pdf_to_images_pdf2image("example.pdf", "output_images", dpi=300)
使用PyMuPDF + 批量处理版本
import fitz
import os
from pathlib import Path
import argparse
class PDFToImageConverter:
def __init__(self, pdf_path, output_dir=None, dpi=200, image_format='png'):
"""
初始化转换器
Args:
pdf_path: PDF文件路径
output_dir: 输出目录(默认为PDF所在目录)
dpi: 图片DPI
image_format: 图片格式(png/jpg)
"""
self.pdf_path = Path(pdf_path)
self.output_dir = Path(output_dir) if output_dir else self.pdf_path.parent / f"{self.pdf_path.stem}_images"
self.dpi = dpi
self.image_format = image_format.lower()
def convert(self, pages=None, quality=95):
"""
执行转换
Args:
pages: 指定要转换的页码列表(从1开始),None表示所有页
quality: JPEG质量(仅对jpg格式有效)
"""
# 创建输出目录
self.output_dir.mkdir(parents=True, exist_ok=True)
# 打开PDF
doc = fitz.open(self.pdf_path)
total_pages = len(doc)
# 确定要转换的页面
if pages is None:
pages = range(1, total_pages + 1)
print(f"开始转换: {self.pdf_path.name}")
print(f"总页数: {total_pages}")
print(f"输出目录: {self.output_dir}")
print("-" * 40)
converted_count = 0
for page_num in pages:
if page_num < 1 or page_num > total_pages:
print(f"警告: 第{page_num}页不存在,跳过")
continue
# 获取页面
page = doc[page_num - 1]
# 设置缩放
zoom = self.dpi / 72
mat = fitz.Matrix(zoom, zoom)
# 渲染
pix = page.get_pixmap(matrix=mat)
# 保存
filename = f"page_{page_num:03d}.{self.image_format}"
output_path = self.output_dir / filename
if self.image_format == 'jpg' or self.image_format == 'jpeg':
pix.save(str(output_path), "jpeg", jpg_quality=quality)
else:
pix.save(str(output_path))
print(f"✓ 第{page_num}页: {filename}")
converted_count += 1
doc.close()
print("-" * 40)
print(f"转换完成!成功转换 {converted_count}/{len(pages)} 页")
return converted_count
def convert_all(self, quality=95):
"""转换所有页面"""
return self.convert(pages=None, quality=quality)
# 命令行接口
def main():
parser = argparse.ArgumentParser(description='PDF转图片工具')
parser.add_argument('pdf_path', help='PDF文件路径')
parser.add_argument('-o', '--output', help='输出目录')
parser.add_argument('-d', '--dpi', type=int, default=200, help='图片DPI (默认: 200)')
parser.add_argument('-f', '--format', default='png', choices=['png', 'jpg'], help='图片格式 (默认: png)')
parser.add_argument('-p', '--pages', help='指定页码,如: 1,3,5-8')
parser.add_argument('-q', '--quality', type=int, default=95, help='JPEG质量 (1-100)')
args = parser.parse_args()
# 解析页码范围
pages = None
if args.pages:
pages = []
for part in args.pages.split(','):
if '-' in part:
start, end = map(int, part.split('-'))
pages.extend(range(start, end + 1))
else:
pages.append(int(part))
# 执行转换
converter = PDFToImageConverter(
pdf_path=args.pdf_path,
output_dir=args.output,
dpi=args.dpi,
image_format=args.format
)
converter.convert(pages=pages, quality=args.quality)
if __name__ == "__main__":
main()
安装依赖
根据选择的方法,安装对应的库:
# 方法一:PyMuPDF pip install PyMuPDF # 方法二:pdf2image(需要安装poppler) pip install pdf2image # Windows还需要安装poppler: https://github.com/oschwartz10612/poppler-windows/releases/
使用示例
# 使用命令行版本
python pdf_to_image.py input.pdf -o output -d 300 -f png
# 指定特定页面
python pdf_to_image.py input.pdf -p 1,3-5 -f jpg -q 90
# Python代码中使用
converter = PDFToImageConverter("document.pdf", dpi=300)
converter.convert_all()
注意事项
- 内存管理:对于大PDF文件,建议逐页处理而不是一次加载所有页面
- 性能优化:适当降低DPI可以提高处理速度
- 字体问题:如果PDF包含特殊字体,可能需要安装相应字体
- 中文支持:确保系统支持中文编码
你可以根据自己的需求选择合适的方法,推荐使用PyMuPDF(fitz),因为它性能好且不需要额外依赖。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播