使用 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()
说明
- 选择文件:用户点击“Open Markdown File”按钮选择 Markdown 文件。
- 转换文件:用户点击“Convert to PPT”按钮进行转换。
- Markdown 转 HTML:使用
markdown2.markdown()
将 Markdown 内容转换为 HTML。 - 创建 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 文件的层次结构一致,更好地组织内容。
相关文章:
使用 python 将 Markdown 文件转换为 ppt演示文稿
在这篇博客中,我们将展示如何使用 wxPython 创建一个简单的图形用户界面 (GUI),以将 Markdown 文件转换为 PowerPoint 演示文稿。我们将利用 markdown2 模块将 Markdown 转换为 HTML,并使用 python-pptx 模块将 HTML 内容转换为 PowerPoint 幻…...
Arnoldi Iteration 思考
文章目录 1. 投影平面2. Arnoldi Iteration3. python 代码 1. 投影平面 假设我们有一个向量q,我们需要关于向量q,构建一个投影平面P,使得给定任何向量v,可以通过公式 p P v pPv pPv,快速得到向量v在投影平面P上的投影向量p. 计算向量内积,…...
【Kafka】SpringBoot整合Kafka详细介绍及代码示例
Kafka介绍 Apache Kafka是一个分布式流处理平台。它最初由LinkedIn开发,后来成为Apache软件基金会的一部分,并在开源社区中得到了广泛应用。Kafka的核心概念包括Producer、Consumer、Broker、Topic、Partition和Offset。 Producer:生产者&a…...
C++ 质数因子分解
描述 功能:输入一个正整数,按照从小到大的顺序输出它的所有质因子(重复的也要列举)(如180的质因子为2 2 3 3 5 ) 输入描述: 输入一个整数 输出描述: 按照从小到大的顺序输出它的所有质数的…...
laravel版本≥ 8.1
laravel10 php ≥ 8.1 且 ≤ 8.3? 8.1 < php < 8.3PHP版本要求在 8.1 到 8.3 之间,包括这两个版本。具体来说:"≥ 8.1" 表示 PHP 的版本至少是 8.1,也就是说 8.1 及以上的版本都可以。 "≤ 8.3" 表示 P…...
【iOS】MRC下的单例模式批量创建单例
单例模式的介绍和ARC下的单例请见这篇:【iOS】单例模式 目录 关闭ARC环境MRC下的单例ARC下的单例批量创建单例Demo 关闭ARC环境 首先关闭ARC环境,即打开MRC: 或是指定某特定目标文件为非ARC环境: 双击某个类文件,指定…...
计算机网络期末复习
今天考专四,环境都蛮好的,试卷也很新,老师人也不错,明年再来。 又到期末考试咯,大家复习没有?还没复习啊?还不复???? 目录 第一章 1-02 试简述…...
python写一个获取竞品信息报告
要编写一个获取竞品信息报告的Python程序,首先需要明确您想要获取的竞品信息以及数据来源。在这个示例中,我将展示如何从网页提取竞品信息,并编写一个简单的报告。 假设您想要获取以下竞品信息: 1. 产品名称 2. 产品价格 3. 产品特…...
一文彻底理解机器学习 ROC-AUC 指标
在机器学习和数据科学的江湖中,评估模型的好坏是非常关键的一环。而 ROC(Receiver Operating Characteristic)曲线和 AUC(Area Under Curve)正是评估分类模型性能的重要工具。 这个知识点在面试中也很频繁的出现。尽管…...
【二】【动态规划NEW】91. 解码方法,62. 不同路径,63. 不同路径 II
91. 解码方法 一条包含字母 A-Z 的消息通过以下映射进行了 编码 : ‘A’ -> “1” ‘B’ -> “2” … ‘Z’ -> “26” 要 解码 已编码的消息,所有数字必须基于上述映射的方法,反向映射回字母(可能有多种方法ÿ…...
Python闯LeetCode--第3题:无重复字符的最长子串
Problem: 3. 无重复字符的最长子串 文章目录 思路解题方法复杂度Code 思路 一上来马上想到两层for循环暴力枚举,但是又立马想到复杂度是 O ( n 2 ) O(n^2) O(n2),思考了一下能否有更优解,于是想到用头尾两个指针来指定滑动窗口(主…...
HTML DOM 对象
HTML DOM 对象 1. 概述 HTML DOM(文档对象模型)是一个跨平台和语言独立的接口,它允许程序和脚本动态地访问和更新文档的内容、结构和样式。在HTML DOM中,文档被表示为节点树,其中每个节点代表文档中的一个部分,例如元素、文本或属性。HTML DOM对象是构成这个节点树的基…...
如何解决 BeautifulSoup 安装问题:从 BeautifulSoup 3 到 BeautifulSoup 4
在使用 Python 的过程中,解析 HTML 和 XML 数据是一项常见任务。BeautifulSoup 是一个非常流行的解析库。然而,最近在安装 BeautifulSoup 时,遇到了一些问题。本文将介绍如何解决这些问题,并成功安装 BeautifulSoup 4。 问题描述 …...
原型模式--深复制/浅复制
原型模式用于克隆复杂对象,由于new一个实例对象会消耗大部分时间,所以原型模式可以节约大量时间 1 public class Sheep implements Cloneable{2 private String name;3 private Date birth;4 public Sheep(String name, Date birth) {5 …...
C# TextBox模糊查询及输入提示
在程序中,我们经常会遇到文本框中不知道输入什么内容,这时我们可以在文本框中显示提示词提示用户;或者需要查询某个内容却记不清完整信息,通常可以通过文本框列出与输入词相匹配的信息,帮助用户快速索引信息。 文本框…...
Node入门以及express创建项目
前言 记录学习NodeJS 一、NodeJS是什么? Node.js 是一个开源和跨平台的 JavaScript 运行时环境 二、下载NodeJs 1.下载地址(一直点击next即可,记得修改安装地址) https://nodejs.p2hp.com/download/ 2.查看是否安装成功,打开命令行 nod…...
Cheat Engine CE v7.5 安装教程(专注于游戏的修改器)
前言 Cheat Engine是一款专注于游戏的修改器。它可以用来扫描游戏中的内存,并允许修改它们。它还附带了调试器、反汇编器、汇编器、变速器、作弊器生成、Direct3D操作工具、系统检查工具等。 一、下载地址 下载链接:http://dygod/source 点击搜索&…...
【实例分享】访问后端服务超时,银河麒麟服务器操作系统分析及处理建议
1.服务器环境以及配置 【机型】 处理器: Intel 32核 内存: 128G 整机类型/架构: x86_64虚拟机 【内核版本】 4.19.90-25.22.v2101.kylin.x86_64 【OS镜像版本】 kylin server V10 SP2 【第三方软件】 开阳k8s 2.问题现象描述 …...
Java中和的区别
在Java中,& 和 && 都是逻辑运算符,但它们之间存在一些重要的区别,特别是在它们如何评估其操作数以及它们的性能影响方面。 短路评估(Short-Circuit Evaluation): &&(逻辑…...
深入理解计算机系统 CSAPP 家庭作业6.34
第一步先求(S,E,B,m) 题目说共C32个字节,块大小B为16个字节,那就是分为两组:0,1.然后每组存4个int 每个4字节 CB*E*S .B16 ,直接映射的E就是1,所以S2 m为啥等于7? 通过写出两个数组所有的地址可以得出m7. 得出高速缓存的参数:(S,E,B,m)(2,1,16,7),注意图6-26每个参数的定义…...
[leetcode 141环形链表]双指针解决环形链表
Problem: 141. 环形链表 文章目录 思路Code 思路 首先想到如果链表为空直接返回false 其次想到用双指针,一个一回走一步,另一个一回走两步 如果是环形,总有一个时刻,两指针会指向同一个节点,而且该结点不能为空(空是快指针遍历完单链表了) Code /*** Definition for singly-li…...
【深度学习】Precision、Accuracy的区别,精确率与准确率:深度学习多分类问题中的性能评估详解
在深度学习的多分类问题中,Precision(精确率)和Accuracy(准确率)是两种常用的性能评估指标,它们各自有不同的定义和用途。 Precision(精确率)的中文发音是:pǔ rēi xī…...
DELL服务器插入新磁盘、创建虚拟磁盘、挂载磁盘步骤
文章目录 一、磁盘清理(可选,针对新硬盘是Foreign状态)1、进入VD Mgmt2、清理新硬盘配置 二、创建虚拟磁盘1、进入Device Settings2、创建虚拟磁盘 三、挂载磁盘到系统1、分区磁盘(注意实际磁盘的名称)2、格式化分区3、…...
springboot与flowable(10):网关服务(排他网关)
一、绘制流程图 排他网关用于对流程中的决策建模。当执行到这个网关时,会按照所有出口顺序流定义的顺序对它们进行计算。选择第一个条件为true的顺序流继续流程。例如员工请假时,小于等于3天由组长审批,大于3天由总监审批。流程案例ÿ…...
Web前端网页源代码:深入剖析与实用技巧
Web前端网页源代码:深入剖析与实用技巧 在Web开发的浩瀚领域中,前端网页源代码扮演着至关重要的角色。它不仅是网页的骨架,更是实现各种交互和视觉效果的基石。本文将从四个方面、五个方面、六个方面和七个方面,对Web前端网页源代…...
聊天页面样式
聊天页面样式 代码: <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><link rel"styleshee…...
PHP入门教程3:数组和字符串操作
PHP入门教程3:数组和字符串操作 在前两篇文章中,我们学习了PHP的基础语法、控制结构和函数的使用。本文将重点介绍数组和字符串的高级操作,这些是PHP编程中非常常见且重要的内容。本文将包含以下几个部分: 数组的类型和操作多维…...
mariadb
MariaDB安装配置、使用、授权、增删改查以及数据库备份与恢复 MariaDB安装配置、使用、授权、增删改查以及数据库备份与恢复_mariadb安装及配置教程-CSDN博客mariadb 恢复: ERROR! MySQL server PID file could not be found! 170104 23:04:21 InnoDB: The InnoD…...
C/C++:指针用法详解
C/C:指针 指针概念 指针变量也是一个变量 指针存放的内容是一个地址,该地址指向一块内存空间 指针是一种数据类型 指针变量定义 内存最小单位:BYTE字节(比特) 对于内存,每个BYTE都有一个唯一不同的编号…...
JDK8-17新特性
一、JDK8新特性:Lambda表达式 1.Lambda表达式及其使用举例 Lambda是一个匿名函数,我们可以把Lambda表达式理解为是一段可以传递的代码(将代码像数据一样进行传递)。使用它可以写出更简洁、更灵活的代码。作为一种更紧凑的代码风格,使Java的语言表达能力…...
新绛做网站/qq空间秒赞秒评网站推广
屏幕使用时间是可以限定在规定时间内,不允许做其他的事情,是为了更好的避免在不注意的时候孩子碰触电脑,导致其他问题出现,也是限制孩子随意玩电脑的一个比较实用的方式,那么问题来了,长时间不用࿰…...
网站开发时间/营销渠道方案
直接一点上图(使用的是JDK1.7的源码):Object类总共13个方法 1.clone方法 保护方法,实现对象的浅复制,只有实现了Cloneable接口才可以调用该方法,否则抛出CloneNotSupportedException异常。 主要是JAVA里除了8种基本类…...
wordpress 换头像/热门推广平台
文章转自:http://other.caixin.com/2013-09-14/100582628.html 文章作者:安替 美国一个跨学科团队今年完成了一项对资源稀缺状况下人的思维方式的研究,结论是:穷人和过于忙碌的人有一个共同思维特质,即注意力被稀缺资源…...
黄冈网站官方登录平台/武汉seo建站
首先我们来关注几个概念。 1、简单相关系数:寻求两个变量之间的系数关系; 2、复相关系数:寻求一对多变量之间的系数关系; 简单介绍: 典型相关分析是考察有多个变量组成的自变量和多个变量组成的因变量之间的系数关…...
怎样免费建一个网站/怎么建公司网站
储蓄这个词,在中国人来看,已经很是熟悉了。 中国人爱储蓄,全球皆知! 我们从开始工作挣钱后,父母就安排我们:“钱不要乱花,能存就先存起来。” 但回头看一下自己的支付宝账单,我们…...
阿里云虚拟主机做企业网站/谷歌优化培训
SLF4J与Logback简介 Java日志框架众多,常用的有java.util.logging, log4j, logback,commons-logging等。 SLF4J (Simple Logging Facade For Java),它是一个针对于各类Java日志框架的统一Facade抽象。SLF4J定义了统一的日志抽象接口ÿ…...