豁然高

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

利用python3将已有的某几个pptx文件的某些slides来生成新的pptx文件的范例

复制代码
#!/bin/python
# -*- coding: utf-8 -*-

from pptx import Presentation
import copy
import datetime
import sys

def copy_slide(prs_base, prs_add, add_index_no, base_master_no, base_layout_no):
    source = prs_add.slides[int(add_index_no)]
    dest = prs_base.slides.add_slide(prs_base.slide_masters[int(base_master_no)].slide_layouts[int(base_layout_no)])

    for placeholder in dest.shapes.placeholders:
        if placeholder.has_text_frame and placeholder.text_frame.text == "":
            sp = placeholder._sp
            sp.getparent().remove(sp)

    for shape in source.shapes:
        newel = copy.deepcopy(shape.element)
        dest.shapes._spTree.insert_element_before(newel, 'p:extLst')

    for key, value in source.part.rels.items():
        if not "notesSlide" in value.reltype and not "slideLayout" in value.reltype:
            dest.part.rels.add_relationship(value.reltype, value._target, value.rId)
    return dest

PATH_PPTX = "/var/www/borg/public/file/proposal/pptx/"
PATH_TEMP = "/var/www/borg/public/file/proposal/tmp/"

prs_base = Presentation(PATH_PPTX + "base.pptx")

try:
    value = sys.argv
    count = 0
    for arg in value:
        if count == 0:
            count+=1
        else:
            params = arg.split(":")
            prs_1 = Presentation(PATH_PPTX + params[0])
            copy_slide(prs_base, prs_1, params[1], params[2], params[3])
            del prs_1

    save_name = "merged" + '_{0:%Y%m%d%H%M%S}'.format(datetime.datetime.now()) + ".pptx"
    prs_base.save(PATH_TEMP + save_name)

    print("success")
    print(save_name)
except Exception as e:
    print("error")
    print(e)
复制代码

 

需要安装python3, pip, python-pptx

yum install python3

cd /usr/local/src
wget wget https://bootstrap.pypa.io/get-pip.py
python3 get-pip.py

python3 -m pip install python-pptx

posted on   豁然高  阅读(885)  评论(0编辑  收藏  举报

编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示