页扩展 API 参考

本页面是 Pages 扩展的 optionscommandsstorage 的权威参考。有关面向任务的演练,请参见 Page formatPage header and footerPage gapPage break nodeZoom

Options interface

import type { Extensions, JSONContent } from '@tiptap/core'

type PagesHeaderFooter = string | JSONContent

type BuiltInPageFormat = 'A4' | 'A3' | 'A5' | 'Letter' | 'Legal' | 'Tabloid'

interface CustomPageFormat {
  id: string
  width: number // 像素
  height: number // 像素
  margins: {
    top: number
    right: number
    bottom: number
    left: number
  }
}

type PageFormat = BuiltInPageFormat | CustomPageFormat

interface PagesOptions {
  /** 内置格式名称或自定义页面格式对象。默认:'A4'。 */
  pageFormat: PageFormat

  /** 初始缩放级别。限制在 [0.25, 4]。默认:1。 */
  zoom?: number

  /** 默认页眉内容。接受纯字符串、HTML 字符串或 Tiptap JSONContent。
   *  支持 `{page}` 和 `{total}` 占位符。默认:''。 */
  header: string | JSONContent

  /** 默认页脚内容。与 `header` 结构相同。默认:''。 */
  footer: string | JSONContent

  /** 从页面顶部到页眉内容开始位置的距离(像素)。
   *  默认为页面上边距的 50%。 */
  headerTopMargin?: number

  /** 从页脚内容底部到页面底部的距离(像素)。
   *  默认为页面下边距的 50%。 */
  footerBottomMargin?: number

  /** 页面之间的视觉间距(像素)。默认:50。 */
  pageGap?: number

  /** 显示在页面之间区域中的 CSS 颜色。默认:'#ffffff'。 */
  pageGapBackground?: string

  /** 应用于页眉和页脚编辑器覆盖层的强调色。默认:'#6366f1'。 */
  accentColor?: string

  /** 仅用于页眉覆盖层的强调色。默认为 `accentColor` 的值。 */
  headerAccentColor?: string

  /** 仅用于页脚覆盖层的强调色。默认为 `accentColor` 的值。 */
  footerAccentColor?: string

  /** 启用首页使用不同的页眉和页脚(Word 的“首页不同”)。
   *  默认:false。 */
  differentFirstPage?: boolean

  /** 首页页眉内容。默认:''。 */
  headerFirstPage?: PagesHeaderFooter

  /** 首页页脚内容。默认:''。 */
  footerFirstPage?: PagesHeaderFooter

  /** 启用奇数页与偶数页使用不同的页眉和页脚(Word 的“奇偶页不同”)。
   *  默认:false。 */
  differentOddEven?: boolean

  /** 奇数页页眉内容。默认:''。 */
  headerOdd?: PagesHeaderFooter

  /** 偶数页页眉内容。默认:''。 */
  headerEven?: PagesHeaderFooter

  /** 奇数页页脚内容。默认:''。 */
  footerOdd?: PagesHeaderFooter

  /** 偶数页页脚内容。默认:''。 */
  footerEven?: PagesHeaderFooter

  /** 独立启用与 `differentFirstPage` 无关的不同首页页脚。
   *  调用 `setDifferentFirstPage(true)` 时会自动设置。 */
  differentFirstPageFooter?: boolean

  /** 独立启用与 `differentOddEven` 无关的不同奇偶页页脚。
   *  调用 `setDifferentOddEven(true)` 时会自动设置。 */
  differentOddEvenFooter?: boolean

  /** 注册到内部页眉/页脚编辑器上的扩展。
   *  默认为 StarterKit;请镜像主编辑器的扩展栈以保持 schema 对齐。 */
  headerFooterExtensions?: Extensions

  /** 当 `setPageFormat()` 成功,或 configure() 应用了新格式时调用。 */
  onPageFormatChange?: (pageFormat: PageFormat) => void

  /** 当 `setZoom()` 更改缩放级别时调用。 */
  onZoomChange?: (zoom: number) => void

  /** 可选——如果用户双击编辑器外部,返回 true 以保持当前活动的页眉或页脚编辑器打开。
   *  同时适用于两者。 */
  onDblClickHeaderFooterPreventClose?: (event: MouseEvent) => boolean

  /** 类似 `onDblClickHeaderFooterPreventClose`,但仅适用于页眉覆盖层。
   *  当两者都设置时,优先于回退项。 */
  onDblClickHeaderPreventClose?: (event: MouseEvent) => boolean

  /** 类似 `onDblClickHeaderFooterPreventClose`,但仅适用于页脚覆盖层。
   *  当两者都设置时,优先于回退项。 */
  onDblClickFooterPreventClose?: (event: MouseEvent) => boolean
}

Options reference

Layout

