pptx 自动插入图片生成ppt文件

2022-03-29  本文已影响0人  倪桦
# -*- coding: utf-8 -*-
"""
Created on Tue Feb 22 22:35:47 2022
@author: Nhcode
"""
import os
from pptx import Presentation
from pptx.util import Inches, Pt, Cm, Mm
from pptx.enum.text import PP_ALIGN, MSO_ANCHOR, MSO_AUTO_SIZE
from pptx.dml.color import RGBColor
##self-func
def draw_imgBorder(img,borderwidth=10,col=0): #用于给图片添加黑框
    from PIL import Image
    img = Image.open(img)
    new_pic = Image.new('RGB', (img.size[0] + borderwidth, img.size[1] + borderwidth), color=col)##设置像素的图片宽度
    new_pic.paste(img, ( int(borderwidth / 2), int(borderwidth / 2) ))
    return new_pic

#设置工作路径
work_path = r'C:/Users/13321/Desktop/python-pptxTest'
os.chdir(work_path)

#get file
file_dir_L = []
for maindir, subdirs, files in os.walk("./JPG/"):
    for file in files:
        # 筛选目标后缀文件,这里筛选了“png,jpg,jpeg”
        if os.path.splitext(file)[1] in [".png", ".jpg", ".jpeg"]:
            file_dir_L.append(os.path.join(maindir,file))
            
###grouping all Picture_file
picFile_group = []
for i in range(0, len(file_dir_L), 6):
    picFile_group.append(file_dir_L[i:i+6])
    
#################################################my_main_func
##创建二进制IO流
from io import BytesIO 
pic_tmp = BytesIO() 

###初始化ppt对象
prs = Presentation()
prs.slide_height = Inches(9)
prs.slide_width = Inches(16)
###############################循环填充
for i in range(0,len(picFile_group),1):
    slide = prs.slides.add_slide(prs.slide_layouts[6]) #新建空ppt页
    #添加标题
    txBox = slide.shapes.add_textbox(Mm(5), Mm(5), Cm(10), Cm(1))
    txBox.text_frame.auto_size = MSO_AUTO_SIZE.SHAPE_TO_FIT_TEXT
    txBox.text_frame.word_wrap = False
    para = txBox.text_frame.paragraphs[0]
    para.text = 'FRKS12Xg'
    para.font.color.rgb = RGBColor(68, 114, 196)
    para.alignment = PP_ALIGN.LEFT #居左
    para.font.size = Pt(32)
    para.font.bold = True
    para.font.name = "等线"
    #############################
    ###填充图像插入参数
    pic_position_left_1 = 23
    pic_position_left_2 = 23
    pic_position_top_1 = 25
    pic_position_top_2 = (25+83)
    ####每页ppt插入图片
    for pic_index in range(0,len(picFile_group[i]),1):
        #图片处理
        my_file = picFile_group[i][pic_index]
        print('当前图片::'+my_file)
        new_pic = draw_imgBorder(my_file)
        ##清空缓存
        pic_tmp.truncate(0) 
        pic_tmp.seek(0)
        new_pic.save(pic_tmp,format='PNG') #图片对象载入内存
        #设置图片排版
        if (pic_index + 1) <= 3:
            slide.shapes.add_picture( pic_tmp, left= Mm(pic_position_left_1), top= Mm(pic_position_top_1), width= Mm(120),height=Mm (83))
            pic_position_left_1 += 120
        else:
            slide.shapes.add_picture( pic_tmp, left= Mm(pic_position_left_2), top= Mm(pic_position_top_2), width= Mm(120),height=Mm (83))
            pic_position_left_2 += 120

prs.save("myTsest_version_1.pptx")
上一篇下一篇

猜你喜欢

热点阅读