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)}")