← Về thư mục
📄 / / projects / tech / OpenMAIC / app / packages / @openmaic / importer / src / serializer / textSerializer.md

textSerializer.ts 说明

本文说明 src/serializer/textSerializer.ts 的职责、与参考实现 pptx-renderer-main/src/renderer/TextRenderer.ts 的对应关系,以及输出如何进入 pptxtojson / PPTist 的数据模型。

定位

与 TextRenderer.ts 的关系

方面 TextRenderer.renderTextBody textSerializer.renderTextBody
继承与合并 七级段落 + run 合并、mergeParagraphProps / mergeRunProps 等 同一套函数与注释,逻辑对齐
入口 renderTextBody(textBody, placeholder, ctx, container, options?) renderTextBody(textBody, placeholder, ctx, options?) — 无 container
结果 向 container 追加 div / span / a / br 等 返回等价结构的 HTML 字符串
超链接 hlinkClick + isAllowedExternalUrl 相同;主工程使用 src/utils/urlSafety.ts(协议校验可与 renderer 略有差异,见该文件)

主函数名与选项类型与 renderer 对齐:renderTextBody、RenderTextBodyOptions(如表格 tcTxStyle 预留的 cellTextColor 等)。

七级样式继承(与 TextRenderer 一致)

对每一段 a:p,按顺序把列表样式里的 某级 pPr 合并进 MergedParagraphStyle:

  1. 母版 defaultTextStyle(按段落 lvl 取 lvl{n}pPr 或 defPPr)
  2. 母版 txStyles 中按占位符类别选的 titleStyle / bodyStyle / otherStyle
  3. 母版上与当前占位符匹配的 占位符形状 的 txBody/lstStyle
  4. 版式上与当前占位符匹配的 占位符形状 的 lstStyle
  5. 当前形状 textBody.listStyle
  6. 段落 p:pPr
  7. 每个 run 的 a:rPr(并叠在段落 defRPr 之上)

占位符类别由 getPlaceholderCategory(title / body / other)决定,用于第 2 步选 titleStyle 还是 bodyStyle 等。

Run 侧在合并 defRPr + rPr 后,若仍无字色,会回退到 形状 lstStyle 当前级 defRPr(与 TextRenderer 中注释一致:处理「空 defRPr 盖掉 lstStyle 色」的情况)。

段落与 run 的视觉效果(映射到 CSS)

空格与制表:连续空格用   策略、制表用 white-space: pre,与 TextRenderer 的意图一致。

依赖

调用方

与 TextRenderer 的已知差异(可接受)

若需逐行对照实现,请以 renderTextBody 主循环 与 runStylesToCssString 分别对应 TextRenderer 中的 段落 paraDiv 段 与 run 的 element.style 段。

一致性核对摘要(对照 TextRenderer.ts)