将多个 JPG 文件转换为一个 PDF 文件,并将文件命名为当前的年月日时分秒+pdf 扩展名
import os
from PIL import Image
from reportlab.lib.pagesizes import A4
from reportlab.pdfgen import canvas
from datetime import datetime
def convert_jpg_to_pdf(jpg_file_path):
img = Image.open(jpg_file_path)
img_width, img_height = img.size
a4_width_px, a4_height_px = A4
# 四周均留 10 像素
available_width = a4_width_px - 20
available_height = a4_height_px - 20
aspect_ratio = img_height / img_width
if aspect_ratio >= 1:
new_width = available_width
new_height = new_width * aspect_ratio
if new_height > available_height:
new_height = available_height
new_width = new_height / aspect_ratio
else:
new_height = available_height
new_width = new_height / aspect_ratio
if new_width > available_width:
new_width = available_width
new_height = new_width * aspect_ratio
resized_img = img.resize((int(new_width), int(new_height)), Image.LANCZOS)
return resized_img
def create_pdf_with_images(folder_path):
now = datetime.now()
timestamp = now.strftime("%Y%m%d%H%M%S")
pdf_file_path = os.path.join(folder_path, f'{timestamp}.pdf')
c = canvas.Canvas(pdf_file_path, pagesize=A4)
page_y = A4[1] - 10
for filename in os.listdir(folder_path):
if filename.endswith('.jpg'):
jpg_file_path = os.path.join(folder_path, filename)
resized_img = convert_jpg_to_pdf(jpg_file_path)
page_x = 10
c.drawImage(jpg_file_path, page_x, page_y, width=resized_img.width, height=resized_img.height)
page_y -= resized_img.height
if page_y < 10:
c.showPage()
page_y = A4[1] - 10
c.save()
folder_path = r'D:\python\xxk'
create_pdf_with_images(folder_path)