python markdown转word【包括字体指定】

文章目录

一、代码示例

  • 下面代码是转微软雅黑的示例
python 复制代码
from io import BytesIO

import markdown
from bs4 import BeautifulSoup
from docx import Document
from docx.oxml.ns import qn
from docx.shared import Pt


def md_content_to_docx(md_text):
    """将单个 Markdown 文件转换为 Word"""
    def set_run_font(run, qn_name='w:eastAsia', font_name="微软雅黑"):
        """统一设置 Run 对象的字体"""
        run.font.name = font_name
        # 解决中文显示问题(Windows 系统)
        run.font.element.rPr.rFonts.set(qn(qn_name), font_name)

    html = markdown.markdown(md_text, extensions=['tables', 'fenced_code'])
    soup = BeautifulSoup(html, "html.parser")

    doc = Document()

    for element in soup.children:
        if element.name == "h1":
            heading = doc.add_heading(level=1)
            run = heading.add_run(element.get_text())
            set_run_font(run)
        elif element.name == "h2":
            heading = doc.add_heading(level=2)
            run = heading.add_run(element.get_text())
            set_run_font(run)
        elif element.name == "h3":
            heading = doc.add_heading(level=3)
            run = heading.add_run(element.get_text())
            set_run_font(run)
        elif element.name == "p":
            para = doc.add_paragraph()
            run = para.add_run(element.get_text())
            set_run_font(run)
        elif element.name == "ul":
            for li in element.find_all("li"):
                para = doc.add_paragraph(style="List Bullet")
                run = para.add_run(li.get_text())
                set_run_font(run)

        elif element.name == "ol":
            for li in element.find_all("li"):
                para = doc.add_paragraph(style="List Number")
                run = para.add_run(li.get_text())
                set_run_font(run)
        elif element.name == "pre":
            para = doc.add_paragraph()
            run = para.add_run(element.get_text())
            set_run_font(run)
            run.font.size = Pt(10)
        elif element.name == "table":
            rows = element.find_all("tr")
            if rows:
                cols = len(rows[0].find_all(["td", "th"]))
                table = doc.add_table(rows=len(rows), cols=cols)
                table.style = "Table Grid"
                for i, row in enumerate(rows):
                    cells = row.find_all(["td", "th"])
                    for j in range(min(cols, len(cells))):
                        cell = table.cell(i, j)
                        cell_text = cells[j].get_text().strip()
                        # 设置单元格字体
                        para = cell.paragraphs[0]
                        run = para.add_run(cell_text)
                        set_run_font(run)
                        # 表头加粗
                        if cells[j].name == "th":
                            run.bold = True
        else:
            text = getattr(element, "get_text", lambda: str(element))()
            if text.strip():
                para = doc.add_paragraph()
                run = para.add_run(text.strip())
                set_run_font(run)
    doc_bytes = BytesIO()
    doc.save(doc_bytes)
    return doc_bytes.getvalue()

