有个朋友是一个初中老师。嗯,教学行政两手抓的那种初中老师。

一天晚上突然微信问我,怎么把图片转成PDF。懵了一下,这个直接打印成PDF不就可以了?

遂告诉他,结果感觉两个人不是一个世界的:

好不容易教他把图片放Word里面打印,结果发现他的需求并不止于此:

没辙,送佛送到西呗。继续挖他的需求:

还有需要特殊处理的地方:

提炼了一下他的需求:有两百多张用手机拍的学生XXX档案资料;

已经按照每个学生的名字编好了号;

需要每个学生按照顺序 + 公共的图片,组合成一个新的PDF文件;

生成的文件体积大小需要在20MB以内;

现状是这样的图片文件:

需要按照一定的图片顺序进行排序并转换PDF。

总结起来,也就是处理文件,将图片拼接组合成PDF。这个小需求,用Python实现起来轻轻松松。

梳理一下这个任务的几个关键点:

缩放图片

因为图片是用手机拍摄的,现有的手机动不动就是几千万的像素。拍一张照片,十几兆的大小是逃不了的。而需求最终每一个PDF的大小不超过20MB,缩放图片是必须要做的。

在 Python 中处理图片很经典的第三方模块是 Pillow,通过它可以对图像进行各种操作,当然也不限于缩小图片。

# 缩放图片

dir_list = os.listdir(dir_path)

new_path = r"D:\Documents\Tencent Files\3280350050\FileRecv\new"

for f in dir_list:

if f.endswith('.jpg'):

img = Image.open(dir_path+'\\'+f)

new_size = img.resize((1401,1867))

new_size.save(new_path + '\\' + f)

上述代码就把图片缩小到了1401*1867像素大小。

图片转PDF

在这个任务里面,核心的需求是把图片转成 PDF 格式的文件。Python 中图片转 PDF 的功能有很多模块可以实现,在此州的先生选用的是 img2pdf。

直接调用img2pdf.convert()方法,将图片路径或图片列表路径作为参数传递进去,就可以得到一个转换好的 PDF 文件对象。

# 新建单个PDF文件with open(new_path+'\\'+'{}_1.pdf'.format(name),'wb')

as pdf_file: a4inpt = (img2pdf.mm_to_pt(210), img2pdf.mm_to_pt(297))

# 创建A4纸格式 layout_fun = img2pdf.get_layout_fun(a4inpt)

# 设置A4纸格式 # PDF写入图片

