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 完整控制。

Metadata

Metadata

Assignees

No one assigned

    Labels

    compatibilityDOCX compatibility issueenhancementNew feature or requestpublic-betaPublic beta package feedback

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions