程序结构
requirements.txt
Pillow
#PyPDF2
reportlab
python代码
import os
from PIL import Image
from reportlab.lib.pagesizes import letter
from reportlab.pdfgen import canvas
def images_to_pdf(image_folder, output_pdf):
c = canvas.Canvas(output_pdf, pagesize=letter)
# 获取文件夹中的图片文件列表,并按文件名称排序
image_files = sorted([
filename for filename in os.listdir(image_folder)
if filename.endswith('.jpg') or filename.endswith('.png')
])
# 遍历排序后的图片文件列表
for filename in image_files:
image_path = os.path.join(image_folder, filename)
image = Image.open(image_path)
image_width, image_height = image.size
c.setPageSize((image_width, image_height))
c.drawImage(image_path, 0, 0)
# 添加新页面
c.showPage()
# 保存合并后的PDF文件
c.save()
print(f"PDF file saved: {output_pdf}")
# 指定包含图片的文件夹路径
image_folder = "img"
# 指定输出的PDF文件路径
output_pdf = "output.pdf"
# 调用函数合并图片为PDF
images_to_pdf(image_folder, output_pdf)
程序说明
由于PyPDF2
库并不支持直接将图片添加到PDF中。为了解决这个问题,我们可以使用reportlab
库来代替pypdf2
创建PDF,并使用Pillow
库来处理图像。代码如下:
import os
from PIL import Image
from reportlab.lib.pagesizes import letter
from reportlab.pdfgen import canvas
def images_to_pdf(image_folder, output_pdf):
c = canvas.Canvas(output_pdf, pagesize=letter)
# 获取文件夹中的图片文件列表,并按文件名称排序
image_files = sorted([
filename for filename in os.listdir(image_folder)
if filename.endswith('.jpg') or filename.endswith('.png')
])
# 遍历排序后的图片文件列表
for filename in image_files:
image_path = os.path.join(image_folder, filename)
image = Image.open(image_path)
image_width, image_height = image.size
c.setPageSize((image_width, image_height))
c.drawImage(image_path, 0, 0)
# 添加新页面
c.showPage()
# 保存合并后的PDF文件
c.save()
print(f"PDF file saved: {output_pdf}")
# 指定包含图片的文件夹路径
image_folder = "img"
# 指定输出的PDF文件路径
output_pdf = "output.pdf"
# 调用函数合并图片为PDF
images_to_pdf(image_folder, output_pdf)
在上述代码中,我们首先导入所需的库,包括Pillow、reportlab的canvas模块。然后,我们定义了一个名为images_to_pdf的函数,该函数接收一个包含图片的文件夹路径和一个输出的PDF文件路径作为参数。
我们可以使用sorted()函数对文件列表进行排序,以确保按照文件名称的顺序添加图片到PDF中。
在函数内部,我们使用reportlab库的canvas模块创建了一个Canvas对象,设置了页面大小为letter。然后,我们遍历指定文件夹中的所有图片文件,并使用Pillow库的Image.open方法打开每个图片文件。我们使用c.drawImage方法将图像绘制到PDF页面上,并通过c.showPage添加新页面。
最后,我们使用Canvas对象的save方法保存合并后的PDF文件。
请确保您已安装所需的库(Pillow和reportlab),并将图片文件放置在指定的文件夹路径中。执行上述代码后,将生成一个包含合并后图片的PDF文件。
请注意,上述代码提供了一个基本的框架,您可能需要根据具体需求进行修改和扩展,例如处理异常、调整图片大小、调整页面布局、自定义输出文件名等。