OptionTypeDefaultNotes
pageFormatPageFormat'A4'有关内置格式,请参见 Page format
zoomnumber1限制在 [0.25, 4]。参见 Zoom
pageGapnumber50像素。仅用于视觉显示——不影响导出。
pageGapBackgroundstring'#ffffff'任意 CSS 颜色值。

Headers and footers

页眉/页脚选项的完整参考位于 Page header and footer。下表概述了表面层;有关首页、奇偶页、内容类型以及编辑器覆盖层行为,请点击链接查看。

OptionTypeDefaultDescription
headerPagesHeaderFooter''默认页眉内容
footerPagesHeaderFooter''默认页脚内容
headerTopMarginnumber页上边距的 50%从页面顶部到页眉内容的距离(px)
footerBottomMarginnumber页下边距的 50%从页脚内容到页面底部的距离(px)
differentFirstPagebooleanfalse首页页眉和页脚与其余页面不同
headerFirstPagePagesHeaderFooter''首页页眉内容
footerFirstPagePagesHeaderFooter''首页页脚内容
differentOddEvenbooleanfalse奇数页和偶数页使用不同的页眉和页脚
headerOddPagesHeaderFooter''奇数页页眉内容
headerEvenPagesHeaderFooter''偶数页页眉内容
footerOddPagesHeaderFooter''奇数页页脚内容
footerEvenPagesHeaderFooter''偶数页页脚内容
headerFooterExtensionsExtensionsStarterKit用于内部页眉/页脚编辑器的扩展
onDblClickHeaderFooterPreventClose(event: MouseEvent) => booleanundefined双击外部时防止关闭(页眉 + 页脚)
onDblClickHeaderPreventClose(event: MouseEvent) => booleanundefined双击外部时防止关闭(仅页眉)
onDblClickFooterPreventClose(event: MouseEvent) => booleanundefined双击外部时防止关闭(仅页脚)
accentColorstring'#6366f1'两个覆盖层的强调色
headerAccentColorstringaccentColor value仅页眉覆盖层的强调色
footerAccentColorstringaccentColor value仅页脚覆盖层的强调色

Callbacks

OptionTypeDescription
onPageFormatChange(format: PageFormat) => void当通过 configure 或 setPageFormat 更改页面格式时触发。
onZoomChange(zoom: number) => void当通过 setZoom 更改缩放级别时触发。

Commands reference

有关每个命令的深入说明,请参见链接的 core-concepts 页面。

Layout commands

CommandParametersDescription
setPageFormatpageFormat: PageFormat更改页面格式。触发 onPageFormatChange
setZoomzoom: number设置缩放(限制在 [0.25, 4])。触发 onZoomChange
setPageGappageGap: number设置页面间距(px)。必须为正数。
setPageGapBackgroundcolor: string设置页面间距背景颜色(任意 CSS 颜色值)。

完整参考也位于 Page header and footer

CommandParametersDescription
setHeaderheader: PagesHeaderFooter设置默认页眉内容
setFooterfooter: PagesHeaderFooter设置默认页脚内容
setHeaderTopMarginmargin: number设置页眉上边距(px)
setFooterBottomMarginmargin: number设置页脚下边距(px)
setDifferentFirstPageenabled: boolean切换不同的首页页眉 页脚
setDifferentFirstPageFooterenabled: boolean独立切换不同的首页页脚
setHeaderFirstPageheader: PagesHeaderFooter设置首页页眉内容
setFooterFirstPagefooter: PagesHeaderFooter设置首页页脚内容
setDifferentOddEvenenabled: boolean切换不同的奇数/偶数页页眉 页脚
setDifferentOddEvenFooterenabled: boolean独立切换不同的奇数/偶数页页脚
setHeaderOddheader: PagesHeaderFooter设置奇数页页眉内容
setHeaderEvenheader: PagesHeaderFooter设置偶数页页眉内容
setFooterOddfooter: PagesHeaderFooter设置奇数页页脚内容
setFooterEvenfooter: PagesHeaderFooter设置偶数页页脚内容
openHeaderEditor{ pageNumber: number }为特定页面打开页眉编辑器(从 1 开始编号)。
openFooterEditor{ pageNumber: number }为特定页面打开页脚编辑器(从 1 开始编号)。
closeHeaderFooterEditorsnone关闭当前打开的页眉/页脚编辑器
closeHeaderEditornone如果页眉编辑器已打开,则关闭它
closeFooterEditornone如果页脚编辑器已打开,则关闭它
setAccentColorcolor: string设置两个编辑器覆盖层的强调色
setHeaderAccentColorcolor: string仅设置页眉覆盖层的强调色
setFooterAccentColorcolor: string仅设置页脚覆盖层的强调色

存储引用

editor.storage.pages 中读取这些内容。标记为 只读 的属性不应直接写入——请使用对应的命令。

布局

