使用python批量处理图片并转成pdf格式

文摘   2024-10-03 17:31   湖北  
其他部门同事在近期的一次企业拜访中,收集了该企业大量零散的发票。为了高效处理这些发票,采用了拍照的方式将它们全部记录下来。一天下来,共拍摄了数百张发票照片。他询问我是否可以使用python快速将这些发票合并成一个pdf文件方便存档和打印。

1.降低像素

同事是用苹果手机拍的发票,一张照片大概5M左右,直接合并成pdf太大了,传到电脑里发现手机里不只有JPG文件,还有几百个mov文件。大概是下图这个样子,我是绝对不可能一个个点开去一张张打印发票的,一天下来还不一定能全部打印完,也容易出错。

代码逻辑是:先选出文件夹里的JPG文件,降低像素(大概300k左右) 

from PIL import Image  
import glob, os     
#降低像素,方便后面合并,
for files in glob.glob(r'D:\发票\fp\*.JPG'):   
    filepath,filename = os.path.split(files)   
    filterame,exts = os.path.splitext(filename)     
    opfile = r"D:\发票\cs" #输出路径 
    im = Image.open(files)   
    w,h = im.size     
    im_ss = im.resize((int(w*0.5), int(h*0.5)))   
    im_ss.save(opfile+"\\"+ filterame+'.JPG')   #注意路径要双斜杠或者反斜杠
因为发票确实太多了,上面代码跑了17秒。

2.合并成PDF

搭建一个函数,方便以后调用,只需要改读取路径和输出路径即可。
from fpdf import FPDF
from PIL import Image
import os
def makePdf(pdfFileName,listPages,dizhi):
   cover = Image.open(dizhi+ listPages[0])
   width, height = cover.size
   pdf = FPDF(unit = "pt", format = [width, height])
   for page in listPages:
    pdf.add_page()
    pdf.image(dizhi+page,0, 0)
   pdf.output(pdfFileName, "F")
现在只需要调用函数了。

合并用了29秒。pdf已经生成好了,只需要打印pdf文件就可以打印出几百张发票了,任务完成。

前面也可以做个操作方便以后存档,把文件里的JPG全部移到新文件里。直接上代码吧:

import os
import glob
import shutil
path = r'D:\发票\fp'     #原始文件路径
path_new = r'D:\发票\fl'   #目标文件路径
list_name = os.listdir(path)
print(list_name)
print(len(list_name))
for f in os.listdir(path):
   filename = os.path.join(path,f)
   if f.split(".")[-1] == "JPG":
       print(f)
       shutil.move(filename,path_new)
print("done")


Python学习杂记
数据分析与挖掘、运筹优化、机器学习、AI 、数据可视化等。
 最新文章