多张图片或PDF电子发票怎么用PYTHON打印在一张A4纸上


from os import listdir
from os.path import join
import fitz,os
from PIL import Image
import shutil,time

fapiao= 'D:\\python\\发票\\1'
pngs = 'D:\\python\\发票\\2'
hebing = 'D:\\python\\发票\\3'
IMAGE_width = 1050 # 新图片A4纸的大小
IMAGE_height = 1486 # 新图片A4纸的大小
IMAGE_ROW = 2 # 图片间隔,也就是合并成一张图后,一共有几行
IMAGE_COLUMN = 1 # 图片间隔,也就是合并成一张图后,一共有几列
re_width = int(IMAGE_width / IMAGE_COLUMN) # 合并后每张发票的大小
re_height = int(IMAGE_height / IMAGE_ROW) # 合并后每张发票的大小

all_files = [fn for fn in listdir(fapiao)]

if not os.path.exists(pngs):
    os.makedirs(pngs)
if not os.path.exists(hebing):
    os.makedirs(hebing)
for fn in all_files:
    # 先获取PDF信息 ,生成图片
    if fn.endswith('pdf'):
        pdf = fitz.Document(join(fapiao,fn))
        page = pdf[0]  # 获得每一页的对象
        trans = fitz.Matrix(2.0, 2.0).prerotate(0)
        pm = page.get_pixmap(matrix=trans, alpha=False)  # 获得每一页的流对象
        img_path = join(pngs,fn.replace('pdf','png'))
        print(img_path)
        pm.save(img_path) # 保存图片
        pdf.close()
        """
        其它格式
        elif fn.endswith('jpg'):
            pm = Image.open(join(fapiao,fn))
            pm.save(join(pngs,fn.replace('jpg','png')))
        elif fn.endswith('png'):
            shutil.copy(join(fapiao,fn),join(pngs,fn))
        """
k = 0

png_files = [fn for fn in listdir(pngs)]
for i in range(1,len(png_files)+1):
    print(re_height)
    from_image = Image.open(join(pngs , png_files[i-1])).resize((re_width, re_height),Image.ANTIALIAS)
    if i % IMAGE_ROW == 1:
        k = k + 1
        filename = '%s-%s-%s-%s.png' % (time.localtime().tm_mday,time.localtime().tm_hour,time.localtime().tm_min,k)
        to_image = Image.new('RGB', (IMAGE_width, IMAGE_height) , '#ffffff') #创建一个新图
    to_image.paste(from_image, (0, re_height*(i%IMAGE_ROW)))
    to_image.save(join(hebing,filename))






  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值