段落

Beta

段落是任何文档中最基本的内容类型。在 Word 中,它们承载诸如间距、缩进、边框和对齐方式之类的格式。在 Tiptap 中,它们映射到 paragraph 节点,ConvertKit 会自动注册该节点,并提供一个自定义变体,用于展示导入器生成的、支持 DOCX 的属性。

你需要什么

  • 扩展: ConvertKit。其自定义 Paragraph 会渲染所有导入的属性(间距、缩进、行高、字体大小、上下文间距),并且内置的 TextAlign 已预配置为 ['paragraph', 'heading']
  • 配置: 无需配置。

段落格式需要 ConvertKit 的自定义 Paragraph

文本内容和对齐可在任意 paragraph 节点中往返保留。段落级间距、缩进、行高和上下文间距会在导入期间提取,并由 ConvertKit 的自定义 Paragraph 渲染为内联 CSS。如果你将 ConvertKit 的 Paragraph 替换为标准版本(或禁用该插槽),这些属性会保留在 JSON 中,但在 setEditorContent() 时会被剥离。 转换后内容的样式 指南介绍了如何扩展 schema 以支持更多属性。段落间距、缩进、上下文间距以及比例行高现在也会在导出时往返保留;请参见下方支持概览。

支持概览

导入编辑器(使用 ConvertKit)导出
文本内容支持支持支持
文本对齐支持支持(TextAlign)支持
行高支持(paragraph attr)支持(line-height: <value>比例值可往返保留(无单位倍数或百分比);固定的 px/pt 行高不会保留
段落间距(前/后)支持(spacingBeforespacingAfter attrs)支持(margin-top / margin-bottom支持
缩进支持(indentfirstLineIndent attrs)支持(padding-left / text-indent支持(负的首行缩进会变为悬挂缩进)
上下文间距支持(contextualSpacing attr)支持(data-contextual-spacing + 注入的 CSS 规则)支持

导入

使用 编辑器扩展REST API 导入段落。两者都会产生相同的段落输出。

当导入 DOCX 文件时,每个 Word 段落都会变成一个 paragraph 节点。转换服务会读取 Word 标记中的属性,并将它们映射到节点属性。

一个基础段落对应的 JSON 如下:

{
  "type": "paragraph",
  "attrs": {
    "textAlign": "left"
  },
  "content": [
    {
      "type": "text",
      "text": "这是一个段落。"
    }
  ]
}

会保留什么

  • 所有文本内容和行内格式(粗体、斜体、链接及其他 mark)
  • 当段落在 Word 中具有显式对齐时,文本对齐会被保留

会丢失什么

转换服务会从 Word 源中提取段落级属性,例如 spacingBeforespacingAfterlineHeightindentfirstLineIndentcontextualSpacing。ConvertKit 的自定义 Paragraph 会将它们全部渲染为内联 CSS。如果你将其替换为标准 Paragraph(或通过 ConvertKit.configure({ paragraph: false }) 禁用该插槽),这些值会保留在原始 JSON 中,但在内容加载到编辑器时会被剥离。无论哪种设置,段落级边框和背景颜色在导入期间都不会被提取。

编辑器渲染

Paragraph 扩展由 ConvertKit 注册,并将每个段落渲染为一个 <p> 元素。ConvertKit 会替换为一个自定义 Paragraph,用于添加与 DOCX 感知相关的属性;如果你禁用该插槽,则使用标准 Paragraph 作为回退。

文本对齐是内置的

ConvertKit 还会注册 TextAlign,并将其预配置为 ['paragraph', 'heading'],因此来自 Word 的 textAlign 属性无需额外设置即可渲染。如果你禁用了捆绑的 textAlign 插槽,该属性仍会保留在 JSON 中,但不会被应用。请参阅无效 schema 指南

与 Word 的视觉差异

编辑器渲染段落时使用的是你的 CSS 样式,而不是 Word 的文档样式。Word 的“Normal”样式通常包含特定的字体、字号和间距值,这些都不会带到编辑器中。结构和文本内容会被保留。视觉外观由你通过编辑器的 CSS 来控制。有关如何处理这一点,请参阅转换后内容的样式指南。

导出

使用 编辑器扩展REST API 导出段落。该扩展支持 paragraphOverridestextRunOverrides,可对段落和文本运行的默认值进行细粒度控制。REST API 不接受元素覆盖。若要通过 REST API 自定义段落样式,请使用 styleOverrides 重新定义“Normal”文档样式。

在 DOCX 导出期间,每个 paragraph 节点都会被写为一个 Word 段落,并应用“Normal”样式。默认的 Normal 样式使用 Aptos 11pt 字体、段后 10pt 间距以及 1.15 倍行高。

会往返保留什么

  • 所有文本内容和内联标记
  • 文本对齐方式从段落节点属性中读取,并映射为 Word 对齐方式
  • 行高从 lineHeight 段落属性中读取(块级 textStyle 标记仍然优先)。比例值(无单位倍数,如 1.5,或百分比,如 150%)会写入为 Word 行距;固定的 px/pt 行高没有对应的比例值,因此不会保留。
  • 段落间距(spacingBefore / spacingAfter)、左缩进和首行缩进(indent / firstLineIndent)以及上下文间距(contextualSpacing)都从段落节点属性中读取。负的首行缩进会写为悬挂缩进。这些属性也适用于带样式的段落,例如引用块。

不会导出的内容

无论 JSON 中是否存在,导出时都不会读取段落边框和背景颜色。

自定义导出样式

你可以在导出配置中使用 styleOverrides 来覆盖默认段落样式:

ExportDocx.configure({
  styleOverrides: {
    paragraphStyles: [
      {
        id: 'Normal',
        name: 'Normal',
        run: {
          font: 'Calibri',
          size: 24,        // 半磅(24 = 12pt)
        },
        paragraph: {
          spacing: {
            after: 200,    // twips
            line: 276,     // 一行的 1/240(276 = 1.15 倍行高)
          },
        },
      },
    ],
  },
})

这让你可以为导出文档中的所有段落控制字体、字号、间距以及其他 Word 级属性。