ITPub博客

首页 > 数据库 > 数据库开发技术 > 合并多图并转为PDF文件

合并多图并转为PDF文件

原创 数据库开发技术 作者:derekwh 时间:2021-05-22 22:08:35 0 删除 编辑
前阵子去一个企业,这个企业的零碎发票太多,需要我全部拍照带回去打印存档,一天下来拍了几百张发票,晚上回来找了一些办法把这几百张发票合并成一个pdf方便第二天打印归档。

1.筛选出JPG文件,并降低像素

我是用苹果手机拍的发票,一张照片大概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学习杂记;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论
央企算法工程师,微信公众号: python数智工坊

注册时间:2021-03-14

  • 博文量
    305
  • 访问量
    162349