尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
PPT-MD
#!/usr/bin/env python3# -*- coding: utf-8 -*- PPT 转 Markdown 工具把模板 PPT (.pptx) 提取为 Marp 可用的 Markdown。 用法 python pptx_to_md.py 模板.pptx [-o 输出.md] 输出 1) 输出名.md 提取出的 Markdown每页用 --- 分隔 2) 输出名_images/ 模板中用到的图片在 md 中通过相对路径引用 说明 提取仅保留文字、表格和图片的位置信息标题按占位符/字号识别 布局、颜色、动画等版式无法 100% 还原需在生成后手工微调样式。 importosimportreimportsysfrompptximportPresentationfrompptx.enum.shapesimportMSO_SHAPE_TYPEfrompptx.utilimportEmu FRONT_MATTER--- marp: true theme: default paginate: true size: 16:9 --- PIC_EXT{image/png:.png,image/jpeg:.jpg,image/gif:.gif,image/bmp:.bmp,image/tiff:.tiff,image/x-emf:.emf,image/x-wmf:.wmf,}defrun_text(paragraph):把段落里的 run 渲染成 markdown 文本保留加粗/斜体。parts[]forruninparagraph.runs:trun.textifnott:continueifrun.font.bold:t**t**ifrun.font.italic:t*t*parts.append(t)return.join(parts)defhas_text(paragraph):returnbool(paragraph.text.strip())defis_title_shape(shape):ifnotshape.is_placeholder:returnFalsephshape.placeholder_formattry:frompptx.enum.shapesimportPP_PLACEHOLDERreturnph.typein(PP_PLACEHOLDER.TITLE,PP_PLACEHOLDER.CENTER_TITLE)exceptException:returnFalsedefslide_title(slide):优先取标题占位符否则取字体最大的首段。candidates[]forshapeinslide.shapes:ifnotshape.has_text_frame:continueforparainshape.text_frame.paragraphs:ifhas_text(para):size0forruninpara.runs:ifrun.font.size:sizemax(size,run.font.size.pt)candidates.append((para,size,is_title_shape(shape)))ifnotcandidates:returnNone,Nonetitle_cands[cforcincandidatesifc[2]]picktitle_cands[0]iftitle_candselsemax(candidates,keylambdac:c[1]or0)parapick[0]returnpara.text.strip(),pick[1]defpara_lines(shape):返回一个文本框的段落列表 [(text, level), ...]out[]forparainshape.text_frame.paragraphs:trun_text(para).strip()ifnott:continuelvlpara.levelor0out.append((t,lvl))returnoutdefbullet(t,lvl):return *lvl- tiflvlelse- tdefrender_slide(slide,index,img_dir,md_name):lines[]title,_slide_title(slide)lines.append(!-- 第 %d 页%s --%(index,(title)iftitleelse))iftitle:lines.append(## title)else:lines.append(## 第 %d 页%index)forshapeinslide.shapes:ifshape.shape_typeMSO_SHAPE_TYPE.PICTURE:picshape.image extPIC_EXT.get(pic.content_type,.img)fname%s_%d%s%(md_name,index,ext)withopen(os.path.join(img_dir,fname),wb)asf:f.write(pic.blob)lines.append(![](%s/%s)%(os.path.relpath(img_dir,os.path.dirname(os.path.abspath(__file__))).replace(\\,/),fname))continueifshape.has_table:tableshape.table rows[]forrintable.rows:cells[c.text.strip().replace(\n, )forcinr.cells]rows.append(cells)ifrows:lines.append(| | .join(rows[0]) |)lines.append(|---|*len(rows[0]))forrinrows[1:]:lines.append(| | .join(r) |)continueifshape.has_text_frame:iftitleandtitleinshape.text_frame.text.strip():continueplinespara_lines(shape)ifplines:fort,lvlinplines:lines.append(bullet(t,lvl))return\n.join(lines)defmain():iflen(sys.argv)2:print(用法: python pptx_to_md.py 模板.pptx [-o 输出.md])sys.exit(1)pptx_pathsys.argv[1]out_pathNoneif-oinsys.argv:out_pathsys.argv[sys.argv.index(-o)1]ifout_pathisNone:stemos.path.splitext(os.path.basename(pptx_path))[0]out_pathstem.mdmd_nameos.path.splitext(os.path.basename(out_path))[0]img_diros.path.join(os.path.dirname(out_path),md_name_images)os.makedirs(img_dir,exist_okTrue)prsPresentation(pptx_path)slides[]fori,slideinenumerate(prs.slides,1):slides.append(render_slide(slide,i,img_dir,md_name))mdFRONT_MATTER\n\n---\n\n.join(slides)\nwithopen(out_path,w,encodingutf-8)asf:f.write(md)print(已生成 Markdown: out_path)print(已导出图片到: img_dir)if__name____main__:main()
RELATED

