pptx支持

This commit is contained in:
xunbu
2025-11-29 21:51:09 +08:00
parent 0ff1c87870
commit 63e6101064
4 changed files with 171 additions and 63 deletions

View File

@@ -22,9 +22,6 @@ from docutranslate.translator.ai_translator.base import AiTranslatorConfig, AiTr
class PPTXTranslatorConfig(AiTranslatorConfig):
insert_mode: Literal["replace", "append", "prepend"] = "replace"
separator: str = "\n"
# 指定翻译后的中文字体(东亚字体),防止乱码或回退到宋体
# 推荐使用 "Microsoft YaHei" (微软雅黑) 或 "DengXian" (等线)
target_cjk_font: str = "Microsoft YaHei"
# ---------------- 主类 ----------------
@@ -35,7 +32,7 @@ class PPTXTranslator(AiTranslator):
改进特性:
1. 深度遍历:支持母版、版式、备注页、以及隐藏在 AlternateContent (兼容性块) 中的文本。
2. 公式保护:智能检测文本间的公式,防止翻译后文字错位。
3. 字体美化:中西文字体分离,中文使用微软雅黑,英文保持原样
3. 样式保留:翻译后完全保留原有的中英文字体设置,不做强制覆盖
4. 布局自适应:防止翻译后文本溢出。
"""
@@ -54,7 +51,6 @@ class PPTXTranslator(AiTranslator):
self.translate_agent = SegmentsTranslateAgent(agent_config)
self.insert_mode = config.insert_mode
self.separator = config.separator
self.target_cjk_font = config.target_cjk_font
# ---------------- 辅助函数:样式与字体 ----------------
@@ -111,18 +107,6 @@ class PPTXTranslator(AiTranslator):
return True
def _set_east_asian_font(self, run, font_name: str):
"""设置 Run 的东亚字体 (解决中文乱码/宋体问题)。"""
if not font_name:
return
try:
rPr = run.font._element.get_or_add_rPr()
# 设置 ea (East Asian) 字体,不影响 latin (西文) 字体
ea = rPr.get_or_add_ea()
ea.set(qn('a:typeface'), font_name)
except Exception:
pass
# ---------------- 核心遍历逻辑 ----------------
def _process_text_frame(self, text_frame: TextFrame, elements: List[Dict[str, Any]], texts: List[str]):
@@ -283,12 +267,10 @@ class PPTXTranslator(AiTranslator):
primary_run = runs[0]
try:
# 1. 写入文本
# 1. 写入文本 (python-pptx 会自动保留原有的 rPr 属性,即保留默认字体)
primary_run.text = text_to_set
# 2. 设置东亚字体 (保留西文字体设置)
if self.target_cjk_font:
self._set_east_asian_font(primary_run, self.target_cjk_font)
# 2. (已移除字体强制设置逻辑,以保留 PPT 原样)
# 3. 处理溢出
text_frame = element_info.get("text_frame")