| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- import os
- import re
- import uuid
- import pypandoc
- from docx import Document
- from docx.shared import Pt, Cm
- from docx.oxml.ns import qn
- from docx.enum.text import WD_ALIGN_PARAGRAPH
- from docx.enum.table import WD_TABLE_ALIGNMENT
- from config.settings import SERVER_HOST, REPORT_OUTPUT_DIR
- TEMPLATE_FILENAME = "template.docx"
- def convert_markdown_to_docx(md_content: str, save_path: str) -> None:
- # 自动检测并下载 pandoc
- try:
- pypandoc.get_pandoc_path()
- except OSError:
- print("未检测到 pandoc,正在自动下载...")
- pypandoc.download_pandoc()
- report_content = md_content.strip()
- template_file = os.path.join(os.path.dirname(__file__), TEMPLATE_FILENAME)
- if not os.path.exists(template_file):
- raise FileNotFoundError(
- f"样式模板不存在!路径:{template_file}"
- )
- extra_args = [
- "--standalone",
- f"--reference-doc={template_file}"
- ]
- pypandoc.convert_text(
- source=report_content,
- format="md",
- to="docx",
- outputfile=save_path,
- extra_args=extra_args,
- encoding="utf-8"
- )
- print(f"✅ 转换成功!文件输出路径:{save_path}")
- def get_docx_download_url(word_filename: str) -> str:
- return f"{SERVER_HOST}/static/report_pdf/{word_filename}"
- if __name__ == '__main__':
- # 读取本地 md 文本文件
- try:
- with open("../md.txt", "r", encoding="utf-8") as f:
- md_text = f.read()
- # 输出 word 路径,可自行修改
- word_output_path = "../审查报告.docx"
- convert_markdown_to_docx(md_text, word_output_path)
- except FileNotFoundError:
- print("错误:未找到 ../md.txt 文件,请检查文件路径!")
- except Exception as e:
- print(f"执行异常:{str(e)}")
|