支持的功能
下表展示了每种文档功能在转换流水线的三个阶段中的表现:
- 导入 将 DOCX 内容转换为 Tiptap JSON。
- 编辑器 在浏览器中渲染该 JSON。每种节点和标记类型都需要匹配的 Tiptap 扩展才能正确显示。
- 导出 将编辑器内容转换回 DOCX 文件。
某项功能可能在某个阶段受支持,但在另一个阶段不受支持。例如,制表符会被导入并在编辑器中渲染,但导出扩展目前还不会将其写回 DOCX。
导入和导出各自都有两种集成路径:一种是 编辑器扩展,另一种是 REST API。对于大多数功能,这两种路径会产生相同的结果。对于存在差异的地方(脚注、页眉/页脚、导出自定义),相关安装页面会说明具体细节。
编辑器列默认假设使用 ConvertKit
下表中的编辑器列默认假设推荐配置:已安装 ConvertKit 作为编辑器的扩展套件。ConvertKit 是基础功能的超集(相当于 StarterKit 的节点,加上针对 Paragraph、Heading、Image 以及表格栈的 DOCX 感知覆盖)。如果没有 ConvertKit,段落间距和缩进、图片裁剪以及表格单元格格式仍会被提取到 JSON 中,但会被编辑器的 schema 丢弃。若编辑器支持取决于其他因素(Pages、某个自定义扩展),该行会注明依赖项。
其他格式
这些表格专门描述 DOCX 流水线,因为 DOCX 是所有其他导出所基于的参考格式。PDF、ODT、EPUB 和 DOC 都是先生成一个 DOCX 文件,然后通过云服务将其转换为目标格式。凡是在 DOCX 导出中可用的功能,通常也会延续到其他格式,不过每种格式都可能引入自己的限制。详情请参见相应格式页面。
Markdown 走的是完全独立的转换路径,并支持另一组功能。相关内容记录在其单独的页面中。
行内格式
块级元素
文本和段落样式
导入服务会从 DOCX 源中提取段落级样式属性,例如间距、缩进和行高。ConvertKit 的自定义 Paragraph 和 Heading 会自动渲染这些样式。对于文档命名样式目录(Heading 1、Normal、Quote 等)中的排版样式,请使用实验性的 CSS 注入 功能,它会将样式目录提取为带作用域的 CSS 规则。
* 字间距会作为 textStyle.letterSpacing 提取,但没有任何内置扩展会渲染它。若要渲染导入的字间距,请 扩展 TextStyle。
** 默认不会应用 Word 的命名样式排版。请使用 CSS 注入 将其提取为带作用域的 CSS。
*** 导出时只有比例行距可以往返保留:无单位倍数(如 1.5)或百分比(如 150%)。带单位的固定行高(例如 24px、18pt)没有对应的比例 DOCX 表达,因而不会被保留。
列表
表格
单元格级和行级属性(背景、边框、垂直对齐、行高)需要 ConvertKit 的 ConvertTableKit,该套件默认包含。若使用独立的 @tiptap/extension-table,这些属性仍会被提取到 JSON 中,但会被编辑器的 schema 丢弃。若要通过 Pages 扩展 实现分页布局,请改用 PagesTableKit;其表格扩展在内部继承了 ConvertKit 的扩展,因此相同的 DOCX 单元格属性也会继续传递。有关具体组成,请参见 表格内容参考。
| 功能 | 导入 | 编辑器 | 导出 |
|---|---|---|---|
| 基础表格 | ✓ | ✓ | ✓ |
| 合并单元格(colspan) | ✓ | ✓ | ✓ |
| 合并单元格(rowspan) | ✓ | ✓ | ✓ |
| 表头行 | ✓ | ✓ | ✕ |
| 列宽 | ✓ | ✓ | ✓ |
| 单元格背景 | ✓ | ✓ | ✕ |
| 单元格边框 | ✓ | ✓ | ✕ |
| 单元格垂直对齐 | ✓ | ✓ | ✕ |
| 行高 | ✓ | ✓ | ✕ |
媒体
* ConvertKit 的自定义 Image 会声明 cropTop/cropBottom/cropLeft/cropRight,并将它们作为 data-crop-* 属性输出。若要实现视觉裁剪,请添加 CSS,将这些数据属性转换为 clip-path 或 object-position。
页面布局
* 导入行为在不同集成路径中有所不同。REST API 会在响应中将脚注、尾注以及页眉/页脚作为单独字段返回。编辑器扩展 会通过 Pages 扩展自动应用页眉和页脚,但不会显示脚注或尾注数据。详情请参见安装页面。
** 页眉/页脚中的 Word PAGE 和 NUMPAGES 字段会转换为规范文本标记({page} / {numpages}):在使用 Pages 扩展时默认开启;在其他情况下可通过 placeholders 字段选择启用。其他字段代码(DATE、AUTHOR、MERGEFIELD)仍会按其缓存的显示值导入。导出时,编辑器扩展 和 REST API 都会将页眉/页脚内容中的 {page} / {total} 标记作为实时的 PAGE / NUMPAGES 字段输出。请参见页码字段。
页面布局需要 Pages 扩展
页眉、页脚、分页符以及分页布局都需要 Pages 扩展 才能在编辑器中渲染。没有它,即使转换服务生成了这些内容,也没有地方可供显示。
不支持
这些功能在导入期间不会被转换,或者仅有限转换。
| 功能 | 状态 |
|---|---|
| 修订和修订记录 | 不会转换。跟踪修订扩展存在,但未与转换连接。 |
| 目录 | 作为 tableOfContents 节点导入(标题和标题范围)。需要一个自定义扩展来在编辑器中渲染它。现有的目录扩展是一个用于构建侧边栏导航的无头工具,而不是文档块渲染器。不导出。 |
| 文本框 | 不会转换。文本框中的内容不会被提取。 |
| 形状、SmartArt、WordArt | 不会转换。这些元素在导入期间不会被提取。 |
| 域代码(DATE、AUTHOR、MERGEFIELD) | 缓存的显示值会以纯文本形式保留(例如,显示为“2026年4月10日”的 DATE 域会作为文本“2026年4月10日”导入)。域代码本身不会转换,因此该值会变为静态且不会更新。 |
| 页码域代码(PAGE、NUMPAGES) | 当启用 placeholders 时,会翻译为规范文本标记(PAGE 对应 {page},NUMPAGES 对应 {numpages})(Pages 扩展默认启用;也可通过 REST API 的 placeholders={} 表单字段显式启用)。Pages 扩展可原生渲染 {page};通过 Pages.configure({ placeholders: { total: 'numpages' } }) 将 {numpages} 映射后即可动态渲染。若 placeholders: false(或在 REST API 中省略),缓存的显示值会作为纯文本导入。 |
| 文档元数据(作者、标题、关键词) | 不会转换。元数据不包含在 JSON 输出中。 |
| 表单域和内容控件 | 不会转换。内联结构化文档标记(SDT)的文本内容会保留,但控件元数据会被丢弃。 |
| 隐藏文本 | 标记为隐藏的文本运行(w:vanish)会从导入输出中排除。 |
| 从右到左的文本方向 | 导入时不会解析 DOCX <w:bidi>(段落方向)和 <w:rtl>(文本运行方向),导出时也不会写入。用阿拉伯语、希伯来语、波斯语、乌尔都语及其他 RTL 语言编写的文档会按编辑器的 CSS 方向渲染(默认 LTR)。请在编辑器根元素上设置 dir="rtl",或在应用层检测语言以处理此类情况。详见文本对齐。 |