python将图片转换为pdf格式
目录
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
方法特点:
如果需要添加更多支持的图片格式,只需要在 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膜拜