通过 REST API 导出 EPUB

Available in Start planBetav2.12.0

EPUB 导出 API 将 Tiptap JSON 文档转换为 EPUB 文件。

查看 Postman 集合

您也可以通过访问我们的Postman 集合来试用文档转换 API。

导出 EPUB

POST /v2/convert/export/epub

/v2/convert/export/epub 端点将 Tiptap JSON 文档转换为 EPUB 格式。发送附带文档的 JSON 请求体的 POST 请求,便可获取可下载的 EPUB 文件。

示例(cURL)

curl --output document.epub -X POST "https://api.tiptap.dev/v2/convert/export/epub" \
    -H "Authorization: Bearer YOUR_TOKEN" \
    -H "X-App-Id: YOUR_APP_ID" \
    -H "Content-Type: application/json" \
    -d '{
      "doc": "{\"type\":\"doc\",\"content\":[{\"type\":\"paragraph\",\"content\":[{\"type\":\"text\",\"text\":\"Hello World\"}]}]}"
    }'

需要订阅

此端点需要有效的 Tiptap 订阅。详见我们的价格页面

必要请求头

名称描述
Authorization用于认证请求的 JWT 令牌。例如:Bearer your-jwt-token
X-App-IdConvert 应用 ID,从 Convert 设置页面获取:https://cloud.tiptap.dev/v2/cloud/convert
Content-Type必须为 application/json

请求体参数

NameTypeDescriptionDefault
docStringTiptap JSON 文档字符串N/A
exportTypestring预期的导出类型blob
styleOverridesObject样式覆盖{}
pageSizeObject页面尺寸配置undefined
pageMarginsObject页面边距配置undefined
headersObject页眉配置undefined
footersObject页脚配置undefined
tableOverridesObject转发到 DOCX 步骤的表级渲染覆盖undefined
paragraphOverridesObject转发到 DOCX 步骤的段落级渲染覆盖undefined
textRunOverridesObject转发到 DOCX 步骤的文本运行渲染覆盖undefined
tableCellOverridesObject转发到 DOCX 步骤的表格单元格渲染覆盖undefined
imageOverridesObject转发到 DOCX 步骤的图像渲染覆盖undefined

页面尺寸配置

pageSize 对象允许您定制导出 EPUB 文档的页面尺寸:

属性类型描述默认值
widthstring页面宽度。必须是正数,单位有效(cm、in、pt、pc、mm、px)"21.0cm"
heightstring页面高度。必须是正数,单位有效(cm、in、pt、pc、mm、px)"29.7cm"

页面边距配置

pageMargins 对象允许您定制导出 EPUB 文档的页面边距:

属性类型描述默认值
topstring页面顶部边距。可为负值。必须为数字加有效单位(cm、in、pt、pc、mm、px)"1.0cm"
bottomstring页面底部边距。可为负值。必须为数字加有效单位(cm、in、pt、pc、mm、px)"1.0cm"
leftstring页面左侧边距。必须为正数加有效单位(cm、in、pt、pc、mm、px)"1.0cm"
rightstring页面右侧边距。必须为正数加有效单位(cm、in、pt、pc、mm、px)"1.0cm"

页眉配置

headers 对象允许您定制导出 EPUB 文档的页眉:

属性类型描述
evenAndOddHeadersboolean是否对奇偶页使用不同的页眉
differentFirstPageboolean是否对首页使用不同的页眉。为 true 时,首页使用 first 配置,非首页使用 default 配置。
defaultstring默认页眉,应用于所有页面,或在启用 evenAndOddHeaders 时应用于奇数页。支持纯文本字符串或字符串化的 Tiptap JSONContent 用于丰富格式。
firststring首页页眉,仅当 differentFirstPagetrue 时启用。支持纯文本字符串或字符串化的 Tiptap JSONContent 用于丰富格式。
evenstring偶数页页眉,仅当启用 evenAndOddHeaders 时启用。支持纯文本字符串或字符串化的 Tiptap JSONContent 用于丰富格式。

纯文本与 Tiptap JSONContent

每个页眉值可以是纯文本字符串(生成简单无样式页眉),也可以是字符串化的 Tiptap JSONContent 对象(支持加粗、斜体、链接等丰富格式)。传递 JSONContent 时,请先用 JSON.stringify() 转换成字符串再发送。

页脚配置

footers 对象允许您定制导出 EPUB 文档的页脚:

属性类型描述
evenAndOddFootersboolean是否对奇偶页使用不同的页脚
differentFirstPageboolean是否对首页使用不同的页脚。为 true 时,首页使用 first 配置,非首页使用 default 配置。
defaultstring默认页脚,应用于所有页面,或在启用 evenAndOddFooters 时应用于奇数页。支持纯文本字符串或字符串化的 Tiptap JSONContent 用于丰富格式。
firststring首页页脚,仅当 differentFirstPagetrue 时启用。支持纯文本字符串或字符串化的 Tiptap JSONContent 用于丰富格式。
evenstring偶数页页脚,仅当启用 evenAndOddFooters 时启用。支持纯文本字符串或字符串化的 Tiptap JSONContent 用于丰富格式。

纯文本与 Tiptap JSONContent

每个页脚值可以是纯文本字符串(生成简单无样式页脚),也可以是字符串化的 Tiptap JSONContent 对象(支持加粗、斜体、链接等丰富格式)。传递 JSONContent 时,请先用 JSON.stringify() 转换成字符串再发送。

Element Overrides

