From e0e39bb072e93405c5ae8b908fe98b473f9c245a Mon Sep 17 00:00:00 2001 From: liangweihao <734499798@qq.com> Date: Fri, 27 Feb 2026 18:28:07 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A7=A3=E5=86=B3=E6=84=8F=E5=A4=96=E6=8D=A2?= =?UTF-8?q?=E8=A1=8C=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mcp_docx.py | 41 ++++++++--------------------------------- 1 file changed, 8 insertions(+), 33 deletions(-) diff --git a/mcp_docx.py b/mcp_docx.py index c99a839..6c81c89 100644 --- a/mcp_docx.py +++ b/mcp_docx.py @@ -236,40 +236,15 @@ def paragraph_replace(para_el, replacements): print(f"段落替换: {len(original_text)} -> {len(full_text)} 字符") # 将新文本重新分配到原有的 元素中 - # 策略:尽量保持原有的文本分布比例 - if len(t_elements) == 1: - # 只有一个 元素,直接替换 - _, t_el = t_elements[0] - t_el.text = full_text - if full_text and (full_text[0] == ' ' or full_text[-1] == ' '): - t_el.set('{http://www.w3.org/XML/1998/namespace}space', 'preserve') - else: - # 多个 元素:按原始长度比例分配新文本 - original_lengths = [len(t_el.text or '') for _, t_el in t_elements] - total_original = sum(original_lengths) + # 策略:将所有文本放入第一个元素,清空其他元素,避免不当切分导致换行 + _, first_t_el = t_elements[0] + first_t_el.text = full_text + if full_text and (full_text[0] == ' ' or full_text[-1] == ' '): + first_t_el.set('{http://www.w3.org/XML/1998/namespace}space', 'preserve') - if total_original == 0: - # 原始都是空的,把所有文本放到第一个元素 - t_elements[0][1].text = full_text - for i in range(1, len(t_elements)): - t_elements[i][1].text = '' - else: - # 按比例分配 - pos = 0 - for i, (_, t_el) in enumerate(t_elements): - if i == len(t_elements) - 1: - # 最后一个元素,取剩余所有文本 - chunk = full_text[pos:] - else: - # 按比例计算应该分配的长度 - ratio = original_lengths[i] / total_original - chunk_len = int(len(full_text) * ratio) - chunk = full_text[pos:pos + chunk_len] - pos += chunk_len - - t_el.text = chunk - if chunk and (chunk[0] == ' ' or chunk[-1] == ' '): - t_el.set('{http://www.w3.org/XML/1998/namespace}space', 'preserve') + # 清空其他 元素 + for i in range(1, len(t_elements)): + t_elements[i][1].text = '' def ensure_rpr(run_el):