def get_test_md_content():
    return """# 审计行业全景分析报告 

## 一、行业概述 

### 1.1 行业定义与核心价值 
 审计是指由独立第三方机构依据相关法律法规、会计准则和审计准则,对企业、事业单位及其他经济组织的财务报表、内部控制体系、经营活动合规性等进行审查、监督和评价的专业服务活动。

 核心价值体现在:
- 提升财务信息透明度与可信度,保护投资者、债权人等利益相关方权益 
- 监督企业合规经营,防范财务舞弊与风险 
- 为企业优化内部控制、提升管理效率提供专业建议 

### 1.2 行业发展历程 
| 发展阶段 | 时间区间 | 核心特征 | 关键事件 |
|----------|----------|----------|----------|
| 起步阶段 | 1980-2000 年 | 恢复重建审计制度,以国营企业审计为主 | 1983 年成立国家审计署;1993 年注册会计师制度正式实施 |
| 快速发展阶段 | 2001-2010 年 | 资本市场推动行业扩张,外资所进入中国市场 | 2001 年安然事件引发审计监管强化;2007 年新会计准则实施 |
| 规范发展阶段 | 2011-2020 年 | 监管趋严,行业集中度提升,本土所崛起 | 2012 年会计师事务所 "脱钩改制" 完成;2016 年证监会强化审计执法 |
| 高质量发展阶段 | 2021 年至今 | 数字化转型加速,ESG 审计兴起,全球监管协同 | 2023 年《注册会计师行业发展规划(2021-2025 年)》落地;ESG 信息披露强制化 |

## 二、行业分类与业务范围 

### 2.1 按审计主体分类 
#### 2.1.1 政府审计 
- 执行主体:国家审计署及地方各级审计机关 
- 审计对象:各级政府部门、事业单位、国有企业、重点建设项目 
- 核心职能:监督财政收支、财务收支的真实性、合法性和效益性 
- 典型业务:预算执行审计、政策落实跟踪审计、领导干部经济责任审计 

#### 2.1.2 内部审计 
- 执行主体:企业 / 组织内部审计部门或岗位 
- 审计对象:内部管理制度、业务流程、风险控制体系、部门绩效 
- 核心职能:优化内部控制、防范运营风险、提升组织效率 
- 典型业务:流程合规审计、风险管理审计、专项业务审计(如采购审计)

#### 2.1.3 社会审计(注册会计师审计)
- 执行主体:会计师事务所(内资所、外资所)
- 审计对象:上市公司、非上市企业、社会组织等 
- 核心职能:提供独立审计报告,满足外部信息披露需求 
- 典型业务:财务报表审计、IPO 审计、并购重组审计、税务审计 

## 三、行业产业链与市场格局 

### 3.1 产业链结构 
#### 3.1.1 上游环节 
- 监管机构:财政部、审计署、证监会、中注协等(制定规则、监督管理)
- 专业支持:会计准则制定机构、审计准则委员会、软件服务商(审计工具、数据分析工具)
- 人才供给:高等院校(会计、审计专业)、职业培训机构(CPA、CIA 等认证)

#### 3.1.2 中游环节 
- 核心主体:会计师事务所(头部所、区域所、小型所)、内部审计部门、政府审计机关 
- 服务模式:线下审计 + 数字化审计融合,远程审计逐步普及 

#### 3.1.3 下游环节 
- 主要需求方:上市公司、国有企业、民营企业、政府部门、金融机构、投资者 
- 需求驱动因素:法律法规要求、资本市场信息披露需求、风险管理需求 

### 3.2 市场格局分析 
#### 3.2.1 竞争梯队 
| 梯队 | 代表机构 | 市场特征 | 市场份额(2024 年) |
|------|----------|----------|--------------------|
| 第一梯队 | 四大会计师事务所(普华永道、德勤、安永、毕马威) | 国际化布局,服务大型企业及上市公司,品牌优势显著 | 35% |
| 第二梯队 | 本土头部所(立信、天健、信永中和、大华等) | 国内网络完善,服务中小企业及地方国企,政策支持力度大 | 40% |
| 第三梯队 | 区域型会计师事务所 | 聚焦特定区域或细分领域,服务小微企业,规模较小 | 20% |
| 第四梯队 | 小型事务所及个体执业者 | 提供基础审计及税务服务,业务单一 | 5% |

#### 3.2.2 区域分布特征 
- 一线城市(北京、上海、深圳、广州):集中了 60% 以上的头部事务所及高端审计业务,金融、科技行业审计需求突出 
- 新一线城市(杭州、成都、武汉等):本土事务所区域总部聚集地,制造业、服务业审计需求旺盛 
- 三四线城市:以小型事务所为主,主要服务本地中小企业及政府部门委托业务 
"""


if __name__ == '__main__':
    with open("test.docx", "wb") as f:
        f.write(md_content_to_docx(get_test_md_content()))

二、效果图

相关推荐
拾贰_C2 小时前
【python | pytorch | warehouse】python库scipy与scikit-learn库不兼容?
pytorch·python·scipy
corpse20102 小时前
trae下载依赖包特别慢!!!
开发语言·python
诸神缄默不语2 小时前
Windows系统无法直接用uv安装pyqt5,但可以用uv pip安装
python
中年程序员一枚2 小时前
同时装有Python3.12和Python3.14,历史原因Python3.12出现问题,需要删除,但是删除不干净
python
rainFFrain2 小时前
QT显示类控件---QSlider
开发语言·qt
dragoooon342 小时前
[C++——lesson30.数据结构进阶——「红黑树」]
开发语言·数据结构·c++
云泽8082 小时前
C++ STL 栈与队列完全指南:从容器使用到算法实现
开发语言·c++·算法
郑州光合科技余经理2 小时前
实战:攻克海外版同城生活服务平台开发五大挑战
java·开发语言·javascript·数据库·git·php·生活
爱笑的眼睛112 小时前
超越翻转与裁剪:面向生产级AI的数据增强深度实践与多模态演进
java·人工智能·python·ai