Skip to content

完整实现 Word 文本方向能力(横排 / 竖排 / RTL) #1

Description

@wybaby168

背景

当前公测版需要补齐 Word 中文本方向相关能力,覆盖中文竖排、表格单元格文字方向、文本框/形状文字方向,以及阿拉伯语/希伯来语等 RTL 场景。该能力会直接影响合同、表格、票据、封面、版式文档和中日韩竖排文档的兼容性。

目标

完整实现 DOCX 中 Word 文本方向的读取、渲染、编辑、保存和 API 控制能力,并保证保存后的文档可在 Microsoft Word / WPS 中保持方向设置。

功能范围

1. DOCX / OOXML 解析与保存

  • 解析并保留段落、表格单元格、文本框/形状、节或页面相关的文本方向设置。
  • 支持常见 WordprocessingML text direction 值,例如 horizontal、vertical、rotated、stacked、RTL/LTR 等对应语义。
  • 支持段落双向属性、run 级 RTL 属性、列表/编号在 RTL 下的布局和保存。
  • 保存时写回相同语义,避免打开再保存后方向丢失。
  • 未识别值要保守保留,不能破坏原始文档。

2. 渲染

  • 支持普通横排 LTR。
  • 支持 RTL 段落方向与文本流。
  • 支持中文/日文/韩文竖排文本方向。
  • 支持表格单元格内文字方向:横排、竖排、旋转 90/270、堆叠文本。
  • 支持文本框/形状内文字方向。
  • 混排场景需要处理数字、英文、标点、括号、链接、字段文本、上标/下标。
  • 光标、选区、高亮、批注/修订标记不能明显错位。

3. 编辑交互

  • 在不同文本方向下可正常输入、删除、换行、选择、复制粘贴。
  • IME 中文输入在竖排/横排下都可用。
  • RTL 段落中方向键、Home/End、选区扩展行为符合常见编辑器预期。
  • 表格单元格切换文字方向后,布局、行高、列宽和分页刷新正确。

4. UI / Ribbon

  • 在 ribbon 或上下文菜单提供“文本方向”入口。
  • 对表格单元格、段落、文本框选择时显示合适的可用选项。
  • 选项建议包含:横排、竖排、旋转 90°、旋转 270°、堆叠、从右到左、从左到右。
  • 当前选区方向状态要能正确回显。

5. API

建议新增或完善命令接口:

await editor.exec("textDirection", "horizontal");
await editor.exec("textDirection", "vertical-rl");
await editor.exec("textDirection", "rotate-90");
await editor.exec("textDirection", "rotate-270");
await editor.exec("paragraphDirection", "rtl");
await editor.exec("paragraphDirection", "ltr");

并在 getRuntimeStatus() 或 selection state 中暴露当前方向状态,方便宿主应用自定义工具栏。

建议测试样例

需要新增/收集以下 DOCX 样例:

  • 纯中文竖排段落。
  • 竖排中文 + 英文 + 数字 + 标点混排。
  • 表格单元格中横排、竖排、旋转 90、旋转 270 混合。
  • 文本框/形状中的竖排和旋转文字。
  • 阿拉伯语/希伯来语 RTL 段落。
  • RTL + LTR 混排段落。
  • RTL 列表编号/项目符号。
  • 含批注、修订、超链接、字段的文本方向样例。

验收标准

  • 打开上述样例时,视觉方向与 Microsoft Word 基本一致。
  • 编辑后保存,重新用 Microsoft Word / WPS 打开,文本方向不丢失。
  • 在本地 WASM 公测版中加载样例没有控制台错误。
  • 方向切换命令可通过 UI 和 API 触发。
  • 保存前后 XML 中相关方向语义稳定,不出现无关样式破坏。
  • 浏览器 smoke 覆盖 LTR、RTL、竖排、表格单元格方向至少四类场景。

备注

该 Issue 属于 DOCX 兼容性和编辑体验基础能力,优先级建议较高。实现时可以分阶段推进:先解析/渲染和保存保真,再补编辑交互与 ribbon/API 完整控制。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    compatibilityDOCX compatibility issueenhancementNew feature or requestpublic-betaPublic beta package feedback

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions