Python---PDF转JPG图片

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()

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
引用\[1\]中的脚本是使用fitz库将多个jpg文件换为pdf并合并的示例代码。该脚本首先将jpg文件重命名为01.jpg, 02.jpg等,然后将它们换为pdf格式并插入到一个pdf文档中,最后保存为combined.pdf文件。 引用\[2\]中的代码是另一种使用canvas库将多个jpeg文件换为pdf的示例代码。该代码使用了glob模块来获取指定路径下的所有jpeg文件,然后使用PIL库的Image模块打开第一个文件,获取其尺寸作为pdf页面的大小。接下来,使用canvas.Canvas创建一个pdf文档,并循环遍历所有jpeg文件,将它们绘制到pdf页面上,最后保存为指定的输出pdf文件。 引用\[3\]中的代码是使用PIL库将多个jpeg文件换为pdf的示例代码。该代码首先使用Image模块打开每个jpeg文件,并将其换为RGB格式。然后,将所有的图片对象添加到一个列表中。接下来,从列表中取出第一个图片对象作为pdf的第一页,并使用save方法将其保存为pdf文件。最后,关闭第一页的图片对象,并将剩余的图片对象使用append_images参数添加到pdf文件中。 综上所述,你可以根据自己的需求选择适合的代码来将jpg文件换为pdf。 #### 引用[.reference_title] - *1* [python - jpg图片pdf](https://blog.csdn.net/stone0823/article/details/121884895)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [python版jpeg合成pdf两种方法](https://blog.csdn.net/DOCUVIX/article/details/125751090)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值