马上注册,结交更多易友,享用更多功能,让你轻松玩转觅风论坛。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
转成exe运行的话,速度太慢,且exe体积较大,如有需要,请自行转换。
当需要给小孩打印图片格式的试卷时比较实用
使用方法:
方法一:直接将脚本放到图片文件夹内,并运行脚本
方法二:命令行运行
命令行参数: python convert_images_to_pdf.py [<图片文件夹路径>] [<PDF保存路径>]
> 图片文件夹路径:可选,默认为:python脚本所在目录
> PDF保存路径:可选,默认路径为 <图片文件夹路径> ,文件名为:<图片文件夹名>.PDF。需先指定<图片文件夹路径>后,再指定<PDF保存路径>
命令行示例:
假设脚本名为:convert_images_to_pdf.py
只指定图片目录
> python convert_images_to_pdf.py C:\img_folder
同时指定图片目录和pdf路径
> python convert_images_to_pdf.py C:\img_folder D:\result.pdf
- # -*- coding: utf-8 -*-
-
- import os
- import subprocess
- import sys
-
- from PIL import Image
- from reportlab.lib.pagesizes import letter
- from reportlab.pdfgen import canvas
-
-
- def pause_exit():
- subprocess.run("pause", shell=True)
- exit()
-
-
- def get_images(img_folder):
- """遍历目录,获取目录下所有的图片"""
- img_format = (".jpg", ".png", ".bmp")
- images = []
- for file_name in os.listdir(img_folder):
- if file_name.lower().endswith(img_format):
- images.append(os.path.join(img_folder, file_name))
- return sorted(images)
-
-
- def get_image_size(img_file, page_width, page_height):
- """设置每个图片的大小"""
- with Image.open(img_file) as img:
- img_width, img_height = img.size
- if img_height > page_height * 0.95 or img_width > page_width * 0.95:
- height_scale = (page_height * 0.95) / img_height
- width_scale = (page_width * 0.95) / img_width
- scale = min(height_scale, width_scale)
- img_width *= scale
- img_height *= scale
- return img_width, img_height
-
-
- def create_pdf(pdf_file, images, page_width, page_height):
- """创建 pdf 文件,并添加图片"""
- c = canvas.Canvas(pdf_file, pagesize=letter)
-
- total_images = len(images)
- for i, img_path in enumerate(images):
- img_width, img_height = get_image_size(img_path, page_width, page_height)
- x = (page_width - img_width) / 2
- y = (page_height - img_height) / 2
- c.drawImage(img_path, x, y, img_width, img_height)
- c.showPage()
-
- progress_bar(i + 1, total_images)
-
- c.save()
-
-
- def create_pdf_from_path(img_folder, pdf_file=None):
- """遍历给定路径,将路径下的图片添加进pdf,并将pdf保存在指定路径下"""
- images = get_images(img_folder)
- if images:
- if not pdf_file:
- pdf_name = os.path.basename(img_folder) + ".pdf"
- pdf_file = os.path.join(img_folder, pdf_name)
- page_width, page_height = letter
- create_pdf(pdf_file, images, page_width, page_height)
- return pdf_file
- else:
- print(f"{img_folder} 下没有图片,当前支持的图片格式为 jpg、png 和 bmp")
- pause_exit()
-
-
- def progress_bar(current, total, bar_length=60):
- """进度条"""
- filled_length = int(bar_length * current // total)
- bar = "+" * filled_length + "-" * (bar_length - filled_length)
- percent = current / total * 100
- sys.stdout.write(f"\r处理进度:|{bar}| {percent:.2f}%")
- sys.stdout.flush()
-
-
- if __name__ == "__main__":
- subprocess.run("title 目录内图片转PDF", shell=True)
-
- try:
- (*rest,) = sys.argv[1:]
- if not rest:
- img_folder = os.getcwd() # 使用当前文件夹作为 img_folder
- pdf_file = None
- else:
- img_folder, *pdf_file = rest
- pdf_file = pdf_file[0] if pdf_file else None
- except ValueError:
- print("请提供图片文件夹路径作为参数")
- pause_exit()
-
- if not os.path.exists(img_folder):
- print(f"{img_folder} 路径不存在!")
- pause_exit()
- elif not os.path.isdir(img_folder):
- print(f"{img_folder} 不是一个文件夹!")
- pause_exit()
- else:
- pdf_file = create_pdf_from_path(img_folder, pdf_file)
-
- if pdf_file:
- subprocess.run(["explorer", pdf_file])
- else:
- pause_exit()
复制代码
|
|