使用 python 将 Markdown 文件转换为 ppt演示文稿

Markdown转PPT工具

在这篇博客中,我们将展示如何使用 wxPython 创建一个简单的图形用户界面 (GUI),以将 Markdown 文件转换为 PowerPoint 演示文稿。我们将利用 markdown2 模块将 Markdown 转换为 HTML,并使用 python-pptx 模块将 HTML 内容转换为 PowerPoint 幻灯片。本教程将演示如何通过解析 Markdown 文件的层次结构,以大纲模式生成 PPT。
C:\pythoncode\new\markdownTOPPT.py

先决条件

在开始之前,请确保您已经安装了以下 Python 库:

pip install wxpython python-pptx markdown2

步骤 1:创建 GUI 应用

首先,我们需要创建一个简单的 wxPython 应用程序,让用户选择 Markdown 文件并启动转换过程。

import wx
import markdown2
from pptx import Presentation
from pptx.util import Inches, Pt
from pptx.enum.text import PP_ALIGN
from pptx.dml.color import RGBColor

class MarkdownToPPTApp(wx.Frame):
    def __init__(self, parent, title):
        super(MarkdownToPPTApp, self).__init__(parent, title=title, size=(400, 200))
        
        panel = wx.Panel(self)
        vbox = wx.BoxSizer(wx.VERTICAL)

        self.open_button = wx.Button(panel, label='Open Markdown File')
        self.open_button.Bind(wx.EVT_BUTTON, self.on_open_file)
        vbox.Add(self.open_button, flag=wx.EXPAND|wx.ALL, border=10)

        self.convert_button = wx.Button(panel, label='Convert to PPT')
        self.convert_button.Bind(wx.EVT_BUTTON, self.on_convert)
        vbox.Add(self.convert_button, flag=wx.EXPAND|wx.ALL, border=10)

        panel.SetSizer(vbox)

        self.markdown_file = None

        self.Centre()
        self.Show(True)
    
    def on_open_file(self, event):
        with wx.FileDialog(self, "Open Markdown file", wildcard="Markdown files (*.md)|*.md",
                           style=wx.FD_OPEN | wx.FD_FILE_MUST_EXIST) as fileDialog:

            if fileDialog.ShowModal() == wx.ID_CANCEL:
                return

            self.markdown_file = fileDialog.GetPath()
            wx.MessageBox(f'Selected file: {self.markdown_file}', 'Info', wx.OK | wx.ICON_INFORMATION)
    
    def on_convert(self, event):
        if not self.markdown_file:
            wx.MessageBox('Please select a Markdown file first.', 'Error', wx.OK | wx.ICON_ERROR)
            return

        self.convert_markdown_to_ppt(self.markdown_file)
        wx.MessageBox('Conversion successful!', 'Info', wx.OK | wx.ICON_INFORMATION)
    
    def convert_markdown_to_ppt(self, markdown_file):
        with open(markdown_file, 'r', encoding='utf-8') as file:
            markdown_content = file.read()

        html_content = markdown2.markdown(markdown_content)
        lines = markdown_content.split('\n')
        
        prs = Presentation()

        current_slide = None
        current_level = 0

        for line in lines:
            if line.startswith('#'):
                level = line.count('#')
                title_text = line.strip('# ').strip()

                if level == 1:
                    current_slide = prs.slides.add_slide(prs.slide_layouts[1])
                    title = current_slide.shapes.title
                    title.text = title_text
                    current_level = 1
                elif current_slide and level > current_level:
                    self.add_subtitle(current_slide, title_text, level - current_level)
                    current_level = level
                else:
                    current_slide = prs.slides.add_slide(prs.slide_layouts[1])
                    title = current_slide.shapes.title
                    title.text = title_text
                    current_level = level
            else:
                if current_slide:
                    content = current_slide.placeholders[1]
                    p = content.text_frame.add_paragraph()
                    p.text = line
                    p.font.size = Pt(18)

        output_file = markdown_file.replace('.md', '.pptx')
        prs.save(output_file)
    
    def add_subtitle(self, slide, subtitle_text, indent_level):
        content = slide.placeholders[1]
        p = content.text_frame.add_paragraph()
        p.text = subtitle_text
        p.level = indent_level
        p.font.size = Pt(18)
        p.font.color.rgb = RGBColor(0, 0, 0)

if __name__ == '__main__':
    app = wx.App(False)
    frame = MarkdownToPPTApp(None, title='Markdown to PPT Converter')
    app.MainLoop()

说明

  1. 选择文件:用户点击“Open Markdown File”按钮选择 Markdown 文件。
  2. 转换文件:用户点击“Convert to PPT”按钮进行转换。
  3. Markdown 转 HTML:使用 markdown2.markdown() 将 Markdown 内容转换为 HTML。
  4. 创建 PPT:使用 python-pptx 创建一个新的 PowerPoint 演示文稿,并根据 Markdown 文件的层次结构创建幻灯片和子标题。

步骤 2:解析 Markdown 文件

convert_markdown_to_ppt 方法中,我们读取 Markdown 文件的内容,并将其按行分割。我们检查每一行是否是标题,根据标题级别创建相应的幻灯片或子标题。

步骤 3:创建 PowerPoint 幻灯片

我们使用 python-pptx 创建 PowerPoint 幻灯片。对于每个一级标题 (#),我们创建一个新的幻灯片。对于每个次级标题(##, ### 等),我们将其添加为当前幻灯片的子标题。

步骤 4:添加子标题

add_subtitle 方法中,我们向当前幻灯片添加子标题,并设置其缩进级别和字体大小。

结论

通过上述步骤,我们创建了一个简单的 GUI 应用程序,可以将 Markdown 文件转换为 PowerPoint 演示文稿。该应用程序通过解析 Markdown 文件的层次结构,以大纲模式生成 PPT,使幻灯片内容结构清晰、层次分明。这种方法确保 PPT 演示文稿的结构与 Markdown 文件的层次结构一致,更好地组织内容。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值