解决意外换行问题

This commit is contained in:
2026-02-27 18:28:07 +08:00
parent 578580537f
commit e0e39bb072

View File

@@ -236,40 +236,15 @@ def paragraph_replace(para_el, replacements):
print(f"段落替换: {len(original_text)} -> {len(full_text)} 字符") print(f"段落替换: {len(original_text)} -> {len(full_text)} 字符")
# 将新文本重新分配到原有的 <w:t> 元素中 # 将新文本重新分配到原有的 <w:t> 元素中
# 策略:尽量保持原有的文本分布比例 # 策略:将所有文本放入第一个元素,清空其他元素,避免不当切分导致换行
if len(t_elements) == 1: _, first_t_el = t_elements[0]
# 只有一个 <w:t> 元素,直接替换 first_t_el.text = full_text
_, t_el = t_elements[0] if full_text and (full_text[0] == ' ' or full_text[-1] == ' '):
t_el.text = full_text first_t_el.set('{http://www.w3.org/XML/1998/namespace}space', 'preserve')
if full_text and (full_text[0] == ' ' or full_text[-1] == ' '):
t_el.set('{http://www.w3.org/XML/1998/namespace}space', 'preserve')
else:
# 多个 <w:t> 元素:按原始长度比例分配新文本
original_lengths = [len(t_el.text or '') for _, t_el in t_elements]
total_original = sum(original_lengths)
if total_original == 0: # 清空其他 <w:t> 元素
# 原始都是空的,把所有文本放到第一个元素 for i in range(1, len(t_elements)):
t_elements[0][1].text = full_text t_elements[i][1].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')
def ensure_rpr(run_el): def ensure_rpr(run_el):