相关推荐

LabVIEW储能电池绝缘测试

LabVIEW储能电池绝缘测试

储能电池的绝缘电阻,是高压安全的第一道防线——可很多产线还在靠手抄记录,出了问题只能翻纸箱。预计阅读约 4 分钟01 绝缘测试还靠纸笔?先把问题摊开先看一个反常识的事实:储能电池绝缘测试测的是一项"结果错了可能出安全事…

📅 2026/9/17 8:05:17
题解4(冰雹猜想、旗鼓相当的对手)

题解4(冰雹猜想、旗鼓相当的对手)

题解4(冰雹猜想、旗鼓相当的对手) 冰雹猜想题解: package Luogu;import java.util.Scanner;/*** author jinhong* date 2026/8/31 22:49* description 冰雹猜想*/ public class Main {public static void main(String[] args) {Scanner scnew…

📅 2026/11/4 2:14:41
4. ARP_16 ~ ARP_20

4. ARP_16 ~ ARP_20

ARP_16:接收ARP请求(目标硬件地址为全0) 概述 地址解析模块不会对ar$tha做特殊赋值,该字段正是待解析获取的MAC地址。本测试中测试仪发送目标硬件地址全为0的ARP请求,期望DUT收到后回复ARP应答。 前置条件 使用章节通用前置条件 测试环境 拓扑1 输入参数 使用章节…

📅 2026/9/17 22:08:00
MORE NEWS

更多资讯

📰

办理电工证被骗?学历不高怕报不上名?怎么报名不踩坑

办理电工证被骗?学历不高怕报不上名?怎么报名不踩坑 你是不是也担心,自己学历不高,根本报不上电工证?或者已经交了钱,结果还是被坑了?这事儿真的太多了, 办理电工证被骗…

📰

旅顺电工证怎么考,全国通用怎么拿,别怕考不过白交培训费

旅顺电工证怎么考,全国通用怎么拿,别怕考不过白交培训费 怕考不过白交培训费?旅顺电工证怎么考,全国通用怎么拿?你不是一个人在战斗。不少刚接触电工行业的小伙伴,因为对考试流程不熟悉,结果花了几千块培训费,最终因为没通过考试而白忙一场。其实,只…

📰

德州考电工证的试题真实经历:实操考试心里没底怕挂科

德州考电工证的试题真实经历:实操考试心里没底怕挂科 实操考试心里没底怕挂科,这是很多准备考电工证的学员的真实经历。不管是高压电工证还是低压电工证,考试内容都涉及实操和理论,一不小心就可能挂科,耽误时间和机会。特别是德州地区,因为考试内容和流…

📰

考低压电工证考试技巧怎么掌握才能一次通过拿电子证书

考低压电工证考试技巧怎么掌握才能一次通过拿电子证书 实操考试心里没底怕挂科,尤其是像你这样从事漯河水利工程的电工,每天和高压设备、电路打交道,考低压电工证对职业发展太重要了。但很多人担心的是,虽然平时会操作,考试时却总手忙脚乱,特别是实操部…

📰

电工证可以评职称不,电子证书是否被认可?三门峡初次报考者必看

电工证可以评职称不,电子证书是否被认可?三门峡初次报考者必看 你是不是正为找工作发愁,听说很多岗位必须持有电工证才能上岗,可你又担心这个证有没有用?特别是 电子证书…

📰

汉川电工证复审要钱吗官方回应来了!外省证怎么转过来

汉川电工证复审要钱吗官方回应来了!外省证怎么转过来 之前考的证在外省能不能转过来?这可能是不少特种作业人员心头最担心的问题,尤其是在跨省转岗、工作调动频繁的周口地区,电工证复审、补办、转证流程成了大家最关心的日常事务。官方回应早已明确,各地…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