pdf2image
下载pdf2image 包:
pip install pdf2image
安装依赖:poppler
conda install -c conda-forge poppler
参考https://wenku.youkuaiyun.com/answer/1zxh8ckp6i
方法:
images = convert_from_path('/home/belval/example.pdf')
实践
from pdf2image import convert_from_path, convert_from_bytes
import os
output_folder = './'
dpi_value= 600
pdf_start_page = 1 # pdf显示的第一页
start_page = 237 # 真实页码
prex = '' # 图像前缀
def to_image():
def page_generator():
while True:
yield prex
images = convert_from_path(r'xxx.pdf', dpi=600 ,output_folder=output_folder,
first_page=pdf_start_page,fmt='jpg',thread_count=6 , output_file=page_generator())
# convert_from_path(pdf_path, dpi=200, output_folder=None, first_page=None, last_page=None, fmt='ppm', jpegopt=None, thread_count=1, userpw=None, use_cropbox=False, strict=False, transparent=False, single_file=False, output_file=str(uuid.uuid4()), poppler_path=None, grayscale=False, size=None, paths_only=False, use_pdftocairo=False, timeout=600, hide_attributes=False)
# 结果 prex-237.jpg
def image_rename():
# 文件重命名
global start_page
file_list = os.listdir(output_folder)
for file in file_list:
start_page_str = prex + str(start_page)
path = os.path.join(output_folder, file)
print(os.path.join(output_folder, start_page_str + '.jpg'))
os.rename(path, os.path.join(output_folder, start_page_str + '.jpg'))
start_page = start_page + 1
to_image()
image_rename()
fitz
fitz库(或称PyMuPDF中的fitz模块)是一个强大的Python库,专注于PDF文档的读取、解析、编辑和转换。fitz实际上是PyMuPDF项目的一个接口,提供了高度优化且易于使用的API来处理PDF内容。
pip install PyMuPDF
实践
import fitz
def pdf_to_image(data_folder,pdf_path,diff , start_page ,end_page,prex = '' ):
'''
Args:
data_folder:
pdf_path:
diff: pdf真实页数与实际页数差-1
start_page: pdf开始真实页数-1
end_page: pdf结束真实页数-1
Returns:
'''
# 打开PDF文件
doc = fitz.open(pdf_path)
for pg in tqdm(range(doc.page_count)):
if pg >=start_page and pg <=end_page:
# 获取当前页对象
page = doc[pg]
# 设置缩放系数为2.0,即将页面放大一倍
zoom_x = 2.0
zoom_y = 2.0
mat = fitz.Matrix(zoom_x, zoom_y)
# 设置dpi为600
pix = page.get_pixmap(matrix=mat, dpi=600)
# 保存为PNG格式的图片文件
# png_path = 'page_%s.png' % str(pg + 1).zfill(3)
page_num = pg - diff + 237
if page_num<10:
page_num = prex +'00' + str(page_num)
elif page_num<100:
page_num = prex +'0' + str(page_num)
else:
page_num = prex + str(page_num)
print(f'{data_folder}/{page_num}.jpg')
pix.save(f'{data_folder}/{page_num}.jpg') # 第1张图片名:1.png,以此类推
# 关闭PDF文件
doc.close()
两种方式对比
相同点:
PDF解析与处理:两者都是用于处理 PDF 文档的开源工具,能够解析和读取 PDF 内容,包括文本和图像。
跨平台支持:均能在多种操作系统上运行,无论是 Windows、macOS 还是 Linux 平台都有很好的兼容性。
不同点:
定位与目标用户:
PyMuPDF 是一个 Python 库,它封装了 MuPDF 引擎,专为 Python 开发者设计,提供了丰富的文档操作功能,包括但不限于读取、写入、修改、合并、拆分 PDF 文件,以及精确的内容提取和页面布局控制。
Poppler 是一个 C++ 库,主要关注 PDF 文档的渲染、预览和转换,广泛用于 PDF 查看器和其他应用程序的基础架构,同时也提供了一些编程语言的绑定(比如 Python-Poppler),便于进行基础的 PDF 解析和转换操作。
功能范围:
PyMuPDF 提供了更多的文档操作和编辑功能,特别是在处理文档结构、元数据和内容级别上的修改上更加深入,适用于需要精细化处理 PDF 的场景。
Poppler 更侧重于 PDF 转换和预览功能,例如将 PDF 转换成文本或者 PostScript 格式,或是在 GUI 应用中作为后端渲染引擎,对于复杂的文档操作支持较少。