news 2026/5/1 8:26:12

【原创实践】Python 将 Markdown 文件转换为 Word(docx)完整实现

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【原创实践】Python 将 Markdown 文件转换为 Word(docx)完整实现

Python 将 Markdown 文件转换为 Word(docx)完整实现

在实际开发中,经常会遇到将 Markdown 文档转换为 Word(.docx)的需求,例如:

  • 技术文档从 Markdown 迁移到 Word

  • 自动生成可下载的 Word 报告

  • 与 Dify、FastAPI 等系统结合做文档导出

本文基于python-docx + markdown + BeautifulSoup,实现一个不依赖接口、直接读取 Markdown 文件并生成 Word 文件的完整方案,支持常见 Markdown 语法。


参考链接 https://mp.weixin.qq.com/s/vyz5d9Hya9UEEEvOiro9Vg

一、实现思路说明

整体转换流程如下:

  1. 使用markdown库将 Markdown 文本转换为 HTML

  2. 使用BeautifulSoup解析 HTML 结构

  3. 遍历 HTML 节点,映射为 Word 中的对应元素

  4. 使用python-docx生成并保存.docx文件

支持的 Markdown 元素包括:

  • 标题(h1–h6)

  • 段落

  • 无序 / 有序列表

  • 代码块

  • 行内代码、加粗、斜体

  • 表格


二、依赖安装

pipinstallpython-docx markdown beautifulsoup4

三、完整代码实现

fromdocximportDocumentfromdocx.sharedimportPtfrombs4importBeautifulSoupimportmarkdownimportuuidimportos FILE_DIR="static"os.makedirs(FILE_DIR,exist_ok=True)defmd_to_word(md_text:str)->str:""" 将 Markdown 文本转换为 Word,返回生成的文件名 """html=markdown.markdown(md_text,extensions=["extra","tables","fenced_code"])soup=BeautifulSoup(html,"html.parser")doc=Document()forelementinsoup.contents:handle_element(doc,element)filename=f"{uuid.uuid4().hex}.docx"file_path=os.path.join(FILE_DIR,filename)doc.save(file_path)returnfilenamedefhandle_element(doc,el):ifnothasattr(el,"name")orel.nameisNone:return# 标题ifel.namein["h1","h2","h3","h4","h5","h6"]:doc.add_heading(el.get_text(),level=int(el.name[1]))return# 段落ifel.name=="p":p=doc.add_paragraph()add_inline_text(p,el)return# 无序列表ifel.name=="ul":forliinel.find_all("li",recursive=False):p=doc.add_paragraph(style="List Bullet")add_inline_text(p,li)return# 有序列表ifel.name=="ol":forliinel.find_all("li",recursive=False):p=doc.add_paragraph(style="List Number")add_inline_text(p,li)return# 代码块ifel.name=="pre":code_el=el.find("code")code=code_el.get_text()ifcode_elelseel.get_text()p=doc.add_paragraph()run=p.add_run(code)run.font.name="Courier New"run.font.size=Pt(10)return# 表格ifel.name=="table":rows=el.find_all("tr")cols=rows[0].find_all(["th","td"])table=doc.add_table(rows=len(rows),cols=len(cols))table.style="Table Grid"forr,rowinenumerate(rows):forc,cellinenumerate(row.find_all(["th","td"])):paragraph=table.rows[r].cells[c].paragraphs[0]run=paragraph.add_run(cell.get_text())ifcell.name=="th":run.bold=Truedefadd_inline_text(paragraph,el):""" 处理行内样式:加粗、斜体、行内代码 """fornodeinel.contents:ifisinstance(node,str):paragraph.add_run(node)else:run=paragraph.add_run(node.get_text())ifnode.name=="strong":run.bold=Trueelifnode.name=="em":run.italic=Trueelifnode.name=="code":run.font.name="Courier New"run.font.size=Pt(10)defmd_to_word_from_file(md_file_path:str)->str:""" 从 Markdown 文件生成 Word """withopen(md_file_path,"r",encoding="utf-8")asf:md_text=f.read()returnmd_to_word(md_text)if__name__=="__main__":md_path="jd.md"# Markdown 文件路径filename=md_to_word_from_file(md_path)print("生成的 Word 文件:",filename)

