JitWord 文档处理开放接口
面向企业系统集成、业务中台、OA 流程、合同管理和知识库场景,提供 DOCX 导入、解析、在线编辑与导出能力。你可以通过 API 将本地 Word 文档转换为可协作编辑的在线文档,并在编辑器中继续查看、编辑和导出。
快速开始
从上传 DOCX 到打开在线编辑器,推荐按以下步骤完成首次联调。
环境配置
配置项会保存到浏览器 localStorage,便于重复测试。独立静态服务运行在 5500 端口时,必须显式配置后端地址。
token 和 api 参数,确保编辑器访问与导入接口使用同一个后端。鉴权说明
需要用户身份的接口应在请求头中携带 JWT,服务端会使用 token 绑定文档 owner。
| 位置 | 格式 | 说明 |
|---|---|---|
| Header | Authorization: Bearer <token> | 导入、导出、文档列表、文档信息、开放文档数据、版本管理列表、修订记录和批注数据接口需要。 |
| 登录白名单 | IP / CIDR / Domain | 管理员可在入口页“开放接入”限制注册/登录来源;关闭或规则为空时默认放行。 |
| 同域登录态 | localStorage.jwt_token | 本文档页与编辑器同源部署时,若未手动填写 Token,会自动复用编辑器登录态,无需重复粘贴。 |
| 编辑器链接 | ?token=<token>&api=<apiBase> | 编辑器打开后会写入本地登录态,并清理 URL 参数。 |
注册与登录
开放认证接口复用系统现有用户体系,登录成功后返回 JWT,后续接口使用同一 Token。
| 接口 | 请求体 | 说明 |
|---|---|---|
| /api/v1/user/register | { "username": "demo", "password": "123456" } | 注册成功即返回 token,可能受登录白名单限制。 |
| /api/v1/user/login | { "username": "demo", "password": "123456" } | 登录成功返回 data.token。 |
curl -X POST "http://localhost:3002/api/v1/user/register" \
-H "Content-Type: application/json" \
-d '{"username":"demo","password":"123456"}'
curl -X POST "http://localhost:3002/api/v1/user/login" \
-H "Content-Type: application/json" \
-d '{"username":"demo","password":"123456"}'
我的文档列表
获取当前登录用户拥有的文档列表,普通用户默认只能查询自己的文档。
curl -X GET "http://localhost:3002/api/v1/documents?filter=active&scope=mine" \ -H "Authorization: Bearer <token>"
DOCX 导入并创建文档
推荐接入接口。上传 DOCX 后,服务端完成解析、创建文档、写入内容、落库批注,并返回 documentId。
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| file | file | 是 | DOCX 文件,字段名固定为 file。 |
| publicPermission | string | 否 | private/read/edit。测试页默认使用 edit。 |
| name | string | 否 | 文档名称,不传时使用文件名。 |
curl -X POST "http://localhost:3002/api/v1/parse/docx-v2-import" \ -H "Authorization: Bearer <token>" \ -F "file=@demo.docx" \ -F "publicPermission=edit"
Excel 导入并创建表格
上传 XLSX 后,服务端解析为表格快照、创建 sheet 类型文档,并返回可直接打开的 Excel 编辑器链接。
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| file | file | 是 | Excel 文件,字段名固定为 file,推荐 .xlsx。 |
| publicPermission | string | 否 | private/read/edit。测试页默认使用 edit。 |
| name | string | 否 | 表格名称,不传时使用文件名。 |
curl -X POST "http://localhost:3002/api/v1/parse/excel-v2-import" \ -H "Authorization: Bearer <token>" \ -F "file=@demo.xlsx" \ -F "publicPermission=edit"
DOCX 高保真解析
只解析不创建文档,返回 JitWord JSON、解析摘要、诊断报告和 Word 批注信息。
| 能力 | 说明 |
|---|---|
| 结构解析 | 正文、标题、表格、列表、制表位、样式等。 |
| 公式解析 | 支持 OMML 公式转换。 |
| 适用方式 | 适合调用方自行保存文档内容或做解析质量检查。 |
DOCX 转 HTML
基础 HTML 解析能力,适合轻量预览或兼容旧接入方式。
| 接口 | 说明 | 鉴权 |
|---|---|---|
| /api/v1/parse/doc2html | 返回完整 HTML。 | 免登录 |
| /api/v1/parse/doc2html2 | 分页 HTML 解析,返回 docId 和页数。 | 免登录 |
按文档 ID 导出 DOCX
根据已经存在的在线文档 ID 导出 Word 文件。
按 JSON 内容导出 DOCX
调用方直接提交编辑器 JSON 内容,服务端生成并返回 Word 文件。
{
"content": { "type": "doc", "content": [] },
"filename": "demo.docx",
"documentId": "可选,用于加载批注"
}
按文档 ID 导出 PDF
根据已经存在的在线文档 ID,在服务端渲染并导出 PDF 文件。
| 要点 | 说明 |
|---|---|
| 返回内容 | application/pdf 字节流,Content-Disposition 携带以文档名命名的文件名。 |
| 渲染机制 | 服务端无头浏览器复用编辑器打印管线,产物与前端「打印 → 另存为 PDF」一致。 |
| 耗时 | 同步渲染返回,常规数秒,大文档最长约 90 秒;依赖渲染服务(browser-service)在线,经网关接入时读超时建议 ≥120 秒。 |
| 常见错误 | 404 文档不存在 | 403 无权限 | 429 导出繁忙 | 503 渲染服务未启动 | 504 渲染超时。 |
curl -X GET "http://localhost:3002/api/v1/export/pdf/<documentId>" \ -H "Authorization: Bearer <token>" \ -o export.pdf
指定文档信息
根据文档 ID 获取文档元信息、页眉页脚、内容存在状态和当前 Token 对该文档的权限信息。
| 字段 | 说明 |
|---|---|
| id / name / type | 文档唯一 ID、名称和类型,普通文档默认 type 可为空或 doc。 |
| ownerId / ownerName | 文档所有者信息,用于业务系统做归属映射。 |
| publicPermission | private、read 或 edit。 |
| headerFooter | 页眉页脚配置数据;没有配置时为 null。 |
| hasContent | 服务端是否已存储真实正文内容。 |
| _userPermission | 当前 Token 对文档的访问、编辑、批注权限。 |
curl -X GET "http://localhost:3002/api/v1/documents/<documentId>" \ -H "Authorization: Bearer <token>"
指定文档数据
统一读取普通文档、表格、思维导图的数据正文,服务端会复用现有文档权限判断。
| 字段 | 说明 |
|---|---|
| document | 裁剪后的文档元信息,包含 id、name、type、owner、权限和时间。 |
| permission | 当前 Token 对此文档的访问权限。 |
| contentType | doc、sheet 或 mindmap。 |
| content | 正文数据;暂无内容时为 null 并返回明确 message。 |
curl -X GET "http://localhost:3002/api/v1/open/documents/<documentId>/data" \ -H "Authorization: Bearer <token>"
版本管理列表
获取指定文档的历史版本列表(只返回版本元数据,不包含正文),服务端复用现有文档权限判断。
| 字段 | 说明 |
|---|---|
| document | 裁剪后的文档元信息(id、name、type、owner、权限和时间)。 |
| permission | 当前 Token 对此文档的访问权限。 |
| versions | 当页版本列表,每条包含 id、title、description、isAutoSave、author、createdAt、size 等元数据;不含版本正文 content。 |
| total / page / limit | 总条数与分页参数。 |
curl -X GET "http://localhost:3002/api/v1/open/documents/<documentId>/versions?page=1&limit=20" \ -H "Authorization: Bearer <token>"
修订记录与批注数据
读取指定文档的审阅相关数据:修订接口返回正文中的修订标记(插入/删除/格式修改,与编辑器审阅面板同口径),批注接口返回划词评论数据;在线测试会并行请求两个接口并合并展示。
| 接口 | 参数 | 说明 |
|---|---|---|
/api/v1/open/documents/{documentId}/revisions | 无 | 获取修订记录(tracked changes):同一修订的多段文本归并为一条,含类型、作者、时间、文本片段及汇总统计。注意与「版本管理列表」、编辑历史是不同的数据。 |
/api/v1/comments | documentId | 获取该文档批注与回复数据,包含批注内容、引用文本、作者和扩展字段。 |
curl -X GET "http://localhost:3002/api/v1/open/documents/<documentId>/revisions" \ -H "Authorization: Bearer <token>" curl -X GET "http://localhost:3002/api/v1/comments?documentId=<documentId>" \ -H "Authorization: Bearer <token>"
创建文档
创建一篇新文档,可选携带初始正文内容(ProseMirror JSON)。创建成功后返回文档 ID,可用于后续保存、导出、删除等操作。
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
name | string | 是 | 文档名称 |
type | string | 否 | 文档类型:doc(默认)/ sheet / mindmap |
content | object | 否 | 初始正文(ProseMirror JSON,仅 type=doc 时生效),形如 {"type":"doc","content":[...]} |
publicPermission | string | 否 | 文档权限:private(默认,私有)/ read(公开只读)/ edit(公开可编辑) |
GET /api/v1/open/documents/{id}/data 读取完整正文,或用 PUT /api/v1/open/documents/{id}/content 更新正文。curl -X POST "http://localhost:3002/api/v1/open/documents" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{"name":"开放平台测试文档","type":"doc"}'
保存文档内容
通过 REST 接口直接写入文档正文(ProseMirror JSON)。适用于程序化生成文档内容、批量导入等场景。
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
content | object | 是 | 标准 ProseMirror JSON,顶层 type 必须为 "doc",content 为节点数组 |
409 Conflict 拒绝写入,以避免覆盖用户实时编辑。请确保无用户在线编辑时再调用此接口。curl -X PUT "http://localhost:3002/api/v1/open/documents/<documentId>/content" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{"content":{"type":"doc","content":[{"type":"paragraph","content":[{"type":"text","text":"Hello"}]}]}}'
设置文档权限
修改指定文档的公开权限。支持三级权限:私有(仅所有者/管理员可见)、公开只读、公开可编辑。仅文档所有者或管理员可操作。
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
publicPermission | string | 是 | 目标权限:private(私有)/ read(公开只读)/ edit(公开可编辑) |
| 权限值 | 效果 |
|---|---|
private | 仅文档所有者和管理员可见、可编辑 |
read | 任何已登录用户可查看,仅所有者/管理员可编辑 |
edit | 任何已登录用户可查看并编辑 |
publicPermission 参数直接指定初始权限,无需额外调用此接口。curl -X PUT "http://localhost:3002/api/v1/open/documents/<documentId>/permission" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{"publicPermission":"edit"}'
删除文档
软删除指定文档(移入回收站)。仅文档所有者或管理员可操作,模板文档不允许通过此接口删除。
| 字段 | 类型 | 说明 |
|---|---|---|
documentId | string | 要删除的文档 ID |
curl -X DELETE "http://localhost:3002/api/v1/open/documents/<documentId>" \ -H "Authorization: Bearer <token>"
模板批量合成 · 能力概览
用「一个模板 + 一组变量数据」批量生成合同、通知书、证书、报告等文档。鉴权复用现有 JWT,无需额外接入成本。
output=doc 落库并返回 docId 与编辑器链接;output=json 直接返回合成后的 ProseMirror JSON,不落库。/api/v1/open/templates 命名空间下,自动受 JWT 保护。请先在「环境配置」中填写后端地址与访问 Token(可在「注册与登录」中一键获取)。模板列表
列出当前 Token 可用于合成的模板。可按 scope 过滤,并可附带变量结构。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| scope | string | 否 | 不传=全部可见模板;official=公开模板;mine=本人创建的模板。 |
| withVariables | string | 否 | 传 1 时每项附带完整 variables 变量结构,便于直接生成填写骨架。 |
| 字段 | 说明 |
|---|---|
| id / title / category / desc | 模板 ID、标题、分类与描述。 |
| variableCount / hasVariables | 变量数量与是否含变量。 |
| public | 是否为公开模板。 |
| updatedAt / variablesUpdatedAt | 模板与变量的更新时间。 |
curl -X GET "http://localhost:3002/api/v1/open/templates?withVariables=1" \ -H "Authorization: Bearer <token>"
模板变量结构
查看指定模板的变量定义(字段名、类型、是否必填、枚举),据此组织合成数据。
| 字段 | 说明 |
|---|---|
| templateId / title | 模板 ID 与标题。 |
| variables | 变量定义数组,每项含 key、label、type、required、defaultValue、options 等(扁平,向后兼容)。 |
| schema | 结构化变量描述:scalars(顶层标量变量)、tables(循环表格,按 tableId 分组,含列清单与示例行)、example(可直接提交的 values 骨架)。 |
| variablesUpdatedAt | 变量结构最近更新时间。 |
text、number、date、select、image、signature、seal、tableColumn。values 顶层字段;它以所在表格的 tableId 为 key,值为「行对象数组」——每行一个对象,字段名对应列 key。请直接参考 schema.example / schema.tables 组织数据。curl -X GET "http://localhost:3002/api/v1/open/templates/<templateId>/variables" \ -H "Authorization: Bearer <token>"
单篇合成
用一组变量数据合成一份文档。默认创建在线文档并返回 docId 与编辑器链接;也可只返回合成后的 JSON。
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| values | object | 是 | 变量键值对。标量变量直接用变量 key;循环表格变量以 tableId 为 key,值为行对象数组(见变量结构的 schema.example)。 |
| unfilledStrategy | string | 否 | 未填变量处理:default(默认值)、empty(留空)、keepPlaceholder(保留占位符)。 |
| name | string | 否 | 生成文档名称,不传时使用模板标题。 |
| output | string | 否 | doc(默认,落库并计入配额)或 json(仅返回内容,不落库、不计配额)。 |
output=doc 会占用当前用户的文档配额(管理员豁免);仅需内容用于服务端渲染/导出时建议使用 output=json。curl -X POST "http://localhost:3002/api/v1/open/templates/<templateId>/generate" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{"values":{},"output":"doc"}'
批量合成
用一个模板 + 一组行数据批量生成多篇文档。单次最多 200 条,单条失败不影响其它条。
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| items | array | 是 | 数据行数组,每项 { name?, values, unfilledStrategy? },最多 200 条。 |
| output | string | 否 | doc(默认)或 json。 |
| stopOnError | boolean | 否 | 为 true 时首个失败即停止后续;默认 false(尽力全部处理)。 |
| 字段 | 说明 |
|---|---|
| summary | { total, success, failed } 统计。 |
| results | 逐条结果:{ index, status, docId?, name?, url?, content?, message? }。 |
const res = await fetch(`${API}/api/v1/open/templates/${templateId}/batch-generate`, {
method: 'POST',
headers: { 'Authorization': `Bearer ${token}`, 'Content-Type': 'application/json' },
body: JSON.stringify({
output: 'doc',
items: [
{ name: '张三-录用通知书', values: { 姓名: '张三' } },
{ name: '李四-录用通知书', values: { 姓名: '李四' } },
],
}),
});
const { data } = await res.json();
console.log(data.summary, data.results);
curl -X POST "http://localhost:3002/api/v1/open/templates/<templateId>/batch-generate" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{"output":"doc","items":[{"values":{}}]}'
核心字段
接入时最常用的数据字段说明。
| 字段 | 含义 | 建议 |
|---|---|---|
| documentId | 在线文档唯一 ID。 | 保存到业务系统,用于打开、导出、协作。 |
| publicPermission | 访问权限:private/read/edit。 | 生产建议 private;演示测试可用 edit。 |
| ownerId | 文档所有者用户 ID。 | 应与导入 Token 中的 id 一致。 |
| api | 编辑器运行时 API 地址。 | 跨域/独立部署时必须保持与上传后端一致。 |
常见问题
联调中最常见的错误与排查方式。