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):