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.")
效果图




















