通过 REST API 导出 DOC

Available in Start planBetav2.12.0

DOC 导出 API 将 Tiptap JSON 文档转换为 DOC 文件(传统 Microsoft Word 97-2003 格式)。

建议改用 DOCX

DOC 格式是 Microsoft Word 97-2003 的传统格式。对于现代应用,我们推荐导出为 DOCX 格式。仅在需要兼容旧系统时使用 DOC。

查看 Postman 集合

您也可以通过我们的 Postman 集合 来体验文档转换 API。

导出 DOC

POST /v2/convert/export/doc

/v2/convert/export/doc 端点将 Tiptap JSON 文档转换为 DOC 格式。发送包含文档 JSON 的 POST 请求,即可获得可下载的 DOC 文件。

示例(cURL)

curl --output document.doc -X POST "https://api.tiptap.dev/v2/convert/export/doc" \
    -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-Id来自 Convert 设置页面的 Convert 应用 ID:https://cloud.tiptap.dev/v2/cloud/convert
Content-Type必须为 application/json

请求体

名称类型描述默认值
docString作为字符串的 Tiptap 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 对象允许您自定义导出 DOC 文档的页面尺寸:

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

页面边距配置

pageMargins 对象允许您自定义导出 DOC 文档的页面边距:

属性类型描述默认值
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 对象允许您自定义导出 DOC 文档的页眉:

属性类型描述
evenAndOddHeadersboolean是否为奇数页和偶数页使用不同的页眉
differentFirstPageboolean是否首页使用不同的页眉。若为 true,则首页使用 first 值,非首页使用 default 值。
defaultstring每页的默认页眉,或开启 evenAndOddHeaders 时奇数页使用的页眉。支持纯文本字符串或字符串化的 Tiptap JSONContent 以实现丰富格式。
firststring首页页眉,仅当 differentFirstPagetrue 时使用。支持纯文本字符串或字符串化的 Tiptap JSONContent。
evenstring偶数页页眉,仅当开启 evenAndOddHeaders 时使用。支持纯文本字符串或字符串化的 Tiptap JSONContent。

纯文本 vs. Tiptap JSONContent

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

页脚配置

footers 对象允许您自定义导出 DOC 文档的页脚:

属性类型描述
evenAndOddFootersboolean是否为奇数页和偶数页使用不同的页脚
differentFirstPageboolean是否首页使用不同的页脚。若为 true,则首页使用 first 值,非首页使用 default 值。
defaultstring每页的默认页脚,或开启 evenAndOddFooters 时奇数页使用的页脚。支持纯文本字符串或字符串化的 Tiptap JSONContent 以实现丰富格式。
firststring首页页脚,仅当 differentFirstPagetrue 时使用。支持纯文本字符串或字符串化的 Tiptap JSONContent。
evenstring偶数页页脚,仅当开启 evenAndOddFooters 时使用。支持纯文本字符串或字符串化的 Tiptap JSONContent。

纯文本 vs. Tiptap JSONContent

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

元素覆盖

DOC 生成会经过 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浮动定位选项(锚点、对齐、偏移、环绕)。

结合多个元素覆盖的 cURL 示例

curl --output document.doc -X POST "https://api.tiptap.dev/v2/convert/export/doc" \
    -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\":\"DOC with element-level overrides\"}]}]}",
      "paragraphOverrides": {
        "spacing": { "before": 200, "after": 200 }
      },
      "textRunOverrides": {
        "font": "Arial",
        "size": 24
      }
    }'

自定义页面布局示例

curl --output document.doc -X POST "https://api.tiptap.dev/v2/convert/export/doc" \
    -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 返回 DOC 文件的二进制下载:

  • 状态200 OK
  • Content-Typeapplication/msword
  • Content-Dispositionattachment; filename=export-{timestamp}.doc

错误响应

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