import logging

from docx.oxml.ns import qn
from docx.shared import Pt

# 获取日志记录器
logger = logging.getLogger(__name__)

#excluded_list = ['{{year}}','{{month}}', '{{day}}']
# 将文档中的字符串变量替换成提取内容
def replace_text_in_paragraph(paragraph, old_text, new_text):
    try:
        if old_text in paragraph.text:  # 检查段落中是否存在模板字符串
            # 遍历段落的每个运行
            for run in paragraph.runs:
                if old_text in run.text:
                    run.text = run.text.replace(old_text, new_text)
                if old_text.startswith('{{')  :
                    run.font.name = "Times New Roman"
                    #run.font.name = "仿宋"
                    run._element.rPr.rFonts.set(qn('w:eastAsia'), '仿宋')
                    run.font.size = Pt(16)
    except Exception as e:
        logger.exception(f"替换段落里的文本失败：{e}")
        print(f"替换段落里的文本失败：{e}")


def replace_text_in_docx(doc, replacements):
    try:
        logger.info("开始替换段落中的文本")
        # 替换段落中的文本
        for paragraph in doc.paragraphs:
            for old_text, new_text in replacements.items():
                replace_text_in_paragraph(paragraph, old_text, new_text)
    except Exception as e:
        logger.exception(f"替换段落中的文本失败：{e}")
        print(f"替换段落中的文本失败：{e}")

    try:
        logger.info("开始替换表格中的文本")
        # 替换表格中的文本
        for table in doc.tables:
            for row in table.rows:
                for cell in row.cells:
                    for old_text, new_text in replacements.items():
                        if old_text in cell.text:
                            cell.text = cell.text.replace(old_text, new_text)

    except Exception as e:
        logger.exception(f"替换表格中的文本失败：{e}")
        print(f"替换表格中的文本失败：{e}")