pdf_file.write( img2pdf.convert( img_list, # layout_fun=layout_fun ) )

图像排列规则

因为需要按照一定的顺序对照片进行排序,然后还有一个特殊的情况,所以在对原始图片进行遍历的时候,需要进行一番处理,最后生成每一个人的图片的列表。

# 生成单个名称的图片列表

for name in sorted(name_list,reverse=False):

print(ame)

if name == '***': # 特殊情况学生的名字

img_list = []

for f in dir_list:

print(f)

file_name, file_suffix = f.split('.')

file_sort = int(file_name[-1])

if name == file_name[:-1]:

if file_sort == 3:

img_list.insert(4, new_path + '\\' + f)

else:

img_list.insert(int(file_name[-1]) - 1, new_path + '\\' + f)

img_list.insert(1, new_path + '\\' + '公共1.jpg')

img_list.insert(3, new_path + '\\' + '公共2.jpg')

img_list.insert(9, new_path + '\\' + '公共4.jpg')

img_list.insert(10, new_path + '\\' + '公共5.jpg')

img_list.insert(11, new_path + '\\' + '公共6.jpg')

print(img_list)

else:

img_list = []

for f in dir_list:

print(f)

file_name,file_suffix = f.split('.')

file_sort = int(file_name[-1])

if name == file_name[:-1]:

if file_sort == 3:

img_list.insert(5,new_path+'\\'+f)

else:

img_list.insert(int(file_name[-1])-1,new_path+'\\'+f)

img_list.insert(1,new_path+'\\'+'公共1.jpg')

img_list.insert(3, new_path + '\\' + '公共2.jpg')

img_list.insert(4, new_path + '\\' + '公共3.jpg')

img_list.insert(9, new_path + '\\' + '公共4.jpg')

img_list.insert(10, new_path + '\\' + '公共5.jpg')

img_list.insert(11, new_path + '\\' + '公共6.jpg')

print(img_list)

完整步骤

在对任务的关键点有了认识之后,我们按照流程,就可以轻松完成这个任务。遍历原始图片文件夹,缩小图片,并将其另存到另一个文件夹;

遍历新图片的文件夹,生成除了公共图片之外的所有学生姓名列表;

遍历学生姓名列表,按照指定的图片排序规则,生成每个学生的图片列表;

3.1 生成每个学生的图片列表之后,新建一个文件,将图片列表转为PDF;

以上4步,就完成了这个手工操作浪费时间且令人抓狂的任务。运行代码不出一分钟,所有学生的PDF文件都已生成完成:

算上找模块的时间,花在代码上的时间满打满算20分钟。

瞬间把一个快炸毛的老师:

的毛给顺了下去:

python老师 课时费_花10分钟写一个Python脚本,搞定了初中老师一下午的工作相关推荐

  1. python 帮助教师_花10分钟写一个Python脚本,搞定了初中老师一下午的工作

    有个朋友是一个初中老师.嗯,教学行政两手抓的那种初中老师. 一天晚上突然微信问我,怎么把图片转成PDF.懵了一下,这个直接打印成PDF不就可以了? 遂告诉他,结果感觉两个人不是一个世界的: 好不容易教 ...

  2. python k线合成_手把手教你写一个Python版的K线合成函数

    手把手教你写一个Python版的K线合成函数 在编写.使用策略时,经常会使用一些不常用的K线周期数据.然而交易所.数据源又没有提供这些周期的数据.只能通过使用已有周期的数据进行合成.合成算法已经有一个 ...

  3. 自行车车把会吧车刮坏吗_花10分钟即可开始使用车把

    自行车车把会吧车刮坏吗 by Wing Puah 永帕(Wing Puah) 花10分钟即可开始使用车把 (Take 10 minutes to get started with Handlebars ...

  4. echart 饼图每一块间隙_花10分钟做酱香饼,简单方便又美味,酥脆咸香比买的还要好吃...

    花10分钟做酱香饼,简单方便又美味,酥脆咸香比买的还要好吃 前几年,在单位附近有一家只做酱香饼的小店,刚开张的时候排很长队,我为了一块酱香饼排队半小时.后来买酱香饼的人少了,我三天两头买一块酱香饼解馋 ...

  5. python 全部缩进一行_每天三分钟一起学python之(三)python的基本语法

    每天三分钟,我们一起学python.在上一期PyCharm的安装及常用配置中,给大家介绍了PyCharm的安装方法和一些常用的配置.安装过PyCharm之后,我们就可以开始编写python程序了,今天 ...

  6. 网站添加用户名和密码_实测 | 10分钟搭建一个 WordPress 网站,便宜、快捷、稳定...

    经过我实测,大概10分钟左右建好了一个 WordPress 站点,站点为:boyzcl.com,感兴趣的可以去看看,目前还没有配置WP主题,后续会同步一下文章,以及某些不太方便说的内容. 不过我的10 ...

  7. 怎么把python程序发给别人_想把你写的Python程序发给别人用?打包成exe啊!

    前言 大家好,欢迎来到编程教室! 当你学了一段时间Python,终于写出一个小游戏的时候,是不是很想发给你的小伙伴分享一下你的成果?但是,如果直接将xx.py文件发给别人,别人通常是不能直接运行的,他 ...

  8. python老师 课时费_学生自学Python去面试,月薪为何仅3K?面试官问题解析!

    顾翔老师作品<软件测试技术实战 设计.工具及管理> 京东购书地址:https://item.jd.com/12082665.html 微信购书地址: http://detail.youza ...

  9. 花40分钟写一个-CBIR引擎-代码公开

          浏览网页的时候发现一篇不错的文章"用Python和OpenCV创建一个图片搜索引擎的完整指南"http://python.jobbole.com/80860/.作者在浏 ...

最新文章

  1. Linux shell 条件判断if
  2. idea样式报错_来自强迫症患者的IDEA设置
  3. python多线程写同一个文件_Python多线程快速写入文件,python,飞速
  4. 11-13SQLserver基础--数据库之事务
  5. 内镜手术机器人行业调研报告 - 市场现状分析与发展前景预测
  6. 计算机硬盘 安装,电脑新硬盘如何安装系统
  7. 奥鹏刷分软件_奥鹏学员挂积分器专业代挂积分全部免费使用
  8. matlab排序算法,相同位置返回元素排名
  9. Vue3简单实现元素周期表
  10. wincc报表日报表实例_wincc报表例程
  11. 【用来参考】AndroidQ SystemUI之锁屏加载(上)滑动锁屏
  12. Android打开自启动设置页面
  13. 冬天,这6款养生粥,你是一定要喝的
  14. 为什么我推荐你用语雀记笔记?
  15. 核磁谱图分析步骤_核磁一般氢谱和碳谱的解析步骤
  16. #{}和¥{}的区别?
  17. 考研线性代数手写笔记3 向量
  18. 计算机考研复试重点题目
  19. Heavy Blue Writeup
  20. 抗滑桩弹性计算方法_抗滑桩类型、设计及计算,这样讲解容易多了吧!

热门文章

  1. tpcc-mysql安装测试与使用生成对比图
  2. 寒假作业3(传说中的写软件)
  3. Google Zxing 生成二维码
  4. webbrowser代理c#代码实现
  5. HDU4268 2012ACM长春赛区网络赛 Alice and Bob
  6. 亚马逊率先用Sun新推OpenSolaris系统
  7. Bailian2738 实数加法【数学】
  8. Java —— 正则表达式
  9. 常见信号的模拟仿真(matlab)(spike signal)
  10. 区间树(segment tree)