四、使用说明

  1. 将 Markdown 文件(如jd.md)放到当前目录

  2. 运行脚本:

python md_to_word.py
  1. 程序会在static/目录下生成一个.docx文件,文件名为 UUID

五、适用场景

  • FastAPI / Flask 文档导出

  • Dify 工作流中生成 Word 报告

  • Markdown 文档批量转 Word

  • 内部系统自动生成可编辑文档


六、可优化方向

  • 增加图片(img)支持

  • 支持代码高亮样式

  • 表格列宽自适应

  • 自定义标题样式、字体、行距

  • 与 FastAPI 接口结合返回下载地址


七、总结

本文实现了一个轻量、可控、易扩展的 Markdown 转 Word 方案,不依赖外部接口,适合后端服务或本地脚本使用。
对于需要文档导出、报告生成的场景,这种方式在稳定性和可维护性上都具有明显优势。

如果你后续需要FastAPI 接口版Dify 工作流集成版样式增强版,可以在此基础上直接扩展。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/1 6:17:59

洛雪音乐音源完全重构指南

洛雪音乐音源完全重构指南 【免费下载链接】lxmusic- lxmusic(洛雪音乐)全网最新最全音源 项目地址: https://gitcode.com/gh_mirrors/lx/lxmusic- 想要打造个人专属的音乐库?洛雪音乐音源项目为你开启全新的音乐获取体验!这款开源工具通过智能聚…

作者头像 李华
网站建设 2026/4/18 12:23:29

Browserless终极指南:无头浏览器的现代化解决方案

Browserless终极指南:无头浏览器的现代化解决方案 【免费下载链接】browserless browserless is an efficient way to interact with a headless browser built in top of Puppeteer. 项目地址: https://gitcode.com/gh_mirrors/bro/browserless Browserless…

作者头像 李华
网站建设 2026/4/18 17:20:54

【AI模型手机部署紧急提醒】:智谱Open-AutoGLM适配风险与避坑指南

第一章:智谱Open-AutoGLM那个ai模型适合手机用在移动设备上部署轻量级AI模型是当前智能应用开发的重要方向。智谱推出的Open-AutoGLM系列模型中,部分变体经过优化后可在资源受限的手机环境中运行。选择适合移动端的模型需综合考虑参数规模、推理速度与内…

作者头像 李华
网站建设 2026/4/26 17:27:53

SoundCloud音频下载全攻略:免费获取高品质音乐的10个技巧

SoundCloud音频下载全攻略:免费获取高品质音乐的10个技巧 【免费下载链接】scdl Soundcloud Music Downloader 项目地址: https://gitcode.com/gh_mirrors/sc/scdl 想要轻松保存SoundCloud上的音乐作品吗?这款强大的开源下载工具将帮助您快速获取…

作者头像 李华
网站建设 2026/4/21 4:35:06

PaddlePaddle镜像中的命名实体识别模型实战教程

PaddlePaddle镜像中的命名实体识别模型实战教程 在智能客服自动提取客户信息、医疗系统从病历中抓取关键诊断术语、金融舆情监控实时识别公司与事件的今天,命名实体识别(NER)早已不再是实验室里的学术任务,而是支撑大量AI应用落地…

作者头像 李华
网站建设 2026/4/23 18:49:51

基于springboot的校园资料分享系统-计算机毕业设计源码+LW文档

摘要 随着互联网技术的迅速发展和教育信息化的推进,传统的校园资料分享方式已经无法满足现代高校师生的需求。基于SpringBoot的校园资料分享系统旨在通过信息化手段,提供一个高效、便捷、安全的资料共享平台,提升校园内的信息流通效率。本文将…

作者头像 李华