导读
易语言5.6完美版,可静态编译,绿色无后门

学习易语言 讲究的是系统,如果你正在四处闲逛,你懂的永远是皮毛! 觅风论坛正在为每个困惑的对易语言 详细

[源码] 目录内图片转PDF多图片打印助手Python源码

[复制链接]

微信扫一扫 分享朋友圈

逍遥我逍遥 发表于 2023-10-4 10:29:17 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

马上注册,结交更多易友,享用更多功能,让你轻松玩转觅风论坛。

您需要 登录 才可以下载或查看,没有账号?立即注册

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



  1. # -*- coding: utf-8 -*-

  2. import os
  3. import subprocess
  4. import sys

  5. from PIL import Image
  6. from reportlab.lib.pagesizes import letter
  7. from reportlab.pdfgen import canvas


  8. def pause_exit():
  9.     subprocess.run("pause", shell=True)
  10.     exit()


  11. def get_images(img_folder):
  12.     """遍历目录,获取目录下所有的图片"""
  13.     img_format = (".jpg", ".png", ".bmp")
  14.     images = []
  15.     for file_name in os.listdir(img_folder):
  16.         if file_name.lower().endswith(img_format):
  17.             images.append(os.path.join(img_folder, file_name))
  18.     return sorted(images)


  19. def get_image_size(img_file, page_width, page_height):
  20.     """设置每个图片的大小"""
  21.     with Image.open(img_file) as img:
  22.         img_width, img_height = img.size
  23.         if img_height > page_height * 0.95 or img_width > page_width * 0.95:
  24.             height_scale = (page_height * 0.95) / img_height
  25.             width_scale = (page_width * 0.95) / img_width
  26.             scale = min(height_scale, width_scale)
  27.             img_width *= scale
  28.             img_height *= scale
  29.     return img_width, img_height


  30. def create_pdf(pdf_file, images, page_width, page_height):
  31.     """创建 pdf 文件,并添加图片"""
  32.     c = canvas.Canvas(pdf_file, pagesize=letter)

  33.     total_images = len(images)
  34.     for i, img_path in enumerate(images):
  35.         img_width, img_height = get_image_size(img_path, page_width, page_height)
  36.         x = (page_width - img_width) / 2
  37.         y = (page_height - img_height) / 2
  38.         c.drawImage(img_path, x, y, img_width, img_height)
  39.         c.showPage()

  40.         progress_bar(i + 1, total_images)

  41.     c.save()


  42. def create_pdf_from_path(img_folder, pdf_file=None):
  43.     """遍历给定路径,将路径下的图片添加进pdf,并将pdf保存在指定路径下"""
  44.     images = get_images(img_folder)
  45.     if images:
  46.         if not pdf_file:
  47.             pdf_name = os.path.basename(img_folder) + ".pdf"
  48.             pdf_file = os.path.join(img_folder, pdf_name)
  49.         page_width, page_height = letter
  50.         create_pdf(pdf_file, images, page_width, page_height)
  51.         return pdf_file
  52.     else:
  53.         print(f"{img_folder} 下没有图片,当前支持的图片格式为 jpg、png 和 bmp")
  54.         pause_exit()


  55. def progress_bar(current, total, bar_length=60):
  56.     """进度条"""
  57.     filled_length = int(bar_length * current // total)
  58.     bar = "+" * filled_length + "-" * (bar_length - filled_length)
  59.     percent = current / total * 100
  60.     sys.stdout.write(f"\r处理进度:|{bar}| {percent:.2f}%")
  61.     sys.stdout.flush()


  62. if __name__ == "__main__":
  63.     subprocess.run("title 目录内图片转PDF", shell=True)

  64.     try:
  65.         (*rest,) = sys.argv[1:]
  66.         if not rest:
  67.             img_folder = os.getcwd()  # 使用当前文件夹作为 img_folder
  68.             pdf_file = None
  69.         else:
  70.             img_folder, *pdf_file = rest
  71.             pdf_file = pdf_file[0] if pdf_file else None
  72.     except ValueError:
  73.         print("请提供图片文件夹路径作为参数")
  74.         pause_exit()

  75.     if not os.path.exists(img_folder):
  76.         print(f"{img_folder} 路径不存在!")
  77.         pause_exit()
  78.     elif not os.path.isdir(img_folder):
  79.         print(f"{img_folder} 不是一个文件夹!")
  80.         pause_exit()
  81.     else:
  82.         pdf_file = create_pdf_from_path(img_folder, pdf_file)

  83.         if pdf_file:
  84.             subprocess.run(["explorer", pdf_file])
  85.         else:
  86.             pause_exit()
复制代码



回复

使用道具 举报

精彩评论55

呵呵哒 发表于 2023-10-5 11:55:49 | 显示全部楼层
我要下载试试,我要下载试试...
回复 支持 反对

使用道具 举报

汨黎 发表于 2023-10-6 13:22:21 | 显示全部楼层
66666666666666666666
回复 支持 反对

使用道具 举报

lllll557 发表于 2023-10-7 14:48:53 | 显示全部楼层
00.000...000
回复 支持 反对

使用道具 举报

sdf 发表于 2023-10-8 16:15:25 | 显示全部楼层
非常不错,感谢分享!
回复 支持 反对

使用道具 举报

我去前面探探路 发表于 2023-10-9 17:41:56 | 显示全部楼层
感觉不错
回复 支持 反对

使用道具 举报

wwww 发表于 2023-10-9 21:05:10 | 显示全部楼层
6666666666
回复 支持 反对

使用道具 举报

sxy19931021 发表于 2023-10-10 00:28:24 | 显示全部楼层
豆腐干士大夫
回复 支持 反对

使用道具 举报

wwww 发表于 2023-10-10 03:51:37 | 显示全部楼层
谢谢楼主,,,收藏ing
回复 支持 反对

使用道具 举报

啦啦啦啦啦啦 发表于 2023-10-10 07:14:51 | 显示全部楼层
不错不错 支持下
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注我们:觅风论坛与你快乐分享

收藏本站

用心服务做个非盈利公益编程网站

www.eyyba.com

服务人:觅风论坛

Email:eyyba@foxmail.com

Powered by WWW.EYYBA.COM X3.4© 2001-2023 Inc.   版权所有   

觅风论坛  疆ICP备15020893号-1