EPUB 生成通过 DOCX 管道完成,因此当发送 Tiptap JSON 时,/export/docx 接受的同样五个元素覆盖也同样适用于这里。 当通过 docxFile 上传预生成的 DOCX 时,它们没有任何效果

五种元素覆盖对象可让你调整各个 DOCX 元素 (表格、段落、文本运行、表格单元格、图片)的渲染方式。每个 覆盖项都会作为基础默认值传递给底层的 DOCX 转换库;来自文档的按节点值在计算后仍然优先。

不进行深度合并

覆盖项中的嵌套对象(例如 bordersmarginstransformation)会被完全替换,而不是进行深度合并。自定义边框某一侧时,请提供你需要的每一侧,以免未定义值漏入。

tableOverrides

应用于每个表格的默认值。最有用的属性:

PropertyTypeDescription
bordersObject各边定义:topbottomleftrightinsideHorizontalinsideVertical。每项都接受 { style, size, color }
marginsObject默认单元格边距 { top, bottom, left, right }(以二十分之一磅为单位)。
widthObject表格宽度 { size, type },其中 type"pct""dxa""auto"
layoutstring"fixed""autofit"
alignmentstring"left" | "center" | "right" | "start" | "end"
cantSplitboolean防止表格跨页拆分。
visuallyRightToLeftboolean使表格从右到左渲染。

paragraphOverrides

应用于每个段落的默认值。最有用的属性:

PropertyTypeDescription
spacingObject{ before, after, line, lineRule },单位为二十分之一磅。line 会被计算出的行高覆盖。
alignmentstring"left" | "center" | "right" | "justified" | "start" | "end"
indentObject{ left, right, firstLine, hanging, start, end },单位为二十分之一磅。
keepNextboolean将此段落与下一段保持在一起。
keepLinesboolean保持段落中的所有行在一起。
pageBreakBeforeboolean在段落前插入分页符。
bidirectionalboolean将段落从右到左渲染。
stylestring指向 styleOverrides 中定义的段落样式 id 的引用。

textRunOverrides

应用于每个文本运行的默认值。按标记格式设置(粗体、斜体、颜色 ……)仍会覆盖这些值。最有用的属性:

PropertyTypeDescription
fontstring字体族名称。
sizenumber字体大小,单位为半磅(24 = 12pt)。
boldboolean默认以粗体渲染。
italicsboolean默认以斜体渲染。
underlineObject{ type, color } — 例如 { type: "single", color: "auto" }
strikeboolean删除线。
colorstring不含前导 # 的十六进制颜色("FF0000")。
highlightstring预定义的高亮颜色名称("yellow""green"、……)。
superScriptboolean以上标形式渲染。
subScriptboolean以下标形式渲染。

tableCellOverrides

应用于每个表格单元格的默认值。最有用的属性:

PropertyTypeDescription
shadingObject{ fill, type, color } — 例如 { fill: "F0F0F0", type: "clear" }
verticalAlignstring"top" | "center" | "bottom"
bordersObject各边单元格边框定义,形状与 tableOverrides.borders 相同。
marginsObject单元格内边距 { top, bottom, left, right },单位为二十分之一磅。
widthObject单元格宽度 { size, type }

imageOverrides

应用于每张图片的默认值。根据文档计算出的图片尺寸 (固有大小或用户调整后的值)在存在时仍然优先。最有用的 属性:

PropertyTypeDescription
transformationObject{ width, height, rotation?, flip? } — 以 96 dpi 计算的像素。
altTextObject{ title, description, name }
floatingObject浮动定位选项(锚点、对齐、偏移、环绕)。

Example cURL combining multiple element overrides

curl --output document.epub -X POST "https://api.tiptap.dev/v2/convert/export/epub" \
    -H "Authorization: Bearer YOUR_TOKEN" \
    -H "X-App-Id: YOUR_APP_ID" \
    -H "Content-Type: application/json" \
    -d '{
      "doc": "{\"type\":\"doc\",\"content\":[{\"type\":\"paragraph\",\"content\":[{\"type\":\"text\",\"text\":\"EPUB with element-level overrides\"}]}]}",
      "paragraphOverrides": {
        "spacing": { "before": 200, "after": 200 }
      },
      "textRunOverrides": {
        "font": "Arial",
        "size": 24
      }
    }'

Example with custom page layout

curl --output document.epub -X POST "https://api.tiptap.dev/v2/convert/export/epub" \
    -H "Authorization: Bearer YOUR_TOKEN" \
    -H "X-App-Id: YOUR_APP_ID" \
    -H "Content-Type: application/json" \
    -d '{
      "doc": "{\"type\":\"doc\",\"content\":[{\"type\":\"paragraph\",\"content\":[{\"type\":\"text\",\"text\":\"Hello World\"}]}]}",
      "pageSize": {
        "width": "210mm",
        "height": "297mm"
      },
      "pageMargins": {
        "top": "20mm",
        "bottom": "20mm",
        "left": "15mm",
        "right": "15mm"
      }
    }'

响应

成功时,API 返回 EPUB 文件的二进制下载流:

  • 状态200 OK
  • Content-Typeapplication/epub+zip
  • Content-Dispositionattachment; filename=export-{timestamp}.epub

错误响应

状态码错误代码描述
400NO_DOCUMENT_PROVIDED请求体中未提供文档
422FAILED_TO_PARSE_DOCX_FILE解析 JSON 输入失败
422FAILED_TO_EXPORT_EPUB_FILE导出中间格式失败
422FAILED_TO_CONVERT_DOCX_TO_EPUB转换为 EPUB 失败