Python—PDF转JPG图片
三方库安装
需安装pdf2image,配置poppler环境变量
参考:https://github.com/Belval/pdf2image
pdfimage 安装
pip install pdf2image
poppler安装
Linux
apt-get install poppler-utils
windows
下载 poppler: https://blog.alivate.com.au/poppler-windows/
方法一:
设置环境变量PATH: D:\poppler-0.68.0_x86\poppler-0.68.0\bin
方法二:
参数指定绝对路径
images = convert_from_path(pdf_path=pdf_file_path, poppler_path=r'D:\poppler-0.68.0_x86\poppler-0.68.0\bin')
Centos安装pdf2image
环境:centos8、python3.6.4
库安装
1、pip3 install poppler-utils
2、pip3 install pdf2image
3、yum install poppler
4、yum install poppler-utils
PDF转换图片为空的问题
若转换得到的图片为空白页,说明PDF在转换过程中遇到了未能识别的字体,需补充系统中的字体库。
参考博客:
1、Linux 安装字体库
2、linux ttf,Linux篇:linux安装字体
简易版
import os
from pdf2image import convert_from_path
def pdf_to_jpg(pdf_path, jpg_save_path, one_page=False):
"""
将PDF文件转换为JPG图片
:param pdf_path: PDF文件路径
:param jpg_save_path: JPG图片保存路径, 若one_page为False,输入一个文件夹路径保存所有JPG图片
:param one_page: True:返回 PDF首页的JPG;False:返回 PDF所有页的JPG
:return:
"""
pages = convert_from_path(pdf_path, 200) # 若pdf有多页,则返回一个列表
if one_page:
pages[0].save(jpg_save_path, 'JPEG')
else:
if not os.path.exists(jpg_save_path):
os.mkdir(jpg_save_path) # 创建文件夹
for i, page in enumerate(pages):
page.save(jpg_save_path + str(i+1) + '.jpg', 'JPEG')
if __name__ == "__main__":
pdf_path = "../data/pdfdemo.pdf"
# 保存第一张图片
# jpg_save_path = "../data/pdfimg.jpg"
# one_page = True
# pdf_to_jpg(pdf_path, jpg_save_path, one_page)
# 将每页图片都保存
jpg_save_path = "../data/pdfimg/"
one_page = False
pdf_to_jpg(pdf_path, jpg_save_path, one_page)
整合
import os
from pdf2image import convert_from_path
class IMGConverter:
def __init__(self, dir_path, save_dir_path):
self.dir_path = dir_path # 保存pdf文件的文件夹路径
self._export_folder = save_dir_path # 保存图片的文件夹路径
self._filename_list = list() # 保存pdf文件名
if not os.path.exists(self._export_folder):
os.mkdir(self._export_folder)
# print(self._export_folder)
self._enumerate_filename()
def _enumerate_filename(self):
"""
读取所有文件名
"""
for name in os.listdir(self.dir_path):
if self.is_legal_postfix(name):
self._filename_list.append(name)
else:
continue
# 检查文件名是否合法
def is_legal_postfix(self, filename):
return filename.split('.')[-1].lower() == 'pdf' and not os.path.basename(filename).startswith('~')
def run_conver(self):
"""
批量处理转换操作,将一个文件夹下的pdf文件皆转换为jpg图片
"""
print('需要转换的文件数:', len(self._filename_list))
for filename in self._filename_list:
print('原文件:', filename)
self.pdf2img(filename, self._export_folder)
print('转换完成!')
def pdf2img(self, pdf_name, img_save_dir):
"""
将pdf文件转为jpg格式图片,若pdf有多页,则返回多张图片
pdf_path:pdf文件路径
img_path:转换后的图片存放路径
"""
pages = convert_from_path(self.dir_path + '/' + pdf_name, 200)
for i, page in enumerate(pages):
page.save(img_save_dir + '/' + pdf_name[:-4] + '-' + str(i) + '.jpg', 'JPEG')
if __name__ == "__main__":
dir_path = r'C:\Users\Dell\Desktop\recog'
save_dir_path = r'C:\Users\Dell\Desktop\img123'
ob = IMGConverter(dir_path, save_dir_path)
ob.run_conver()