引言
在当今的文档处理中,markdown因其简洁的语法和易读性而广受欢迎,而microsoft word(docx格式)则因其广泛的兼容性和专业的排版效果成为商业文档的标准。本文将介绍如何使用python构建一个带有图形界面的markdown转word文档转换器,让这两种格式之间的转换变得简单直观。
全部代码
import wx
import markdown2
from docx import document
from docx.shared import pt, rgbcolor
from docx.enum.text import wd_align_paragraph
import re
class mainframe(wx.frame):
def __init__(self):
super().__init__(parent=none, title='markdown to docx converter', size=(800, 600))
self.init_ui()
def init_ui(self):
# 创建主面板
panel = wx.panel(self)
# 创建垂直布局
vbox = wx.boxsizer(wx.vertical)
# 添加说明文字
help_text = wx.statictext(panel, label="请输入或粘贴markdown格式的文本:")
vbox.add(help_text, 0, wx.all, 5)
# 创建多行文本输入框
self.text_ctrl = wx.textctrl(panel, style=wx.te_multiline)
vbox.add(self.text_ctrl, 1, wx.expand | wx.all, 5)
# 创建水平布局用于按钮
hbox = wx.boxsizer(wx.horizontal)
# 添加转换按钮
convert_btn = wx.button(panel, label='转换为docx')
convert_btn.bind(wx.evt_button, self.on_convert)
hbox.add(convert_btn, 0, wx.all, 5)
# 添加清除按钮
clear_btn = wx.button(panel, label='清除内容')
clear_btn.bind(wx.evt_button, self.on_clear)
hbox.add(clear_btn, 0, wx.all, 5)
vbox.add(hbox, 0, wx.align_right)
panel.setsizer(vbox)
def on_convert(self, event):
# 获取输入的markdown文本
markdown_text = self.text_ctrl.getvalue()
if not markdown_text.strip():
wx.messagebox('请输入markdown文本内容', '提示', wx.ok | wx.icon_information)
return
# 创建保存文件对话框
with wx.filedialog(self, "保存docx文件", wildcard="word files (*.docx)|*.docx",
style=wx.fd_save | wx.fd_overwrite_prompt) as filedialog:
if filedialog.showmodal() == wx.id_cancel:
return
# 保存文件
pathname = filedialog.getpath()
try:
self.convert_to_docx(markdown_text, pathname)
wx.messagebox('转换成功!', '提示', wx.ok | wx.icon_information)
except exception as e:
wx.messagebox(f'转换失败:{str(e)}', '错误', wx.ok | wx.icon_error)
def on_clear(self, event):
self.text_ctrl.setvalue('')
def convert_to_docx(self, markdown_text, output_path):
# 将markdown转换为html
html = markdown2.markdown(markdown_text, extras=['tables', 'fenced-code-blocks'])
# 创建新的word文档
doc = document()
# 解析html并添加到文档
# 移除html标签后按段落分割
paragraphs = re.split(r'\n+', re.sub(r'<[^>]+>', '', html))
for para_text in paragraphs:
if para_text.strip():
# 检查是否是标题(以#开头)
header_match = re.match(r'^(#{1,6})\s+(.+)$', para_text)
if header_match:
level = len(header_match.group(1))
text = header_match.group(2)
p = doc.add_heading(text, level=level)
else:
p = doc.add_paragraph(para_text)
# 设置段落格式
p.alignment = wd_align_paragraph.left
# 设置字体
run = p.runs[0] if p.runs else p.add_run()
font = run.font
font.name = '微软雅黑'
font.size = pt(11)
# 保存文档
doc.save(output_path)
if __name__ == '__main__':
app = wx.app()
frame = mainframe()
frame.show()
app.mainloop()
技术栈选择
为了实现这个项目,我们选择了以下核心技术:
- wxpython:用于构建跨平台的图形用户界面
- markdown2:用于解析markdown文本
- python-docx:用于创建和编辑word文档
- re:用于处理文本正则匹配
这些库的组合让我们能够构建一个功能完整、用户友好的文档转换工具。
核心功能实现
1. 图形界面设计
我们使用wxpython创建了一个简洁的用户界面,包含以下元素:
- 多行文本输入框:用于输入markdown内容
- 转换按钮:触发转换过程
- 清除按钮:快速清空输入内容
- 文件保存对话框:选择输出文件位置
界面设计采用垂直布局(boxsizer),确保各个元素能够合理排布并支持窗口大小调整。
def init_ui(self):
panel = wx.panel(self)
vbox = wx.boxsizer(wx.vertical)
help_text = wx.statictext(panel, label="请输入或粘贴markdown格式的文本:")
vbox.add(help_text, 0, wx.all, 5)
self.text_ctrl = wx.textctrl(panel, style=wx.te_multiline)
vbox.add(self.text_ctrl, 1, wx.expand | wx.all, 5)
2. markdown转换实现
转换过程分为两个主要步骤:
- 使用markdown2将markdown文本转换为html
- 解析html并创建相应的word文档元素
def convert_to_docx(self, markdown_text, output_path):
# 转换为html
html = markdown2.markdown(markdown_text, extras=['tables', 'fenced-code-blocks'])
# 创建word文档
doc = document()
# 解析并添加内容
paragraphs = re.split(r'\n+', re.sub(r'<[^>]+>', '', html))
for para_text in paragraphs:
if para_text.strip():
# 处理标题和段落
header_match = re.match(r'^(#{1,6})\s+(.+)$', para_text)
if header_match:
level = len(header_match.group(1))
text = header_match.group(2)
p = doc.add_heading(text, level=level)
else:
p = doc.add_paragraph(para_text)
3. 文档样式处理
为了确保生成的word文档具有良好的排版效果,我们对文档样式进行了基本设置:
- 使用微软雅黑字体
- 设置合适的字号
- 统一的段落对齐方式
# 设置段落格式 p.alignment = wd_align_paragraph.left # 设置字体 run = p.runs[0] if p.runs else p.add_run() font = run.font font.name = '微软雅黑' font.size = pt(11)
使用指南
环境配置
在使用之前,需要安装必要的python包:
pip install wxpython markdown2 python-docx
基本使用流程
- 运行程序
- 在文本框中输入或粘贴markdown格式的文本
- 点击"转换为docx"按钮
- 选择保存位置和文件名
- 等待转换完成
扩展与优化方向
这个项目还有很多可以扩展和优化的空间:
功能扩展
增强markdown支持
- 添加列表支持
- 支持块引用
- 添加图片处理
- 支持表格样式
文档处理增强
- 添加样式模板选择
- 支持目录生成
- 添加页眉页脚设置
- 支持批量处理
运行结果

以上就是使用python构建markdown转word文档转换器的详细内容,更多关于python markdown转word转换器的资料请关注代码网其它相关文章!
发表评论