python将图片转换为pdf格式

目录

  • python将图片转换为pdf文档
  • 库安装
  • 代码
  • 1. 转换单个图片
  • 2. 多张JPG图片合并为一个PDF文件
  • 3. 指定文件夹中的所有图片文件转换为PDF文件
  • 4. 总代码
  • python将图片转换为pdf文档

    库安装

    pip install pillow 
    
    pip install reportlab
    

    代码

    1. 转换单个图片

    def convert_jpg_to_pdf(jpg_path, pdf_path=None):
        """
        将JPG图片转换为PDF文件
        :param jpg_path: JPG图片的路径
        :param pdf_path: 输出PDF的路径(如果不指定,将使用与图片相同的名称)
        """
        try:
            # 如果没有指定PDF路径,则使用图片名称
            if pdf_path is None:
                pdf_path = os.path.splitext(jpg_path)[0] + ".pdf"
    
            # 打开图片
            image = Image.open(jpg_path)
            # 获取图片尺寸
            img_width, img_height = image.size
    
            # 创建一个PDF文档
            c = canvas.Canvas(pdf_path, pagesize=(img_width, img_height))
            # 将图片绘制到PDF中
            c.drawImage(jpg_path, 0, 0, img_width, img_height)
            # 保存PDF
            c.save()
    
            print(f"转换成功!PDF文件已保存为: {pdf_path}")
            return True
    
        except Exception as e:
            print(f"转换过程中出现错误: {str(e)}")
            return False
    

    2. 多张JPG图片合并为一个PDF文件

    def convert_multiple_jpg_to_pdf(jpg_folder, output_pdf):
        """
        将文件夹中的多张JPG图片合并为一个PDF文件
        :param jpg_folder: 包含JPG图片的文件夹路径
        :param output_pdf: 输出PDF的路径
        """
        try:
            # 获取文件夹中所有的JPG图片
            jpg_files = [
                f for f in os.listdir(jpg_folder) if f.lower().endswith((".jpg", ".jpeg"))
            ]
    
            if not jpg_files:
                print("未找到JPG图片文件!")
                return False
    
            # 打开第一张图片来获取尺寸
            first_image = Image.open(os.path.join(jpg_folder, jpg_files[0]))
            img_width, img_height = first_image.size
    
            # 创建PDF文档
            c = canvas.Canvas(output_pdf, pagesize=(img_width, img_height))
    
            # 处理每张图片
            for jpg_file in jpg_files:
                img_path = os.path.join(jpg_folder, jpg_file)
                # 将图片绘制到PDF页面上
                c.drawImage(img_path, 0, 0, img_width, img_height)
                c.showPage()  # 创建新页面
    
            c.save()
            print(f"合并成功!PDF文件已保存为: {output_pdf}")
            return True
    
        except Exception as e:
            print(f"转换过程中出现错误: {str(e)}")
            return False
    

    3. 指定文件夹中的所有图片文件转换为PDF文件

    def convert_all_images_to_pdfs(input_folder, output_folder):
        """
        将指定文件夹中的所有图片文件转换为PDF文件
        :param input_folder: 输入图片文件夹路径
        :param output_folder: 输出PDF文件夹路径
        :return: 转换成功的文件数量
        """
        try:
            # 支持的图片格式
            supported_formats = (".jpg", ".jpeg", ".png", ".bmp", ".gif", ".tiff")
    
            # 确保输出文件夹存在
            if not os.path.exists(output_folder):
                os.makedirs(output_folder)
    
            # 获取所有支持格式的图片文件
            image_files = [
                f for f in os.listdir(input_folder) if f.lower().endswith(supported_formats)
            ]
    
            if not image_files:
                print("未找到支持的图片文件!")
                return 0
    
            success_count = 0
            # 处理每个图片文件
            for image_file in image_files:
                input_path = os.path.join(input_folder, image_file)
                # 创建输出PDF文件名(将原文件扩展名改为.pdf)
                pdf_name = os.path.splitext(image_file)[0] + ".pdf"
                output_path = os.path.join(output_folder, pdf_name)
    
                if convert_jpg_to_pdf(input_path, output_path):
                    success_count += 1
    
            print(f"转换完成!成功转换 {success_count}/{len(image_files)} 个文件")
            return success_count
    
        except Exception as e:
            print(f"转换过程中出现错误: {str(e)}")
            return 0
    

    方法特点:

  • 支持多种常见图片格式(jpg、jpeg、png、bmp、gif、tiff)
  • 自动创建输出文件夹(如果不存在)
  • 保持原始文件名(仅改变扩展名为.pdf)
  • 提供转换成功率的统计信息
  • 如果需要添加更多支持的图片格式,只需要在 supported_formats 元组中添加相应的扩展名即可。

    4. 总代码

    from PIL import Image
    from reportlab.pdfgen import canvas
    import os
    
    
    def convert_jpg_to_pdf(jpg_path, pdf_path=None):
        """
        将JPG图片转换为PDF文件
        :param jpg_path: JPG图片的路径
        :param pdf_path: 输出PDF的路径(如果不指定,将使用与图片相同的名称)
        """
        try:
            # 如果没有指定PDF路径,则使用图片名称
            if pdf_path is None:
                pdf_path = os.path.splitext(jpg_path)[0] + ".pdf"
    
            # 打开图片
            image = Image.open(jpg_path)
            # 获取图片尺寸
            img_width, img_height = image.size
    
            # 创建一个PDF文档
            c = canvas.Canvas(pdf_path, pagesize=(img_width, img_height))
            # 将图片绘制到PDF中
            c.drawImage(jpg_path, 0, 0, img_width, img_height)
            # 保存PDF
            c.save()
    
            print(f"转换成功!PDF文件已保存为: {pdf_path}")
            return True
    
        except Exception as e:
            print(f"转换过程中出现错误: {str(e)}")
            return False
    
    
    def convert_multiple_jpg_to_pdf(jpg_folder, output_pdf):
        """
        将文件夹中的多张JPG图片合并为一个PDF文件
        :param jpg_folder: 包含JPG图片的文件夹路径
        :param output_pdf: 输出PDF的路径
        """
        try:
            # 获取文件夹中所有的JPG图片
            jpg_files = [
                f for f in os.listdir(jpg_folder) if f.lower().endswith((".jpg", ".jpeg"))
            ]
    
            if not jpg_files:
                print("未找到JPG图片文件!")
                return False
    
            # 打开第一张图片来获取尺寸
            first_image = Image.open(os.path.join(jpg_folder, jpg_files[0]))
            img_width, img_height = first_image.size
    
            # 创建PDF文档
            c = canvas.Canvas(output_pdf, pagesize=(img_width, img_height))
    
            # 处理每张图片
            for jpg_file in jpg_files:
                img_path = os.path.join(jpg_folder, jpg_file)
                # 将图片绘制到PDF页面上
                c.drawImage(img_path, 0, 0, img_width, img_height)
                c.showPage()  # 创建新页面
    
            c.save()
            print(f"合并成功!PDF文件已保存为: {output_pdf}")
            return True
    
        except Exception as e:
            print(f"转换过程中出现错误: {str(e)}")
            return False
    
    
    def convert_all_images_to_pdfs(input_folder, output_folder):
        """
        将指定文件夹中的所有图片文件转换为PDF文件
        :param input_folder: 输入图片文件夹路径
        :param output_folder: 输出PDF文件夹路径
        :return: 转换成功的文件数量
        """
        try:
            # 支持的图片格式
            supported_formats = (".jpg", ".jpeg", ".png", ".bmp", ".gif", ".tiff")
    
            # 确保输出文件夹存在
            if not os.path.exists(output_folder):
                os.makedirs(output_folder)
    
            # 获取所有支持格式的图片文件
            image_files = [
                f for f in os.listdir(input_folder) if f.lower().endswith(supported_formats)
            ]
    
            if not image_files:
                print("未找到支持的图片文件!")
                return 0
    
            success_count = 0
            # 处理每个图片文件
            for image_file in image_files:
                input_path = os.path.join(input_folder, image_file)
                # 创建输出PDF文件名(将原文件扩展名改为.pdf)
                pdf_name = os.path.splitext(image_file)[0] + ".pdf"
                output_path = os.path.join(output_folder, pdf_name)
    
                if convert_jpg_to_pdf(input_path, output_path):
                    success_count += 1
    
            print(f"转换完成!成功转换 {success_count}/{len(image_files)} 个文件")
            return success_count
    
        except Exception as e:
            print(f"转换过程中出现错误: {str(e)}")
            return 0
    
    
    if __name__ == "__main__":
        # 单个图片转换示例
        convert_jpg_to_pdf("./images/example.jpg", "./PDF/example.pdf")
    
        # 多个图片合并示例
        convert_multiple_jpg_to_pdf("images_folder", "output.pdf")
    
        # 添加新的示例调用
        convert_all_images_to_pdfs("./images", "./output_pdf")
    
    

    作者:cuber膜拜

    物联沃分享整理
    物联沃-IOTWORD物联网 » python将图片转换为pdf格式

    发表回复