Python ppt

python生成ppt,数据源为html

from lxml import  html
from pptx import Presentation
from pptx.util import Inches
from pptx.dml.color import RGBColor
from pptx.enum.shapes import MSO_SHAPE

# HTML代码
html_content = """
<html>
    <body>
        <div style="background-color: red; position: absolute; left: 50px; top: 200px; width: 100px; height: 20px;">Red Box</div>
        <div style="background-color: blue; position: absolute; left: 50px; top: 250px; width: 150px; height: 20px;">Blue Box</div>
        <div style="background-color: green; position: absolute; left: 50px; top: 300px; width: 200px; height: 20px;">Green Box</div>
    </body>
</html>
"""

# 将HTML转化为XML结构
html_tree = html.fromstring(html_content)

# 设置不同颜色的RGB颜色
color_map = {
    'red': RGBColor(255, 0, 0),
    'blue': RGBColor(0, 0, 255),
    'green': RGBColor(0, 255, 0),
    'white': RGBColor(255, 255, 255)
}

# 初始化PowerPoint演示文稿
prs = Presentation()

# 第一页幻灯片添加标题和副标题
title_slide_layout = prs.slide_layouts[0]
title_slide = prs.slides.add_slide(title_slide_layout)
title_slide.shapes.title.text = "测试标题"
title_slide.placeholders[1].text = "测试副标题"


# 第二页幻灯片(prs.slide_layouts[5]:空白布局)添加标题
blank_slide_layout = prs.slide_layouts[5]
blank_slide = prs.slides.add_slide(blank_slide_layout)
blank_slide.shapes.title.text = "HTML转化成PowerPoint例子"

# 获取样式方法
def parse_style(style):
    styles = {}
    for item in style.split(';'):
        if ':' in item:
            key, value = item.split(':')
            styles[key.strip()] = value.strip()
    return styles

# 转换CSS像素到PowerPoint英寸方法
def px_to_inches(px):
    return px / 96  # Assuming 96 pixels per inch

# 循环HTML中的div元素
for div in html_tree.xpath('//div'):
    style = div.attrib.get('style', '')
    styles = parse_style(style)
    
    # 提取样式,如果没有设置背景色,则默认为白色
    bg_color = styles.get('background-color', 'white')
    width = int(styles.get('width', '100px').replace('px', ''))
    height = int(styles.get('height', '100px').replace('px', ''))
    left = int(styles.get('left', '0px').replace('px', ''))
    top = int(styles.get('top', '0px').replace('px', ''))
    
    # 将CSS像素到PowerPoint英寸
    width_in_inches = Inches(px_to_inches(width))
    height_in_inches = Inches(px_to_inches(height))
    left_in_inches = Inches(px_to_inches(left))
    top_in_inches = Inches(px_to_inches(top))
    
    # 获取填充颜色
    fill_color = color_map.get(bg_color.lower(), RGBColor(255, 255, 255))

    # 将形状添加到幻灯片中
    shape = blank_slide.shapes.add_shape(
        MSO_SHAPE.RECTANGLE,  # 枚举
        left=left_in_inches,
        top=top_in_inches,
        width=width_in_inches,
        height=height_in_inches,
    )
    # 设置形状的填充颜色
    shape.fill.solid()
    shape.fill.fore_color.rgb = fill_color

# 保存演示文稿
prs.save('output.pptx')
print("PowerPoint file 'output.pptx' has been created.")

效果图

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值