从零开始到打印就绪:Pages 与 DOCX 导出
本指南将带你从零开始搭建一个 Tiptap 编辑器,使用 Pages 扩展实现分页、类似印刷的版式,并支持 DOCX 导入导出,以便构建专业、可直接印刷的工作流。
1. 安装 Pages 技术栈
安装这三个始终会一起使用的 Pro 包,当你使用 Pages 构建时需要它们:
npm install @tiptap-pro/extension-convert-kit \
@tiptap-pro/extension-pages-tablekit \
@tiptap-pro/extension-pages为什么是这三个包
@tiptap-pro/extension-convert-kit 提供编辑器的节点和标记 schema(段落、
标题、列表、图片、标记)。@tiptap-pro/extension-pages-tablekit 提供分页安全的
表格——这是必须的,因为 ConvertKit 内置的表格并不是为分页而设计的。
@tiptap-pro/extension-pages 提供页面布局本身。请确保你已经先完成对
Tiptap 私有 npm registry 的身份验证;有关设置,请参阅 Pro Extensions 指南。
2. 使用 Pages 设置你的编辑器
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',
}),
],
})最佳实践
尽早在你的设置中添加 Pages,这样文档结构和布局从一开始就是一致的。 你之后可以通过命令更改页面格式、页眉和页脚;但如果某个文档在创建时没有考虑分页, 再补加 Pages 会更困难。
3. 添加 DOCX 导出能力
安装 DOCX 导出扩展:
npm install @tiptap-pro/extension-export-docx将其添加到你的编辑器:
import { ExportDocx } from '@tiptap-pro/extension-export-docx'
const editor = new Editor({
extensions: [
ConvertKit.configure({ table: false }),
TableKit,
Pages.configure({
/* ... */
}),
ExportDocx,
],
})3a. 配置 DOCX 导出
DOCX 导出扩展完全在浏览器中运行——没有 JWT,没有 App ID,也没有服务器调用。你需要通过一个 onCompleteExport 回调来配置它,该回调会接收结果:
import { ExportDocx } from '@tiptap-pro/extension-export-docx'
ExportDocx.configure({
// 必需。导出的文件会通过这个回调传递。
onCompleteExport: (result) => {
const blob = new Blob([result], {
type: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
})
const url = URL.createObjectURL(blob)
const a = document.createElement('a')
a.href = url
a.download = 'document.docx'
a.click()
URL.revokeObjectURL(url)
},
// 可选:'blob'(默认)、'buffer'、'string' 等。
exportType: 'blob',
// 可选:覆盖段落、标题、表格样式等。
styleOverrides: {},
// 可选:为你添加的任何自定义 Tiptap 节点定义 DOCX 序列化。
customNodes: [],
})必需项
onCompleteExport 是必需的。导出不会直接返回结果;它会把结果交给你的
回调,由你来下载、上传或处理。
4. 导出你的文档
从编辑器的命令链触发导出:
editor.commands.exportDocx()往返并不完全字节一致
DOCX 导出是忠实的,但不是无损的。有少数特性(下标/上标标记、段落 行高、浮动表格)在往返转换时并不完美。完整列表请参阅 功能支持 矩阵。
5. 将 DOCX 文件导入到你的编辑器中
添加导入扩展,这样用户就可以把 Word 文档加载到分页编辑器中:
npm install @tiptap-pro/extension-import-docximport { ImportDocx } from '@tiptap-pro/extension-import-docx'
const editor = new Editor({
extensions: [
ConvertKit.configure({ table: false }),
TableKit,
Pages.configure({
/* ... */
}),
ExportDocx.configure({
/* ... */
}),
ImportDocx.configure({
appId: 'YOUR_APP_ID', // 你的 Convert App ID
token: 'YOUR_JWT', // 由你的服务器生成的 JWT
// 可选:导入服务应将文档中提取出的图片上传到哪里
// imageUploadConfig: { url: 'https://your-server.com/upload-image' },
}),
],
})要触发导入,请从 <input type="file" /> 传入一个 File:
editor
.chain()
.importDocx({
file,
onImport(context) {
if (context.error) {
// 处理失败(提示、日志、重试等)
return
}
context.setEditorContent(context.content)
},
})
.run()当导入的文档包含页眉和页脚时,Pages 扩展会自动识别它们——它们会在每个渲染页面的顶部和底部显示,无需额外配置。
在哪里获取你的 App ID 和 JWT
有关凭据设置,请参阅 转换安装指南。JWT 必须在服务器端生成;切勿将你的密钥嵌入浏览器中。
接下来的步骤
- Pages 选项 — Pages 暴露的每个选项
- 页面页眉和页脚 — 不同的首页、奇偶页、通过程序打开/关闭编辑器
- PagesTableKit — 详细介绍分页安全表格,包括最重要的已知限制
- 限制 — 不可拆分内容、Pages 不做什么,以及如何处理每种情况
需要帮助吗?
如果你遇到意料之外的问题,请联系支持团队,或者查看文档的其他部分以了解 高级工作流。