觅风论坛
标题:
目录内图片转PDF多图片打印助手Python源码
[打印本页]
作者:
逍遥我逍遥
时间:
2023-10-4 10:29
标题:
目录内图片转PDF多图片打印助手Python源码
转成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()
复制代码
作者:
呵呵哒
时间:
2023-10-5 11:55
我要下载试试,我要下载试试...
作者:
汨黎
时间:
2023-10-6 13:22
66666666666666666666
作者:
lllll557
时间:
2023-10-7 14:48
00.000...000
作者:
sdf
时间:
2023-10-8 16:15
非常不错,感谢分享!
作者:
我去前面探探路
时间:
2023-10-9 17:41
感觉不错
作者:
wwww
时间:
2023-10-9 21:05
6666666666
作者:
sxy19931021
时间:
2023-10-10 00:28
提示:
作者被禁止或删除 内容自动屏蔽
作者:
wwww
时间:
2023-10-10 03:51
谢谢楼主,,,收藏ing
作者:
啦啦啦啦啦啦
时间:
2023-10-10 07:14
不错不错 支持下
作者:
22222222
时间:
2023-10-10 10:38
抢楼了,前排第一次啊
作者:
few
时间:
2023-10-10 11:49
多上传一点源码
作者:
443651433..
时间:
2023-10-10 13:01
感谢分享LOL
作者:
大蒜先生
时间:
2023-10-10 14:13
感谢这个i资源
作者:
丶断弦
时间:
2023-10-10 15:25
阿斯蒂芬撒反对
作者:
我去前面探探路
时间:
2023-10-10 16:36
抢楼了,前排第一次啊
作者:
莫天浩
时间:
2023-10-10 18:45
回复查看隐藏内容
作者:
养猪大户
时间:
2023-10-10 20:53
厉害,我挺你,嘻嘻嘻。
作者:
养猪大户
时间:
2023-10-10 23:01
阿斯蒂芬撒反对
作者:
a491198538
时间:
2023-10-11 01:10
看看,到底好不好,想学学看看
作者:
pei002
时间:
2023-10-11 03:18
学习了!!!!
作者:
幻之灭
时间:
2023-10-11 04:29
学习下 学习下 学习下
作者:
幻之灭
时间:
2023-10-11 05:40
嘻嘻不错支持一个
作者:
hui861140
时间:
2023-10-11 06:51
不错哦 喜欢 嘿嘿
作者:
asd3186789
时间:
2023-10-11 08:02
路过还不错
作者:
xiaojian
时间:
2023-10-11 09:13
支持!!!!前排!!!!
作者:
zf123456
时间:
2023-10-11 19:22
学习了!!!!
作者:
lloveyouko
时间:
2023-10-12 05:30
支持你们一下下哈
作者:
唉唉唉
时间:
2023-10-12 15:38
感谢您的无私精神...
作者:
唉唉唉
时间:
2023-10-13 01:47
顶起 很好的帖
作者:
a895830975
时间:
2023-10-13 11:55
碉堡了!
作者:
林哥
时间:
2023-10-13 12:52
觅风论坛需要你
作者:
无聊玩玩
时间:
2023-10-13 13:49
还是看不懂,复杂
作者:
好萌哦
时间:
2023-10-13 14:47
学习了,这就去试试
作者:
4414513216511
时间:
2023-10-13 15:44
这个好好支持一下
作者:
黑崎一宇
时间:
2023-10-13 16:41
非常不错,感谢分享!
作者:
wang798403789
时间:
2023-10-14 17:27
我今天才找到这个论坛,非常高兴,加入到觅风老师的论坛
作者:
qwe144184
时间:
2023-10-15 18:14
学习中,看看代码啥情况
作者:
慌什么!
时间:
2023-10-16 19:01
支持!!!!!!
作者:
wang798403789
时间:
2023-10-17 19:47
顶起 很好的帖
作者:
sdf
时间:
2023-10-18 20:34
看帖子的要发表下看法
作者:
SDS
时间:
2023-10-18 21:04
多上传一点源码
作者:
图个简单
时间:
2023-10-18 21:35
人设人阿松大
作者:
图个简单
时间:
2023-10-18 22:05
谢谢分享,下载测试
作者:
图个简单
时间:
2023-10-18 22:36
学习中,看看代码啥情况
作者:
asd3186789
时间:
2023-10-18 23:06
很给力。。。。很喜欢
作者:
jhasgvcah
时间:
2023-10-19 04:46
00.000...000
作者:
赵金龙
时间:
2023-10-19 10:26
学习一下!十分感谢
作者:
鸟文是帅逼
时间:
2023-10-19 16:05
顶起 很好的帖
作者:
霸王喝粥
时间:
2023-10-19 21:45
路过还不错
作者:
赵金龙
时间:
2023-10-20 03:25
藕是来打酱油滴...
作者:
星梦无痕
时间:
2023-10-20 04:36
我今天才找到这个论坛,非常高兴,加入到觅风老师的论坛
作者:
特拉斯●狗蛋儿
时间:
2023-10-20 05:46
嘻嘻不错支持一个
作者:
216341564213
时间:
2023-10-20 06:57
不错!顶LZ
作者:
咬牙坚持
时间:
2023-10-20 08:08
赞一个!
作者:
sada
时间:
2023-10-20 09:19
前来围观,LZ好样的!
欢迎光临 觅风论坛 (https://www.eyyba.com/)
Powered by Discuz! X3.4