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

你可能感兴趣的:(python,pdf,vscode)