属性类型描述
pageFormatPageFormat当前页面格式
zoomnumber当前缩放级别(只读——使用 setZoom
getZoom() => number获取当前缩放级别的便捷方法
pageGapnumber当前页面之间的间距(px)
pageGapBackgroundstring当前页面间距背景颜色
getCurrentPage() => number | null光标所在的 1 起始页码
getDistanceToNextPagebreak(pos: number) => number | nullpos 到下一处分页符的像素距离
getDistanceToPrevPagebreak(pos: number) => number | nullpos 到上一处分页符的像素距离

页眉和页脚(渲染后的 HTML 和 JSON)

当用户通过覆盖层编辑页眉或页脚后,渲染后的 HTML 和底层的 Tiptap JSON 都会暴露在存储中。导出为 DOCX 时,请使用 JSON 形式进行序列化。HTML 属性始终是字符串(在任何编辑之前默认为 '')。JSON 属性在用户首次通过覆盖层编辑对应的页眉或页脚之前为 null

属性类型描述
headerHTMLstring默认页眉渲染后的 HTML
headerJSONRecord<string, any> | null默认页眉的 Tiptap JSON
headerFirstPageHTMLstring首页页眉渲染后的 HTML
headerFirstPageJSONRecord<string, any> | null首页页眉的 Tiptap JSON
headerOddHTMLstring奇数页页眉渲染后的 HTML
headerOddJSONRecord<string, any> | null奇数页页眉的 Tiptap JSON
headerEvenHTMLstring偶数页页眉渲染后的 HTML
headerEvenJSONRecord<string, any> | null偶数页页眉的 Tiptap JSON
footerHTMLstring默认页脚渲染后的 HTML
footerJSONRecord<string, any> | null默认页脚的 Tiptap JSON
footerFirstPageHTMLstring首页页脚渲染后的 HTML
footerFirstPageJSONRecord<string, any> | null首页页脚的 Tiptap JSON
footerOddHTMLstring奇数页页脚渲染后的 HTML
footerOddJSONRecord<string, any> | null奇数页页脚的 Tiptap JSON
footerEvenHTMLstring偶数页页脚渲染后的 HTML
footerEvenJSONRecord<string, any> | null偶数页页脚的 Tiptap JSON
differentFirstPageboolean首页是否不同
differentOddEvenboolean奇偶页是否不同
differentFirstPageFooterboolean首页页脚是否不同(独立标志)
differentOddEvenFooterboolean奇偶页脚是否不同(独立标志)
accentColorstring当前强调色(两者)
headerAccentColorstring当前页眉强调色
footerAccentColorstring当前页脚强调色

活动的内部编辑器状态

当页眉或页脚覆盖层打开时,这些属性会反映当前处于活动状态的是哪一个。适用于构建跟随当前聚焦编辑器的工具栏——完整的工具栏示例请参见 页面页眉和页脚

属性类型描述
activeEditorEditor | null当前活动的页眉/页脚编辑器实例,或 null
activeEditorType'header' | 'footer' | null哪种覆盖层处于活动状态
activePageNumbernumber | null正在编辑的页码
headerEditorOnEditor['on'] | null预绑定的页眉覆盖层内部编辑器事件订阅函数
headerEditorOffEditor['off'] | null预绑定的页眉覆盖层内部编辑器取消订阅函数
footerEditorOnEditor['on'] | null预绑定的页脚覆盖层内部编辑器事件订阅函数
footerEditorOffEditor['off'] | null预绑定的页脚覆盖层内部编辑器取消订阅函数

示例用法

内置格式

import { Editor } from '@tiptap/core'
import { ConvertKit } from '@tiptap-pro/extension-convert-kit'
import { TableKit } from '@tiptap-pro/extension-pages-tablekit'
import { Pages } from '@tiptap-pro/extension-pages'

const editor = new Editor({
  extensions: [
    ConvertKit.configure({ table: false }),
    TableKit,
    Pages.configure({
      pageFormat: 'A4',
      pageGap: 40,
      header: '我的项目',
      footer: '第 {page} 页,共 {total} 页',
      pageGapBackground: '#f8f8f8',
    }),
  ],
})

自定义格式和运行时更改

import { cmToPixels } from '@tiptap-pro/extension-pages'

Pages.configure({
  pageFormat: {
    id: 'custom-page-format',
    width: cmToPixels(22.94),
    height: cmToPixels(35.18),
    margins: {
      top: cmToPixels(2.54),
      right: cmToPixels(2.54),
      bottom: cmToPixels(2.54),
      left: cmToPixels(2.54),
    },
  },
  onPageFormatChange: (pageFormat) => {
    console.log('页面格式已更改:', pageFormat.id)
  },
})

// 稍后切换
editor.commands.setPageFormat('Letter')

页眉和页脚模板标记

headerfooter 都接受标记 {page}(当前 1 起始页码)和 {total}(总页数)。它们会在渲染时替换,并可用于纯 字符串、HTML 字符串以及 JSONContent。