使用 python 将 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 RGBColorclass 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 = Noneself.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:returnself.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)returnself.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 = Nonecurrent_level = 0for 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.titletitle.text = title_textcurrent_level = 1elif current_slide and level > current_level:self.add_subtitle(current_slide, title_text, level - current_level)current_level = levelelse:current_slide = prs.slides.add_slide(prs.slide_layouts[1])title = current_slide.shapes.titletitle.text = title_textcurrent_level = levelelse:if current_slide:content = current_slide.placeholders[1]p = content.text_frame.add_paragraph()p.text = linep.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_textp.level = indent_levelp.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 文件的层次结构一致,更好地组织内容。

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/28055.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[Vulnhub]Wintermute LFI+SMTP+Screen+Structv2-RCE+Lxc逃逸

概要 靶机 192.168.8.104 信息收集 $ nmap 192.168.8.103 --min-rate 1000 -sC -sV 结果: Starting Nmap 7.92 ( https://nmap.org ) at 2024-06-15 05:54 EDT Nmap scan report for 192.168.8.103 (192.168.8.103) Host is up (0.035s latency). Not shown: 997 closed t…

亚马逊测评自养号与机刷的区别

前言: 在亚马逊运营的领域中,经常有人问:测评自养号就是机刷吗?它们两者有什么区别?做自养号太慢、太需要时间了,如果用机刷的话,会不会简单高效一点? 在这篇文章中,我…

SpringCloud 网关Gateway配置并使用

目录 1 什么是网关? 2 Gateway的使用 2.1 在其pom文件中引入依赖 2.2 然后gateway配置文件中配置信息 2.3 启动网关微服务 3 网关处理流程 4 前端-网关-微服务-微服务间实现信息共享传递 1 什么是网关? 网关:就是网络的关口&#xff…

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 游戏表演赛分队(100分) - 三语言AC题解(Python/Java/Cpp)

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 📎在线评测链接 游戏表演赛分队(100分) 🌍 评测功能需要订阅专栏后私信联系…

Python | Leetcode Python题解之第148题排序链表

题目: 题解: class Solution:def sortList(self, head: ListNode) -> ListNode:def merge(head1: ListNode, head2: ListNode) -> ListNode:dummyHead ListNode(0)temp, temp1, temp2 dummyHead, head1, head2while temp1 and temp2:if temp1.v…

现代信号处理14_基于蒙特卡洛的信号处理(CSDN_20240616)

Monte Carlo/Simulation方法 在统计上,样本数量是一个很重要的问题,在处理问题(如计算样本均值)的过程中,样本数量越多越好。但是在实际中,样本往往是稀缺的,获取数据就要付出代价。在贝叶斯理论…

SringBoot 如何使用HTTPS请求及Nginx配置Https

SringBoot 如何使用HTTPS请求及Nginx配置Https SringBoot 如何使用HTTPS请求生成证书导入证书及配制创建配置类将pfx转成.key和.pem Nginx 安装SSL依赖./configure 安装依赖编译安装完openssl后报了新错 Nginx配置 SringBoot 如何使用HTTPS请求 生成证书 由于业务数据在传输过…

重新安装TortoiseGit后提示权限错误问题解决

今天在Windows11系统中下载安装使用TortoiseGit可视化Git工具,进行代码提交管理。 由于电脑之前是一位开发人员在使用,所以曾经安装使用过这个工具。 重新安装好软件后,在coding网站中复制代码路径后,在本地目录通过鼠标右键选择…

每日一练——有效的括号

20. 有效的括号 - 力扣&#xff08;LeetCode&#xff09; 错误记录 #include<stddef.h> #include<stdlib.h> #include<assert.h> #include<stdbool.h>typedef char STDataType;typedef struct Stack {STDataType* a;int capacity;int top; } Stack;vo…

驾校在线考试系统源码 手机+PC+平板自适应

Thinkphp在线考题源码 驾校在线考试系统 手机PC平板 自适应&#xff0c;机动车驾驶培训学校驾校类网站源码带手机端 运行环境&#xff1a;phpmysql 内附安装说明 驾校在线考试系统源码 手机PC平板自适应

[C++]使用C++部署yolov10目标检测的tensorrt模型支持图片视频推理windows测试通过

【测试通过环境】 vs2019 cmake3.24.3 cuda11.7.1cudnn8.8.0 tensorrt8.6.1.6 opencv4.8.0 【部署步骤】 获取pt模型&#xff1a;https://github.com/THU-MIG/yolov10训练自己的模型或者直接使用yolov10官方预训练模型 下载源码&#xff1a;https://github.com/laugh12321/yol…

波卡近期活动一览| Polkadot Decoded 2024 重磅来袭,300 万 DOT 将用于 DeFi 增长

Polkadot 生态近期活动精彩纷呈&#xff0c;线上线下火热进行中&#xff01;此外&#xff0c;Polkadot 2.0 的关键升级即将到来&#xff0c;Gavin Wood 博士也将在最新访谈节目中分享更多关于波卡的未来发展蓝图。波卡 DAO 通过提案&#xff0c;分配 300 万 DOT 支持 DeFi 生态…

房地产房型展示信息小程序的内容是什么

地产业规模之大且品牌众多&#xff0c;还有房屋租赁、中介等&#xff0c;无论开发商公司还是衍生行业商家都需要多渠道宣传品牌和客户触达沟通转化&#xff0c;除了线下各种传单&#xff0c;线上也是主要场景&#xff0c;通过各种连接来达到相应目标。 也因此需符合平台生态开…

读AI新生:破解人机共存密码笔记01以史为鉴

1. 科学突破是很难预测的 1.1. 20世纪初&#xff0c;也许没有哪位核物理学家比质子的发现者、“分裂原子的人”欧内斯特卢瑟福&#xff3b;Ernest Rutherford&#xff3d;更为杰出 1.1.1. 卢瑟福早就意识到原子核储存了巨大的能量&#xff0c;然而&#xff0c;主流观点认为开…

Qt 6.13

作业&#xff1a; #include "mywidget.h"mywidget::mywidget(QWidget *parent): QWidget(parent) {this->setStyleSheet("background-color:white");this->resize(600,600);this->setWindowFlag(Qt::FramelessWindowHint);this->setWindowTit…

Opencv数一数有多少个水晶贴纸?

1.目标-数出有多少个贴纸 好久没更新博客了&#xff0c;最近家里小朋友在一张A3纸上贴了很多水晶贴纸&#xff0c;要让我帮他数有多少个&#xff0c;看上去有点多&#xff0c;贴的也比较随意&#xff0c;于是想着使用Opencv来识别一下有多少个。 原图如下&#xff1a; 代码…

centos7系统使用docker-compose安装部署jenkins

CentOS7系统使用docker-compose安装部署jenkins&#xff0c;并实现前后端自动构建 记录一次在给公司部署jenkins的真实经历&#xff0c;总结了相关经验 1.准备环境 1.java 由于最新的jenkins需要jdk11以上才能支持&#xff0c;而系统里的jdk是1.8的&#xff0c;因此等jenkins…

vue项目问题汇总

1.el-select&#xff1a; 下拉框显示到了top:-2183px , 添加属性 :popper-append-to-body"false" 2. el-upload: 选过的文件在使用过后记得清空&#xff0c;因为如果有limit1的时候&#xff0c;没有清空会导致不触发onchange 使用自定义上传方法http-request的时…

Swift开发——输出格式化字符

Swift语言是开发iOS和macOS等Apple计算机和移动设备系统应用程序的官方语言。Swift语言是一种类型安全的语言,语法优美自然,其程序从main.swift文件开始执行,程序代码按先后顺序执行,同一个工程的程序文件中的类和函数直接被main.swift文件调用,除了main.swift文件外,工程…

工业自动化领域常见的通讯协议

工业自动化领域常见的通讯协议&#xff0c;包括PROFINET、PROFIBUS、Modbus、Ethernet/IP、CANopen、DeviceNet和BACnet。通过分析这些协议的技术特点、应用场景及优势&#xff0c;比较它们在工业自动化中的性能和适用性&#xff0c;帮助选择最合适的协议以优化系统性能和可靠性…