页面
Tiptap Pages 是 Tiptap 的分页编辑层。它在任何 Tiptap 编辑器之上增加了页面边界、页面格式、页眉、页脚、分页符和缩放功能。有了它,你的读者可以像在文字处理器中一样撰写报告、信件、合同或书籍。
Pro 套餐
Pages 是一个 Pro 套餐,包含在 Tiptap 订阅 中。安装前,请先配置好 访问 Tiptap 的私有 NPM 仓库。
这项功能的作用
- 分页布局:内容会在所选格式(A4、Letter、自定义)的可视页面之间流动。
- 页面格式和边距:内置格式提供合理的默认值,自定义格式对象则让你完全掌控。
- 页眉和页脚:可将其定义为静态文本、HTML 字符串或 Tiptap JSON。它们支持
{page}和{total}占位符,并且你可以像 Word 一样,为首页或奇偶页分别设置独立的槽位。 - 脚注:类似 Word 的脚注,会显示在每页页脚上方,自动编号,并在内容重排时跟随其引用位置。参见 脚注。
- 尾注:类似 Word 的尾注,收集在文档末尾,使用小写罗马数字、自动编号,并支持就地编辑。参见 尾注。
- 就地编辑:双击页眉、页脚、脚注或尾注区域,即可在覆盖层中打开功能完整的 Tiptap 编辑器。
- 缩放:视觉缩放范围为
[0.25, 4],不会影响文档内容或导出。 - 分页符:可通过 PageBreak 扩展 插入显式分页,或让 Pages 自动处理分页。
随之安装的内容
Pages 不 自带节点和标记(mark)模式。要使用它,你还需要安装:
@tiptap-pro/extension-convert-kit:用于 Conversion 和 Pages 工作流的标准编辑器套件。ConvertKit 注册了一个支持 DOCX 的 schema(段落、标题、列表、图片、标记)。@tiptap-pro/extension-pages-tablekit:支持分页安全的表格。必须安装,因为 ConvertKit 内置的表格并不是为分页而设计的。
npm install @tiptap-pro/extension-convert-kit \
@tiptap-pro/extension-pages-tablekit \
@tiptap-pro/extension-pagesimport { 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',
header: '我的文档',
footer: '第 {page} 页,共 {total} 页',
}),
],
})完整步骤请参阅 安装指南。
可用内容
- 内置页面格式:A4、A3、A5、Letter、Legal、Tabloid。你也可以定义具有任意尺寸和边距的自定义格式。
- 页眉和页脚内容可以是纯文本、HTML 或 Tiptap JSON,并支持
{page}/{total}占位符。 - 首页面以及奇数/偶数页可使用不同的页眉和页脚,类似 Word。
- 类 Word 的 脚注:每页脚注区域,带自动连续编号,会随其引用重新排版并占用页面空间。
- 类 Word 的 尾注:文档末尾的单一列表,使用小写罗马数字和自动编号,跨页面流动,并保留完整页面外壳。
- 在专用覆盖层中实时编辑页眉、页脚、脚注和尾注。它们会与主文档一起参与协作。参见 为 Pages 添加协作。
- 程序化控制:打开或关闭页眉/页脚/脚注/尾注编辑器,对页面格式变化作出响应,对缩放变化作出响应。
- 可在配置时或运行时通过
editableHeader/editableFooter/footnotes.editable/endnotes.editable选项以及setHeaderEditable/setFooterEditable/setFootnotesEditable/setEndnotesEditable命令来锁定或解锁每个覆盖层的编辑。 - 通过 PagesTableKit 实现分页安全的表格。表格会按比例缩小以适应页面,固定高度的行会被裁剪,声明的宽度会被保留。
- 与 Tiptap Conversion 往返兼容:导入的 DOCX 页眉、页脚、脚注和尾注会自动应用,而导出的 DOCX、PDF、ODT 和 EPUB 文件会保留页眉、页脚和分页信息。DOCX 导出会写入真正的 Word 脚注和尾注。
不可用的内容
这些是真实且已记录的限制,不是 bug。如果你的工作流依赖其中任何一项,请将该约束视为设计边界。
- 大于一页且不可拆分的块会导致无限布局循环。 这是在采用 Pages 之前最重要的一项限制。表格行、图形、定位容器以及大多数其他块格式化上下文(BFC)元素都不能跨页拆分。布局只能把整个块移到下一页。如果该块本身就比页面还高,它也无法放下,布局就会不断尝试将其继续前移,始终无法稳定。结果就是编辑器无响应。这是当前在页面之间拆分内容的方法所固有的硬限制,不是近期路线图中的功能项。完整说明(包括如何检测和预防)请参见 限制。表格相关的具体情况见 PagesTableKit 的已知问题。
- 没有按页样式,也没有页面模板。 每一页都使用相同的布局和视觉样式。
- 没有浏览器打印集成。 如需可直接打印的输出,请使用 Conversion 扩展和 REST 端点。
Expectations
- Beta stage. Pages is still under active development. If you depend on it, pin the exact package version, because minor versions may introduce breaking changes.
- Pixel values are CSS pixels. All sizes in the API correspond to standard browser CSS pixels (1 inch = 96 px). The
cmToPixelsandinchToPixelsutilities can round-trip without loss, so you can create using real-world units. - What you see is what you edit in collaboration. Double-clicking the header or footer opens the full Tiptap editor, and that editor is in the same collaborative session as the main document.
不要期待的内容
- Pages 本身并不是一个完整的编辑器。 它只是一个布局覆盖层。请将其与用于文档 schema 的
ConvertKit以及来自extension-pages-tablekit的TableKit搭配使用。 - Pages 本身不实现 DOCX 的导入或导出。 它是一个渲染目标。若要与文件往返配合使用,请搭配 Conversion 扩展:通过
extension-import-docx导入,通过extension-export-docx、extension-export-pdf等导出。 - Pages 不负责分页内容的表格渲染。 请使用 PagesTableKit,不要使用开源的
@tiptap/extension-table或 ConvertKit 内置表格。
与 Conversion 搭配使用
这两个产品就是为了协同工作而构建的:
- Conversion 概览:导入/导出流水线。
- 导入 DOCX:将 Word 文档带入你的分页编辑器(页眉和页脚会自动应用)。
- 导出 DOCX:导出保留页眉和页脚的分页内容。
- 导出 PDF:将分页布局渲染为 PDF。
- 从零到可打印输出:完整的端到端演示。