文多多aippt(AI自动生成PPT文档项目)开放API接口免费测试

news/2024/12/17 8:33:26/

开放接口

线上接口地址:https://docmee.cn    (这个是线上正常运行的产品,API对接进入开放平台即可)

SDK

  • iframe ui

    github GitHub - veasion/aippt-ui-iframe: UI iframe 接入文多多AiPPT,通过主题/文件/网址等方式生成PPT,支持原生图表、动画、3D特效等复杂PPT的解析和渲染,支持用户自定义模板,支持智能添加动画。AI generates PowerPoint Presentation, Supports parsing and rendering of complex PPT features such as native charts, animations, and 3D effects.

    gitee aippt-ui-iframe: UI iframe 接入文多多AiPPT

  • js / html

    github GitHub - veasion/aippt-js: js/html 接入文多多AiPPT,通过主题/文件/网址等方式生成PPT,支持原生图表、动画、3D特效等复杂PPT的解析和渲染,支持用户自定义模板,支持智能添加动画。AI generates PowerPoint Presentation, Supports parsing and rendering of complex PPT features such as native charts, animations, and 3D effects.

    gitee aippt-js: js/html for aippt demo

  • vue2

    github GitHub - veasion/aippt-vue2: Vue2 接入文多多AiPPT,通过主题/文件/网址等方式生成PPT,支持原生图表、动画、3D特效等复杂PPT的解析和渲染,支持用户自定义模板,支持智能添加动画。AI generates PowerPoint Presentation, Supports parsing and rendering of complex PPT features such as native charts, animations, and 3D effects.

    gitee aippt-vue2: vue2 for aippt demo

  • vue3

    github GitHub - veasion/aippt-vue: Vue3 接入文多多AiPPT,通过主题/文件/网址等方式生成PPT,支持原生图表、动画、3D特效等复杂PPT的解析和渲染,支持用户自定义模板,支持智能添加动画。AI generates PowerPoint Presentation, Supports parsing and rendering of complex PPT features such as native charts, animations, and 3D effects.

    gitee aippt-vue: vue3 for aippt demo

  • react

    github GitHub - veasion/aippt-react: React 接入文多多AiPPT,通过主题/文件/网址等方式生成PPT,支持原生图表、动画、3D特效等复杂PPT的解析和渲染,支持用户自定义模板,支持智能添加动画。AI generates PowerPoint Presentation, Supports parsing and rendering of complex PPT features such as native charts, animations, and 3D effects.

    gitee aippt-react: react for aippt demo

  • java

    github GitHub - veasion/aippt-api-java-demo: Java 接入文多多AiPPT,通过主题/文件/网址等方式生成PPT,支持原生图表、动画、3D特效等复杂PPT的解析和渲染,支持用户自定义模板,支持智能添加动画。AI generates PowerPoint Presentation, Supports parsing and rendering of complex PPT features such as native charts, animations, and 3D effects.

    gitee aippt-api-java-demo: java for aippt demo

  • python

    github GitHub - veasion/aippt-api-python-demo: Python 接入文多多AiPPT,通过主题/文件/网址等方式生成PPT,支持原生图表、动画、3D特效等复杂PPT的解析和渲染,支持用户自定义模板,支持智能添加动画。AI generates PowerPoint Presentation, Supports parsing and rendering of complex PPT features such as native charts, animations, and 3D effects.

    gitee aippt-api-python-demo: python for aippt demo

  • go

    github GitHub - veasion/aippt-api-go-demo: GoLang 接入文多多AiPPT,通过主题/文件/网址等方式生成PPT,支持原生图表、动画、3D特效等复杂PPT的解析和渲染,支持用户自定义模板,支持智能添加动画。AI generates PowerPoint Presentation, Supports parsing and rendering of complex PPT features such as native charts, animations, and 3D effects.

    gitee aippt-api-go-demo: go for aippt demo

  • .net / c#

    github GitHub - veasion/aippt-api-dotnet-demo: .NET / C# 接入文多多AiPPT,通过主题/文件/网址等方式生成PPT,支持原生图表、动画、3D特效等复杂PPT的解析和渲染,支持用户自定义模板,支持智能添加动画。AI generates PowerPoint Presentation, Supports parsing and rendering of complex PPT features such as native charts, animations, and 3D effects.

    gitee aippt-api-dotnet-demo: .net for aippt demo

  • php

    github GitHub - veasion/aippt-api-php-demo: PHP 接入文多多AiPPT,通过主题/文件/网址等方式生成PPT,支持原生图表、动画、3D特效等复杂PPT的解析和渲染,支持用户自定义模板,支持智能添加动画。AI generates PowerPoint Presentation, Supports parsing and rendering of complex PPT features such as native charts, animations, and 3D effects.

    gitee aippt-api-php-demo: php for aippt demo

  • c++

    github GitHub - veasion/aippt-api-cpp-demo: C++ 接入文多多AiPPT,通过主题/文件/网址等方式生成PPT,支持原生图表、动画、3D特效等复杂PPT的解析和渲染,支持用户自定义模板,支持智能添加动画。AI generates PowerPoint Presentation, Supports parsing and rendering of complex PPT features such as native charts, animations, and 3D effects.

    gitee aippt-api-cpp-demo: c++ for aippt demo

接口鉴权

创建接口 token

POST /api/user/createApiToken

请求 header

​ Api-Key 在开放平台获取 获取API-KEY

请求 body

 

{

// 用户ID(自定义用户ID,非必填,最大24位,超过会截取后24位)

// 贵司用户ID,不同uid创建的token数据会相互隔离,主要用于数据隔离

"uid": null,

// 限制 token 最大生成PPT次数(数字,为空则不限制,为0时不允许生成PPT,大于0时限制生成PPT次数)

// UI iframe 接入时强烈建议传 limit 参数,避免 token 泄露照成损失!

"limit": null

}

响应 body

 

{

"data": {

"token": "sk_xxx", // token (调用api接口鉴权用,请求头传token)

"expireTime": 7200 // 过期时间(秒)

},

"code": 0,

"message": "操作成功"

}

请求示例

curl -X POST --location 'https://docmee.cn/api/user/createApiToken' \
--header 'Content-Type: application/json' \
--header 'Api-Key: xxx' \
--data '{"uid": "xxx","limit": 10}'

注意:该接口请在服务端调用,同一个 uid 创建 token 时,之前通过该 uid 创建的 token 会在10秒内过期

场景说明:在UI集成中,为防止 token 滥用,limit 参数可以让第三方集成商维护自己平台用户的使用次数,未注册用户访问时可以创建 limit 为 0 的 token ,用户能使用但生成不了PPT,UI中监听次数用完的事件指导用户登录,登录用户访问时可以根据系统 vip 级别限制和维护系统用户 limit 次数

查询API信息

GET /api/user/apiInfo

请求 header

​ Api-Key 在开放平台获取 获取API-KEY

响应 body

 

{

"data": {

"availableCount": 100, // 可用次数

"usedCount": 0 // 已使用次数

},

"code": 0,

"message": "操作成功"

}

请求示例

curl -X GET --location 'https://docmee.cn/api/user/apiInfo' \
--header 'Api-Key: xxx'

查询所有PPT列表

POST /api/ppt/listAllPptx

请求 header

​ Api-Key 在开放平台获取 获取API-KEY

参数

 

{

"page": 1, // 分页

"size": 10, // 每页大小(最大不超过100)

"id": null, // ppt id(非必填)

"uid": null, // 第三方用户ID(非必填)

"templateId": null, // 模板ID(非必填)

"startDate": "2024-01-01 00:00:00", // 创建开始时间(非必填)

"endDate": "2025-01-01 23:59:59", // 创建结束时间(非必填)

"desc": true // 按时间倒序返回(非必填)

}

响应

 

{

"code": 0,

"total": 1,

"data": [

{

"id": "xxx", // ppt id

"subject": "xxx", // 主题

"coverUrl": "https://xxx.png", // 封面(需要拼接?token={API-KEY}访问)

"fileUrl": "https://xxx.pptx", // 文件(需要拼接?token={API-KEY}访问)

"templateId": "xxx", // 模板ID

"userId": "xxx", // 用户ID / uid

"companyId": 1000,

"createTime": "2024-01-01 10:00:00"

}

],

"message": "操作成功"

}

请求示例

curl -X POST --location 'https://docmee.cn/api/ppt/listAllPptx' \
--header 'Content-Type: application/json' \
--header 'Api-Key: {apiKey}' \
--data '{"page": 1, "size": 10}'

AI PPT

API 接口鉴权

请求 Header

​ token 通过 createApiToken 接口创建的 token,如果是服务端调用也可直接使用 API-KEY 作为 token

接口请求示例

curl --location 'https://docmee.cn/api/ppt/xxx' \
--header 'token: xxx'

封面图片资源访问,需要在 url 上拼接 ?token=xxx

接口调用说明

api 接口有很多种灵活搭配方案,具体取决于您的业务需求。

  • 方案一:直接生成PPT(最简单对接方案)

    • 调用 directGeneratePptx 直接生成PPT 接口,支持流式和非流式,PPT文件通过接口返回的 fileUrl 下载
  • 方案二:实时流式生成PPT(用户体验最佳-文多多官方方案)

    • 调用 generateOutline 生成大纲 接口,流式生成 PPT 大纲目录 markdown.

    • 调用 generateContent 生成大纲内容同时异步生成PPT 接口,这个接口 asyncGenPptx 参数需要传 true,流式生成,根据第一步返回的大纲目录生成完整大纲内容 markdown,异步生成 PPT

    • 在第二步 generateContent 接口中,接收实时流式 json 数据过程中判断 json 中是否有 pptId ,存在时调用 asyncPptInfo 查询异步生成PPT信息 接口,获取异步生成 PPT 的进度和数据(前端实时渲染)

  • 方案三:同步流式生成PPT

    • 调用 generateOutline 生成大纲 接口,流式生成 PPT 大纲目录 markdown.
    • 调用 generateContent 生成大纲内容 接口,这个接口 asyncGenPptx 参数需要传 false,流式生成,根据第一步返回的大纲目录生成完整大纲内容 markdown
    • 调用 generatePptx 生成 PPT 接口,通过完整 markdown 内容合成 PPT,通过 fileUrl 下载
  • 方案四:openai chat 方式生成PPT

    • 调用 /chat/completions OpenAi-对话生成PPT 接口,适用于接入支持 openai 接口的工具平台.
  • 方案五:通过markdown生成PPT

    • 集成方生成 markdown 内容,内容格式如下:

       

      # 主题

      ## 章节

      ### 页面标题

      #### 内容标题一

      这是文本内容...

      ![图片一](https://xxx.png)

      #### 内容标题二

      这是文本内容...

      ![图片二](https://xxx.png)

      示例下载:markdown.md (支持包含图片、表格)

    • 调用 generatePptx 生成 PPT 接口,通过完整 markdown 内容合成 PPT,通过 fileUrl 下载

解析文件内容

POST /api/ppt/parseFileData

请求参数 (multipart/form-data)

参数类型是否必传说明
fileFile文件(限制 50M 以内,最大解析8000个字)
支持格式:doc/docx/pdf/ppt/pptx/txt/md/xls/xlsx/csv/html/epub/mobi/xmind/mm
contentstring用户粘贴文本内容
fileUrlstring文件公网链接
websitestring网址(http/https)
websearchstring网络搜索关键词

响应:

 

{

"data": {

"dataUrl": "https://xxx" // 文件数据url(有效期:当天)

},

"code": 0,

"message": "操作成功"

}

请求示例

curl -X POST --location 'https://docmee.cn/api/ppt/parseFileData' \
--header 'Content-Type: multipart/form-data' \
--header 'token: {token}' \
--form 'file=@test.doc;filename=test.doc' \
--form 'content=文本内容' \
--form 'fileUrl=https://xxx.pdf' \
--form 'website=https://example.com' \
--form 'websearch=上海元符号智能科技有限公司'

生成大纲

POST /api/ppt/generateOutline

参数

 

{

"stream": true, // 是否流式生成(默认流式)

"length": "medium", // 篇幅长度:short/medium/long, 默认 medium, 分别对应: 10-15页/20-30页/25-35页

"lang": null, // 语言: zh/zh-Hant/en/ja/ko/ar/de/fr/it/pt/es/ru

"prompt": null, // 用户要求(小于50字)

// 方式一:通过主题创建

"subject": "xxx", // 主题(与dataUrl可同时存在)

// 方式二:通过文件内容创建

"dataUrl": "https://xxx" // 文件数据url,通过解析文件内容接口返回(与subject可同时存在)

}

响应 event-stream 流式生成

 

{

"text": "",

"status": 1 // 状态:-1异常 1解析文件 3生成中 4完成

}

{ "text": "# ", "status": 3 }

{ "text": " ", "status": 3 }

{ "text": "主题", "status": 3 }

...

{

"text": "",

"status": 4,

"result": {

"level": 1,

"name": "主题",

"children": [

{

"level": 2,

"name": "章节",

"children": [

{

"level": 3,

"name": "页面标题",

"children": [

{

"level": 4,

"name": "内容标题"

}

]

}

]

}

]

}

}

请求示例

curl -X POST --location 'https://docmee.cn/api/ppt/generateOutline' \
--header 'Content-Type: application/json' \
--header 'token: {token}' \
--data '{"subject": "AI未来的发展"}'

生成大纲内容

POST /api/ppt/generateContent

参数

 

{

"stream": true, // 是否流式生成(默认流式)

"outlineMarkdown": "# 主题\n## 章节\n### 页面标题\n#### 内容标题", // 大纲 markdown 文本

"asyncGenPptx": false, // 是否异步生成,这里为 false 同步,异步请见 "AI PPT (异步)" 菜单

"prompt": null, // 用户要求

"dataUrl": null // 文件数据url,调用解析文件内容接口返回

}

响应 event-stream 流式生成

 

{

"text": "",

"status": 3 // 状态:-1异常 1解析文件 3生成中 4完成

}

{ "text": "#", "status": 3 }

{ "text": " ", "status": 3 }

{ "text": "主题", "status": 3 }

...

{

"text": "",

"status": 4,

"result": {

"level": 1,

"name": "主题",

"children": [

{

"level": 2,

"name": "章节",

"children": [

{

"level": 3,

"name": "页面标题",

"children": [

{

"level": 4,

"name": "内容标题",

"children": [

{

"level": 0,

"name": "内容"

}

]

}

]

}

]

}

]

}

}

请求示例

curl -X POST --location 'https://docmee.cn/api/ppt/generateContent' \
--header 'Content-Type: application/json' \
--header 'token: {token}' \
--data '{"outlineMarkdown": "xxx"}'

获取模板过滤选项

GET /api/ppt/template/options

响应

 

{

"data": {

"category": [ // 类目筛选

{ "name": "全部", "value": "" },

{ "name": "年终总结", "value": "年终总结" },

{ "name": "教育培训", "value": "教育培训" },

{ "name": "医学医疗", "value": "医学医疗" },

{ "name": "商业计划书", "value": "商业计划书" },

{ "name": "企业介绍", "value": "企业介绍" },

{ "name": "毕业答辩", "value": "毕业答辩" },

{ "name": "营销推广", "value": "营销推广" },

{ "name": "晚会表彰", "value": "晚会表彰" },

{ "name": "个人简历", "value": "个人简历" }

],

"style": [ // 风格筛选

{ "name": "全部", "value": "" },

{ "name": "扁平简约", "value": "扁平简约" },

{ "name": "商务科技", "value": "商务科技" },

{ "name": "文艺清新", "value": "文艺清新" },

{ "name": "卡通手绘", "value": "卡通手绘" },

{ "name": "中国风", "value": "中国风" },

{ "name": "创意时尚", "value": "创意时尚" },

{ "name": "创意趣味", "value": "创意趣味" }

],

"themeColor": [ // 主题颜色筛选

{ "name": "全部", "value": "" },

{ "name": "橙色", "value": "#FA920A" },

{ "name": "蓝色", "value": "#589AFD" },

{ "name": "紫色", "value": "#7664FA" },

{ "name": "青色", "value": "#65E5EC" },

{ "name": "绿色", "value": "#61D328" },

{ "name": "黄色", "value": "#F5FD59" },

{ "name": "红色", "value": "#E05757" },

{ "name": "棕色", "value": "#8F5A0B" },

{ "name": "白色", "value": "#FFFFFF" },

{ "name": "黑色", "value": "#000000" }

]

},

"code": 0,

"message": "ok"

}

分页查询 PPT 模板

POST /api/ppt/templates

参数

 

{

"page": 1,

"size": 10,

"filters": {

"type": 1, // 模板类型(必传):1系统模板、4用户自定义模板

"category": null, // 类目筛选 ['年终总结', '教育培训', '医学医疗', '商业计划书', '企业介绍', '毕业答辩', '营销推广', '晚会表彰', '个人简历']

"style": null, // 风格筛选 ['扁平简约', '商务科技', '文艺清新', '卡通手绘', '中国风', '创意时尚', '创意趣味']

"themeColor": null // 主题颜色筛选 ['#FA920A', '#589AFD', '#7664FA', '#65E5EC', '#61D328', '#F5FD59', '#E05757', '#8F5A0B', '#FFFFFF', '#000000']

}

}

响应

 

{

"code": 0,

"total": 1,

"data": [

{

"id": "xxx", // 模板ID

"type": 1, // 模板类型:1大纲完整PPT、4用户模板

"coverUrl": "https://xxx.png", // 封面(需要拼接?token=${token}访问)

"category": null, // 类目

"style": null, // 风格

"themeColor": null, // 主题颜色

"subject": "", // 主题

"num": 20, // 模板页数

"createTime": "2024-01-01 10:00:00"

}

],

"message": "操作成功"

}

请求示例

curl -X POST --location 'https://docmee.cn/api/ppt/templates' \
--header 'Content-Type: application/json' \
--header 'token: {token}' \
--data '{"page": 1, "size":10, "filters": { "type": 1 }}'

封面图片资源访问,需要在 url 上拼接 ?token=xxx

模板接口支持国际化,在请求 URL 上传 lang 参数,示例:/api/ppt/templates?lang=zh-CN

国际化语种支持:zh,zh-Hant,en,ja,ko,ar,de,fr,it,pt,es,ru

随机 PPT 模板

POST /api/ppt/randomTemplates

参数

 

{

"size": 30,

"filters": {

"type": 1, // 模板类型(必传):1系统模板、4用户自定义模板

"category": null, // 类目 ['年终总结', '教育培训', '医学医疗', '商业计划书', '企业介绍', '毕业答辩', '营销推广', '晚会表彰', '个人简历']

"style": null, // 风格 ['扁平简约', '商务科技', '文艺清新', '卡通手绘', '中国风', '创意时尚', '创意趣味']

"themeColor": null, // 主题颜色 ['#FA920A', '#589AFD', '#7664FA', '#65E5EC', '#61D328', '#F5FD59', '#E05757', '#8F5A0B', '#FFFFFF', '#000000']

"neq_id": [] // 排查ID集合(把之前查询返回的id排除)

}

}

响应

 

{

"code": 0,

"total": 1,

"data": [

{

"id": "xxx", // 模板ID

"type": 1, // 模板类型:1大纲完整PPT、4用户模板

"coverUrl": "https://xxx.png", // 封面(需要拼接?token=${token}访问)

"category": null, // 类目

"style": null, // 风格

"themeColor": null, // 主题颜色

"subject": "", // 主题

"num": 20, // 模板页数

"createTime": "2024-01-01 10:00:00"

}

],

"message": "操作成功"

}

请求示例

curl -X POST --location 'https://docmee.cn/api/ppt/randomTemplates' \
--header 'Content-Type: application/json' \
--header 'token: {token}' \
--data '{"size":10, "filters": { "type": 1 }}'

封面图片资源访问,需要在 url 上拼接 ?token=xxx

模板接口支持国际化,在请求 URL 上传 lang 参数,示例:/api/ppt/randomTemplates?lang=zh-CN

国际化语种支持:zh,zh-Hant,en,ja,ko,ar,de,fr,it,pt,es,ru

生成 PPT

POST /api/ppt/generatePptx

参数

 

{

"templateId": "xxx", // 模板ID(非必填)

"pptxProperty": false, // 是否返回PPT数据结构

"outlineContentMarkdown": "# 主题\n## 章节\n### 页面标题\n#### 内容标题\n- 内容", // 大纲内容markdown

"notes": null // 备注(PPT页面备注,非必填,数组 ["内容页面一备注", "内容页面二备注"])

}

响应

 

{

"code": 0,

"data": {

"pptInfo": {

// ppt信息

"id": "xxx", // ppt id

"subject": "xxx", // 主题

"coverUrl": "https://xxx.png", // 封面

"fileUrl": "https://xxx.pptx", // PPT文件

"templateId": "xxx", // 模板ID

"pptxProperty": "xxx", // PPT数据结构(json 数据通过 gzip 压缩 base64 编码返回,具体解码和数据结构请见【PPT前端渲染】部分讲解)

"userId": "xxx", // 用户ID

"userName": "xxx", // 用户名称

"companyId": 1000,

"updateTime": null,

"createTime": "2024-01-01 10:00:00"

}

},

"message": "操作成功"

}

请求示例

curl -X POST --location 'https://docmee.cn/api/ppt/generatePptx' \
--header 'Content-Type: application/json' \
--header 'token: {token}' \
--data '{"outlineContentMarkdown": "xxx", "pptxProperty": false}'

直接生成PPT

POST /api/ppt/directGeneratePptx

参数

 

{

"stream": false, // 是否流式生成

"templateId": "xxx", // 模板ID(非必填,为空则随机模板)

"pptxProperty": false, // 是否返回PPT数据结构

"length": "medium", // 篇幅长度:short/medium/long, 默认 medium, 分别对应: 10-15页/20-30页/25-35页

"lang": null, // 语言: zh/zh-Hant/en/ja/ko/ar/de/fr/it/pt/es/ru

"prompt": null, // 用户要求(小于50字)

// 方式一:通过主题创建

"subject": "xxx", // 主题(与dataUrl可同时存在)

// 方式二:通过文件内容创建

"dataUrl": "https://xxx" // 文件数据url,调用解析文件内容接口返回(与subject可同时存在)

}

非流式-响应(application/json)

 

{

"code": 0,

"data": {

"pptInfo": {

// ppt信息

"id": "xxx", // ppt id

"subject": "xxx", // 主题

"coverUrl": "https://xxx.png", // 封面

"fileUrl": "https://xxx.pptx", // PPT文件

"templateId": "xxx", // 模板ID

"pptxProperty": "xxx", // PPT数据结构(json 数据通过 gzip 压缩 base64 编码返回,具体解码和数据结构请见【PPT前端渲染】部分讲解)

"userId": "xxx", // 用户ID

"userName": "xxx", // 用户名称

"companyId": 1000,

"updateTime": null,

"createTime": "2024-01-01 10:00:00"

}

},

"message": "操作成功"

}

请求示例

curl -X POST --location 'https://docmee.cn/api/ppt/directGeneratePptx' \
--header 'Content-Type: application/json' \
--header 'token: {token}' \
--data '{"stream": false, "subject": "AI未来的发展", "pptxProperty": false}'

流式-响应(event-stream)

 

{

"text": "",

"status": 3 // 状态:-1异常 1解析文件 3生成中 4完成

}

{ "text": "#", "status": 3 }

{ "text": " ", "status": 3 }

{ "text": "主题", "status": 3 }

...

{ "text": "", "status": 3, "pptId": "xxx" }

{

"text": "",

"status": 4,

"result": {

// ppt信息

"id": "xxx", // ppt id

"subject": "xxx", // 主题

"coverUrl": "https://xxx.png", // 封面

"fileUrl": "https://xxx.pptx", // PPT文件

"templateId": "xxx", // 模板ID

"pptxProperty": "xxx", // PPT数据结构(json 数据通过 gzip 压缩 base64 编码返回,具体解码和数据结构请见【PPT前端渲染】部分讲解)

"userId": "xxx", // 用户ID

"userName": "xxx", // 用户名称

"companyId": 1000,

"updateTime": null,

"createTime": "2024-01-01 10:00:00"

}

}

请求示例

curl -X POST --location 'https://docmee.cn/api/ppt/directGeneratePptx' \
--header 'Content-Type: application/json' \
--header 'token: {token}' \
--data '{"stream": true, "subject": "AI未来的发展", "pptxProperty": false}'

获取 PPT 列表

POST /api/ppt/listPptx

参数

 

{

"page": 1,

"size": 10

}

响应

 

{

"code": 0,

"total": 1,

"data": [

{

"id": "xxx", // ppt id

"subject": "xxx", // 主题

"coverUrl": "https://xxx.png", // 封面

"templateId": "xxx", // 模板ID

"userId": "xxx", // 用户ID

"userName": "xxx", // 用户名称

"companyId": 1000,

"updateTime": null,

"createTime": "2024-01-01 10:00:00"

}

],

"message": "操作成功"

}

请求示例

curl -X POST --location 'https://docmee.cn/api/ppt/listPptx' \
--header 'Content-Type: application/json' \
--header 'token: {token}' \
--data '{"page": 1, "size": 10}'

加载 PPT 数据

GET /api/ppt/loadPptx?id=

响应

 

{

"code": 0,

"data": {

"pptInfo": {

// ppt信息

// 数据同 generatePptx 生成PPT 接口结构...

"id": "xxx", // ppt id

"subject": "xxx", // 主题

"coverUrl": "https://xxx.png", // 封面

"templateId": "xxx", // 模板ID

"pptxProperty": "xxx", // PPT数据结构(json 数据通过 gzip 压缩 base64 编码返回,具体解码和数据结构请见【PPT前端渲染】部分讲解)

"userId": "xxx", // 用户ID

"userName": "xxx", // 用户名称

"companyId": 1000,

"updateTime": null,

"createTime": "2024-01-01 10:00:00"

}

},

"message": "操作成功"

}

请求示例

curl -X GET --location 'https://docmee.cn/api/ppt/loadPptx?id=xxx' \
--header 'token: {token}'

加载 PPT 大纲内容

POST /api/ppt/loadPptxMarkdown

请求

 

{

"id": "xxx", // pptId

"format": "tree", // 输出格式:text 大纲文本; tree 大纲结构树

}

响应

 

{

"code": 0,

"data": {

"markdownText": "# 主题\n## 章节标题\n### 页面标题\n#### 内容标题\n- 文本内容...", // 大纲markdown文本(当 format 为 text 时返回)

"markdownTree": { // 大纲结构树(当 format 为 tree 时返回)

"level": 1,

"name": "主题",

"children": [

{

"level": 2,

"name": "章节",

"children": [

{

"level": 3,

"name": "页面标题",

"children": [

{

"level": 4,

"name": "内容标题",

"children": [

{

"level": 0,

"name": "文本内容..."

}

]

}

]

}

]

}

]

}

},

"message": "操作成功"

}

请求示例

curl -X POST --location 'https://docmee.cn/api/ppt/loadPptxMarkdown' \
--header 'Content-Type: application/json' \
--header 'token: {token}' \
--data '{"id": "xxx", "format": "tree"}'

下载 PPT

POST /api/ppt/downloadPptx

请求

 

{

"id": "xxx"

}

响应

 

{

"code": 0,

"data": {

"id": "xxx",

"name": "xxx",

"subject": "xxx",

"fileUrl": "https://xxx" // 文件链接(有效期:2小时)

},

"message": "操作成功"

}

请求示例

curl -X POST --location 'https://docmee.cn/api/ppt/downloadPptx' \
--header 'Content-Type: application/json' \
--header 'token: {token}' \
--data '{"id":"xxx"}'

下载-智能动画PPT

GET /api/ppt/downloadWithAnimation?type=1&id=xxx

URL请求

参数类型描述
typenumber动画类型,1依次展示(默认);2单击展示
idstringPPT ID

响应(application/octet-stream)

文件数据流

请求示例

curl -X GET --location 'https://docmee.cn/api/ppt/downloadWithAnimation?type=1&id=xxx' \
--header 'token: {token}'

该接口会在原有的PPT元素对象上智能添加动画效果(元素入场动画 & 页面切场动画)

动画类型介绍:

1 依次展示,表示上一个元素动画结束后立马展示下一个元素动画

2 单击展示,表示在内容页,上一项内容展示完成后需要单击才会展示下一项内容,其他页面效果同依次展示。

更换 PPT 模板

POST /api/ppt/updatePptTemplate

参数

 

{

"pptId": "xxx", // ppt id

"templateId": "xxx", // 模板ID

"sync": false // 是否同步更新PPT文件(默认 false 异步更新,速度快)

}

响应

 

{

"code": 0,

"data": {

"pptId": "xxx",

"templateId": "xxx",

"pptxProperty": { // 更换后的pptx结构数据(json)

// ...

}

}

}

更新 PPT 属性

POST /api/ppt/updatePptxAttr

参数

 

{

"id": "xxx",

// 下面字段不能为空则修改

"name": null,

"subject": null

}

响应

 

{

"code": 0,

"message": "操作成功"

}

请求示例

curl -X POST --location 'https://docmee.cn/api/ppt/updatePptxAttr' \
--header 'Content-Type: application/json' \
--header 'token: {token}' \
--data '{"id":"xxx","name":"xxx"}'

POST /api/ppt/setPptLogo

请求参数 (multipart/form-data)

参数类型是否必传说明
imageFileLogo图片文件(png / jpg)
pptIdstringPPT ID
widthintegerlogo 宽度 px,默认 48
heightintegerlogo 高度 px, 默认 48

响应:

 

{

"data": {

"fileUrl": "https://xxx.pptx" // pptx 文件下载地址

},

"code": 0,

"message": "操作成功"

}

请求示例

curl -X POST --location 'https://docmee.cn/api/ppt/setPptLogo' \
--header 'Content-Type: multipart/form-data' \
--header 'token: {token}' \
--form 'image=@test.png;filename=test.png' \
--form 'pptId=12354768'

保存 PPT

POST /api/ppt/savePptx

参数

 

{

"id": "xxx", // ppt id

"drawPptx": true, // 是否重新渲染PPT文件并上传

"drawCover": true, // 是否重新渲染PPT封面并上传

"pptxProperty": {

// 修改过后的 pptx 页面数据结构树

}

}

响应

 

{

"code": 0,

"data": {

"pptInfo": {

// ppt信息

// 数据同 generatePptx 生成PPT 接口结构...

}

},

"message": "操作成功"

}

请求示例

curl -X POST --location 'https://docmee.cn/api/ppt/savePptx' \
--header 'Content-Type: application/json' \
--header 'token: {token}' \
--data '{"id":"xxx","drawPptx":true,"drawCover":true,"pptxProperty":{}}'

删除 PPT

POST /api/ppt/delete

参数

 

{

"id": "xxx" // ppt id

}

响应

 

{

"code": 0,

"message": "操作成功"

}

请求示例

curl -X POST --location 'https://docmee.cn/api/ppt/delete' \
--header 'Content-Type: application/json' \
--header 'token: {token}' \
--data '{"id":"xxx"}'

修改大纲

POST /ppt/updateOutline

参数

 

{

"outlineMarkdown": "# 主题\n## 章节\n### 页面标题\n#### 内容标题", // 大纲markdown内容

"length": "medium", // 篇幅长度:short/medium/long, 默认 medium, 分别对应: 10-15页/20-30页/25-35页

// 用户修改建议

// 系统内置:用金字塔原理优化、强化大纲结构和过渡、突出大纲主题、让大纲更专业

// 用户自定义:比如 “帮我把大纲改成金字塔结构”

"question": null

}

响应 event-stream,结构同 generateOutline 生成大纲,该接口用来修改调整大纲结构

AI PPT (异步)

Ai 异步流式生成 PPT,只需在调用生成大纲接口后调用下面的 generateContent 接口即可生成PPT,无需再次调用生成PPT接口

生成大纲内容同时异步生成PPT

POST /api/ppt/generateContent

参数

 

{

"templateId": "xxx", // 模板ID(非必填)

"outlineMarkdown": "# 主题\n## 章节\n### 页面标题\n#### 内容标题", // 大纲 markdown 文本

"asyncGenPptx": true, // 异步生成PPT(这里必须为 true 才会流式生成)

"prompt": null, // 用户要求

"dataUrl": null // 文件数据url,调用解析文件内容接口返回

}

响应 event-stream 流式生成

 

{

"text": "",

"status": 3, // 状态:-1异常 0模型重置 1解析文件 2搜索网页 3生成中 4完成

// 下面为异步生成PPT时返回的数据,可以每出现一次就调用 asyncPptInfo 接口获取最新的PPT数据

"pptId": "xxx", // 异步生成pptId

"total": 23, // 总页数

"current": 1 // 当前已生成页数

}

{ "text": "#", "status": 3 }

{ "text": " ", "status": 3 }

{ "text": "主题", "status": 3 }

...

{

"text": "",

"status": 4,

"result": {

"level": 1,

"name": "主题",

"children": [

{

"level": 2,

"name": "章节",

"children": [

{

"level": 3,

"name": "页面标题",

"children": [

{

"level": 4,

"name": "内容标题",

"children": [

{

"level": 0,

"name": "内容"

}

]

}

]

}

]

}

]

}

}

请求示例

curl -X POST --location 'https://docmee.cn/api/ppt/generateContent' \
--header 'Content-Type: application/json' \
--header 'token: {token}' \
--data '{"outlineMarkdown":"xxx","asyncGenPptx":true}'

查询异步生成PPT信息

GET /api/ppt/asyncPptInfo?pptId=

参数

​ pptId 为 generateContent 接口流式返回的pptId

响应

 

{

"code": 0,

"data": {

"total": 23, // 总页数

"current": 1, // 当前已生成页数(如果current >= total时表示PPT生成完成)

"pptxProperty": "xxx" // PPT数据结构(json gzip base64)

}

}

说明:该接口不需要轮询,在 generateContent 接口流式返回 pptId 数据时调用,每出现一次 pptId 就调用一次获取最新的 PPT 信息

注意:这个接口只有在流式生成过程中能查询到数据(临时缓存数据),在PPT生成完成的30秒内过期(查不到数据),此时需要调用 loadPptx 加载 PPT 数据 接口查询。

请求示例

curl -X GET --location 'https://docmee.cn/api/ppt/asyncPptInfo?pptId=xxx' \
--header 'token: {token}'

OpenAI

兼容 openai chat 接口 生成 PPT,鉴权支持请求头 Api-Key 和 Authorization Bearer 两种方式。

对话生成PPT

POST /api/ppt-openai/v1/chat/completions

参数

 

{

"stream": true, // 是否流式

"model": "direct-generate-pptx", // 模型(固定)

"messages": [ // 消息体:不支持连续对话(多个时默认取最后一个user)

{

"role": "user",

"content": "AI未来的发展" // 支持:主题、文档内容、文件链接(公网可访问)

}

]

// 其他扩展参数

// appendLink: true 大纲内容生成完成后是否在文本后面追加封面图片和下载链接(默认true)

// templateId: null 模板ID(默认为 null,系统随机)

// lang: null 语言: zh/zh-Hant/en/ja/ko/ar/de/fr/it/pt/es/ru

// prompt: null // 用户要求(不超过50字)

}

非流式-响应(application/json)

 

{

"id": "1833839690764124160",

"model": "direct-generate-pptx",

"choices": [

{

"index": 0,

"finish_reason": "stop",

"message": {

"role": "assistant",

"content": "# AI未来的发展\n## 1 技术进步\n### 1.1 算法优化\n#### 1.1.1 深度学习\n- 深度学习模型不断优化,提高准确性和效率...|\n\n[封面图片]\n\n[点击下载]" // PPT大纲内容 & 封面和下载链接,请通过markdown渲染

},

"ppt_data": { // PPT数据(扩展属性)

"id": "1833839690764124160", // id

"subject": "AI未来的发展", // 主题

"templateId": "xxx", // 模板ID

"coverUrl": "https://xxx.png", // 封面(可直接访问,有效期8小时)

"fileUrl": "https://xxx.pptx" // PPT文件(可直接访问,有效期8小时)

}

}

],

"object": "chat.completion",

"created": 1726056513,

"usage": {

"completion_tokens": 10000,

"prompt_tokens": 2000,

"total_tokens": 12000

}

}

流式-响应(event-stream)

 

data: {"id":"1833839690764124160","choices":[{"delta":{"content":"#","role":"assistant"},"finish_reason":null,"index":0}],"created":1726056518,"model":"direct-generate-pptx","object":"chat.completion.chunk"}

data: {"id":"1833839690764124160","choices":[{"delta":{"content":" ","role":"assistant"},"finish_reason":null,"index":0}],"created":1726056518,"model":"direct-generate-pptx","object":"chat.completion.chunk"}

data: {"id":"1833839690764124160","choices":[{"delta":{"content":"AI","role":"assistant"},"finish_reason":null,"index":0}],"created":1726056518,"model":"direct-generate-pptx","object":"chat.completion.chunk"}

data: {"id":"1833839690764124160","choices":[{"delta":{"content":"未来","role":"assistant"},"finish_reason":null,"index":0}],"created":1726056518,"model":"direct-generate-pptx","object":"chat.completion.chunk"}

...

data: {"id":"1833839690764124160","choices":[{"delta":{"content":null,"role":"assistant"},"finish_reason":"stop","index":0,"ppt_data":{"companyId":1000,"coverUrl":"https://xxx.png","createTime":1726056519624,"fileUrl":"https://xxx.pptx","id":"1833839690764124160","name":"AI未来的发展","subject":"AI未来的发展","templateId":"1815308477845987328","updateTime":1726056519624,"userId":"xxx","userName":"xxx"}}],"created":1726056529,"model":"direct-generate-pptx","object":"chat.completion.chunk"}

请求示例(python):

 

import json

from openai import OpenAI

if __name__ == '__main__':

# 通过 openai 库直接请求

client = OpenAI(base_url='{域名}/api/ppt-openai/v1', api_key='sk-xxx')

# 是否流式请求

stream = True

response = client.chat.completions.create(

timeout=120,

stream=stream,

model='direct-generate-pptx',

messages=[

{

'role': 'user',

'content': 'AI未来的发展'

}

]

)

if stream:

# 流式

for trunk in response:

choice = trunk['choices'][0]

print(choice['delta']['content'], end='')

if 'ppt_data' in choice:

print(json.dumps(choice['ppt_data']))

else:

# 非流式

choice = response['choices'][0]

print(choice['message']['content'])

if 'ppt_data' in choice:

print(json.dumps(choice['ppt_data']))

JSON

ppt转json

POST /api/pptjson/ppt2json

请求参数 (multipart/form-data)

参数类型说明
fileFilePPTX 文件(必传)
uploadImageboolean图片是否上传到服务器,false 时返回base64图片数据

响应

 

{

"width": 960,

"height": 540,

"pages": [], // 页面结构数据

"font": [], // 字体数据

"slideMasters": [], // 母版结构数据

"version": "1.0"

}

请求示例

curl -X POST --location 'https://docmee.cn/api/pptjson/ppt2json' \
--header 'Content-Type: multipart/form-data' \
--header 'token: {token}' \
--form 'file=@test.pptx' \
--form 'uploadImage=false'

json转ppt

POST /api/pptjson/json2ppt

请求参数

 

{

"width": 960,

"height": 540,

"pages": [], // 页面结构数据

"font": [], // 字体数据

"slideMasters": [], // 母版结构数据

"version": "1.0"

}

响应(文件流) application/octet-stream

请求示例

curl -X POST --location 'https://docmee.cn/api/pptjson/json2ppt' \
--header 'Content-Type: application/json' \
--header 'token: {token}' \
--data '{"width":960,"height":540,"pages": [],"font": [],"slideMasters": [],"version": "1.0"}'

前端渲染 demo 示例: GitHub - veasion/ppt2json: PPT 文件解析为 JSON,并在前端渲染,支持修改 JSON 后反渲染为PPT文件。The PPT file is parsed into JSON and rendered on the front end, supporting modifications to the JSON and re-rendering it back into a PPT file.

自定义模板

上传用户自定义模板

POST /api/ppt/uploadTemplate

请求参数 (multipart/form-data)

参数类型是否必传说明
typeint类型,用户自定义模板传 4(写死)
fileFile文件(仅支持 pptx,幻灯片大小 960x540)
templateIdstring模板ID(更新时传,会覆盖该模板)

响应:

 

{

"code": 0,

"data": {

"id": "xxx", // 模板ID

"type": 4, // 模板类型:4用户模板

"coverUrl": "https://xxx.png", // 封面(需要拼接token才能访问)

"subject": "", // 主题

"pptxProperty": "xxx", // PPT数据结构(json gzip base64)

"num": 20, // 页码

"createTime": "2024-01-01 10:00:00"

},

"message": "操作成功"

}

请求示例

curl -X POST --location 'https://docmee.cn/api/ppt/uploadTemplate' \
--header 'Content-Type: multipart/form-data' \
--header 'token: {token}' \
--form 'type=4' \
--form 'file=@test.doc;filename=test.doc'

模板标准幻灯片大小(16:9)960x540 (33.867x19.05厘米) ,如果尺寸非标准大小,可在 microsoft office 中修改步骤:设计 > 幻灯片大小 > 自定义幻灯片大小 => 33.867x19.05厘米

上传用户自定义模板后,AI会自动标注学习,如果您觉得生成效果有问题,对不上,可以访问下面链接手动纠正 AI 标注结果: https://docmee.cn/marker/{templateId}?token={apiKey} 请把 {templateId} 替换成真实的模板ID,{apiKey} 替换成你的 api-key,示例:文多多 AiPPT | 一键搞定PPT

下载自定义模板

POST /api/ppt/downloadTemplate

请求

 

{

"id": "xxx" // 模板ID

}

响应

 

{

"code": 0,

"data": {

"id": "xxx", // 模板ID

"subject": "", // 主题

"type": 4, // 模板类型:4用户模板

"coverUrl": "https://xxx.png", // 封面(需要拼接token才能访问)

"fileUrl": "https://xxx.pptx?xxx", // 模板下载地址(可直接访问)

"createTime": "2024-01-01 10:00:00"

},

"message": "操作成功"

}

请求示例

curl -X POST --location 'https://docmee.cn/api/ppt/downloadTemplate' \
--header 'Content-Type: application/json' \
--header 'token: {token}' \
--data '{"id": "xxx"}'

删除自定义模板

POST /api/ppt/delTemplateId

请求

 

{

"id": "xxx" // 模板ID

}

响应

 

{

"code": 0,

"message": "操作成功"

}

请求示例

curl -X POST --location 'https://docmee.cn/api/ppt/delTemplateId' \
--header 'Content-Type: application/json' \
--header 'token: {token}' \
--data '{"id": "xxx"}'

设置为公共模板

注意:这里的公共模板是指API-KEY账号级别的公共模板,并非平台公共模板。

POST /api/ppt/updateUserTemplate

请求 header

​ Api-Key 在开放平台获取 获取API-KEY

参数

 

{

"templateId": "xxx", // 模板ID

"isPublic": true // 是否公开(true 公开,API-KEY下创建的所有token可以看到)

}

响应

 

{

"code": 0,

"message": "操作成功"

}

请求示例

curl -X POST --location 'https://docmee.cn/api/ppt/updateUserTemplate' \
--header 'Content-Type: application/json' \
--header 'Api-Key: {apiKey}' \
--data '{"templateId": "xxx", "isPublic": true}'

常见错误码

接口 application/json 错误

 

{

"code": 0, // 错误码:0 代表成功;其他为失败

"message": "操作成功" // 错误提示

}

错误码说明
0操作成功(正常)
-1操作失败(未知错误)
88功能受限(积分已用完 或 非VIP)
98认证失败(检查token是否过期)
99登录过期
1001数据不存在
1002数据访问异常
1003无权限访问
1006内容涉及敏感信息
1009AI服务异常
1010参数错误
1012请求太频繁,限流

SEE 流式请求错误分两种

初始化流式调用时发生错误会返回 application/json 错误信息

 

{

"code": 1010,

"message": "参数错误:name 不能为空"

}

流式过程中遇到错误,会在流中返回 text/event-stream 流式错误信息:

 

data: {"status":-1, "error":"AI模型执行异常"}

PPT 前端渲染

渲染说明

关于 ppt 数据结构在前端渲染问题,我们已经把前端代码开源到 github:

GitHub - veasion/aippt-js: js/html 接入文多多AiPPT,通过主题/文件/网址等方式生成PPT,支持原生图表、动画、3D特效等复杂PPT的解析和渲染,支持用户自定义模板,支持智能添加动画。AI generates PowerPoint Presentation, Supports parsing and rendering of complex PPT features such as native charts, animations, and 3D effects.

GitHub - veasion/aippt-vue-all: Vue 接入文多多AiPPT,通过主题/文件/网址等方式生成PPT,支持原生图表、动画、3D特效等复杂PPT的解析和渲染,支持用户自定义模板,支持智能添加动画。AI generates PowerPoint Presentation, Supports parsing and rendering of complex PPT features such as native charts, animations, and 3D effects.

GitHub - veasion/aippt-react: React 接入文多多AiPPT,通过主题/文件/网址等方式生成PPT,支持原生图表、动画、3D特效等复杂PPT的解析和渲染,支持用户自定义模板,支持智能添加动画。AI generates PowerPoint Presentation, Supports parsing and rendering of complex PPT features such as native charts, animations, and 3D effects.

关于上面 pptxProperty 数据解码,为了减少带宽占用,我们在服务端对 pptxProperty 做了压缩和编码(json 字符串数据通过 gzip 压缩 base64 编码),通过 js 解码:

 

// 依赖js库

// https://github.com/veasion/aippt-js/blob/main/static/base64js.js

// https://github.com/veasion/aippt-js/blob/main/static/pako.js

let pptxProperty = 'xxx'

let gzip = base64js.toByteArray(pptxProperty)

let json_str = pako.ungzip(gzip, { to: 'string' })

let pptxObj = JSON.parse(json_str)

数据结构说明

pptxProperty 解压后的 json 数据结构简易说明

 

{

"width": 960, // PPT宽度

"height": 540, // PPT高度

"font": [ // 嵌入字体

{

"typeface": "HarmonyOS Sans", // 字体

"eotUrl": "https://xxx.eot" // embedding open type font

}

],

"version": "1.0",

"slideMasters": [ // PPT母版&版式(包含主题、版式等)

{

"background": { // 母版背景

"strokeStyle": {},

"realType": "Background",

"anchor": [0, 0, 960, 540], // x,y,width,height

"fillStyle": { // 填充方式

"type": "color", // 类型:color/gradient/texture/pattern/groupFill/bgFill/noFill

"color": {

"color": -1, // 颜色(32bit ARGB) color = (A & 255) << 24 | (R & 255) << 16 | (G & 255) << 8 | (B & 255) << 0, R => (color >> 16) & 255

"realColor": -1 // 真实颜色(根据hsv等偏移计算的真实颜色)

}

}

},

"theme": { // 母版主题

"name": "Office 主题", // 主题名称

"colors": { // 主题颜色

"accent1": -12291388, // 主题颜色1

"accent2": -1213135, // 主题颜色2...

"accent3": -5921371,

"accent4": -16384,

"accent5": -10773547,

"accent6": -9392825,

"lt1": -1,

"dk2": -12299158,

"dk1": -16777216,

"lt2": -1579290,

"bg1": -1,

"tx2": -12299158,

"tx1": -16777216,

"bg2": -1579290,

"hlink": -16423999,

"folHlink": -6992014

},

"majorFontMap": { // 主要字体

"latin": "Calibri",

"ea": "",

"Hans": "等线"

},

"minorFontMap": { // 次要字体

"latin": "Calibri",

"ea": "",

"Hans": "等线"

}

},

"clrMap": { // 颜色映射

"bg1": "lt1",

"bg2": "lt2",

"tx1": "dk1",

"tx2": "dk2"

},

"children": [], // 元素树(数据结构跟page中的children一致)

"slideLayouts": [ // 母版版式

{

"type": "CUST",

"name": "标题幻灯片",

"children": [], // 元素树(数据结构跟page中的children一致)

"background": {

"strokeStyle": {},

"realType": "Background",

"anchor": [0, 0, 960, 540],

"fillStyle": {

"color": {

"color": -1,

"realColor": -1

},

"type": "color"

}

}

}

]

}

],

"pages": [ // PPT页面结构

{

"page": 1, // 第几页

"extInfo": { // 数据信息

"slideMasterIdx": 0, // 对应母版下标

"slideLayoutIdx": 0, // 对应母版下的版式下标

"notes": "这是一个备注", // PPT页面备注

"background": { // 背景

"strokeStyle": {},

"realType": "Background",

"anchor": [0, 0, 960, 540], // x,y,width,height

"fillStyle": { // 填充样式

"type": "color", // color/gradient/texture/pattern/groupFill/bgFill/noFill

"color": { // 颜色

"scheme": "accent1", // 对应主题色

"color": -12291388, // 颜色(32bit ARGB) color = (A & 255) << 24 | (R & 255) << 16 | (G & 255) << 8 | (B & 255) << 0, R => (color >> 16) & 255

"realColor": -12291388 // 真实颜色(32bit ARGB)

}

}

},

"transition": { // 场景动画(具体见 animation.js 中 transitionList)

"blinds": {

"dir": "horz"

},

"spd": "slow"

},

"animationExt": [ // 元素动画(具体见 animation.js 中 animationList)

{

"animation": "弹跳", // 动画名称

"elementId": "1", // 元素ID

"startType": 1, // 开始类型:1单击时(clickEffect);2与上一动画同时(withEffect);3在上一动画之后(afterEffect)

"presetClass": "entr", // entr 进场动画;emph 强调动画;exit 出场动画

"presetId": 26, // 动画ID

"presetSubtype": 0, // 动画子类型

"duration": 1000, // 持续时间(毫秒)

"attr": {} // 其他属性

}

],

"animation": null // 动画原生属性(如果改动了 animationExt 请把当前 animation 属性设置为 null)

},

"children": [ // 元素结构树

{

"id": "1", // id

"type": "text", // 类型:text/freeform/image/container/diagram/connector/table/graphicFrame

"point": [397.09094488188978, 124.36362204724409, 87.24377952755906, 29.081259842519687], // 真实位置(根据缩放偏移等数据计算过的真实位置)[x,y,width,height]

"depth": 1, // 深度

"extInfo": { // 扩展信息

"property": { // 属性

"realType": "TextBox", // 真实类型

"textDirection": "HORIZONTAL", // 文本方向 => HORIZONTAL,VERTICAL,EA_VERTICAL,VERTICAL_270,STACKED

"shapeType": "rect",

"textWordWrap": false, // 是否自动换行

"anchor": [397.09094488188978, 124.36362204724409, 87.24377952755906, 29.081259842519687], // 相对位置 [x,y,width,height]

"textVerticalAlignment": "TOP", // 文本垂直对齐 => TOP,MIDDLE,BOTTOM,JUSTIFIED,DISTRIBUTED

"fillStyle": { // 填充

"type": "color",

"color": {

"scheme": "accent6", // 对应主题色

"color": -9392825, // 颜色(32bit ARGB) color = (A & 255) << 24 | (R & 255) << 16 | (G & 255) << 8 | (B & 255) << 0, R => (color >> 16) & 255

"realColor": -9392825 // 真实颜色(32bit ARGB)

}

},

"geometry": { // 行状

"name": "rect", // 形状,custom 为自定义形状,其他都为系统预置形状

"data": null, // custom 自定义形状 paths 数据

"avLst": null // 调整参数

},

"textAutofit": "SHAPE",

"textInsets": [3.6, 7.2, 3.6, 7.2] // 文本形状调整边距 [top,left,bottom,right]

}

},

"children": [ // 子元素结构树

{

"id": "2", // id

"pid": "1", // pid

"type": "p", // 类型:text 下为 p 段落,p 段落下为 r 字符

"extInfo": {

"property": {

"textAlign": "LEFT", // 段落文本对齐 LEFT,CENTER,RIGHT,JUSTIFY,JUSTIFY_LOW,DIST,THAI_DIST

"fontAlign": null, // 字体对齐 AUTO,TOP,CENTER,BASELINE,BOTTOM

"indent": 0, // 缩进

"bullet": null, // 项目符合

"bulletStyle": null, // 项目符合样式

"leftMargin": null, // 左边距

"rightMargin": null, // 右边距

"lineSpacing": null, // 段落-间距-行距:1.5倍行距为 150, 2倍行距为 200

"spaceBefore": null, // 段落-间距-段前:文本段落之前的行距

"spaceAfter": null // 段落-间距-段后:文本段落之后的行距

}

},

"depth": 2,

"children": [

{

"id": "3",

"pid": "2",

"type": "r", // 类型 r 字符

"text": "文本数据", // 文本数据

"depth": 3,

"extInfo": {

"property": {

"fontSize": 18, // 字体大小

"lang": "zh-CN",

"fontColor": { // 字体颜色填充,结构同 fillStyle

"type": "color", // color/gradient/texture/pattern/groupFill/bgFill/noFill

"color": {

"scheme": null, // 主题色

"color": -16777216, // 颜色(32bit ARGB) color = (A & 255) << 24 | (R & 255) << 16 | (G & 255) << 8 | (B & 255) << 0, R => (color >> 16) & 255

"realColor": -16777216, // 真正颜色(计算后的颜色)

"alpha": null, // 透明度,alpha / 100000.0 * 255

"hueMod": null, // hsv 色相

"hueOff": null, // 偏移

"satMod": null, // hsv 饱和度

"satOff": null, // 偏移

"lumMod": null, // hsv 亮度 lumMod / 100000 => 85000=0.85; 95000=0.95; 50000=0.5

"lumOff": null, // 偏移

"shade": null,

"tint": null

}

}

}

}

}

]

}

]

},

{

"id": "4",

"type": "text",

"point": [267.6364566929134, 240.72732283464567, 98.15283464566929, 98.90913385826772],

"depth": 1,

"extInfo": {

"property": {

"strokeStyle": { // 线条样式

"lineCap": "FLAT", // 线端类型(平/圆/方)

"lineJoin": "ROUND", // 连接类型(圆角/斜角/棱台)ROUND|MITER|BEVEL

"miterLimit": null, // 连接类型-斜角:最大斜接长度

"lineDash": "SOLID", // 短划线类型(线、点、短线、长短交替等)

"lineCompound": "SINGLE", // 复合类型(单线、双线、三线等)

"lineHeadDecoration": null, // 开始箭头类型

"lineTailDecoration": null, // 结尾箭头类型

"lineWidth": 1, // 线条宽度

"paint": { // 画笔样式,结构同 fillStyle

"type": "color",

"color": {

"scheme": "accent1",

"color": -12291388,

"shade": 15000,

"realColor": -15258543

}

}

},

"textDirection": "HORIZONTAL", // 文本方向

"anchor": [267.6364566929134, 240.72732283464567, 98.15283464566929, 98.90913385826772],

"textVerticalAlignment": "MIDDLE",

"fillStyle": {

"color": {

"scheme": "accent2",

"color": -1213135,

"realColor": -1213135

},

"type": "color"

},

"geometry": {

"name": "triangle"

},

"textAutofit": "NORMAL",

"realType": "Auto",

"shapeType": "triangle",

"textInsets": [3.6, 7.2, 3.6, 7.2]

}

},

"children": [

{

"pid": "4",

"id": "5",

"text": "",

"type": "p",

"extInfo": {

"property": {

"leftMargin": 0,

"textAlign": "CENTER"

}

},

"depth": 2,

"children": []

}

]

},

{

"id": "6",

"type": "image", // 图片

"point": [ 535.9091338582678, 238.72732283464567, 127.36362204724409, 127.36362204724409],

"depth": 1,

"extInfo": {

"property": {

"image": "data:image/jpeg;base64,xxx", // 图片数据 url/base64

"fileName": "image1.jpg", // 图片文件名

"extension": ".jpg", // 图片文件后缀

"realType": "Picture",

"shapeType": "rect",

"anchor": [535.9091338582678,238.72732283464567,127.36362204724409,127.36362204724409], // 相对位置 [x,y,width,height]

"fillStyle": { // 填充

"type": "texture", // 类型:蒙版填充

"texture": { // 蒙版

"insets": [0, 0, 0, 0], // 图片裁剪 [top,left,bottom,right]

"stretch": [0, 0, 0, 0], // 图片拉伸 [top,left,bottom,right]

"flipMode": "NONE", // X,Y,XY,NONE

"imageData": "data:image/jpeg;base64,xxx", // 蒙版图片数据,在image类型中数据等于 extInfo.property.image 图片数据

"alpha": 100000, // 透明度 => alpha / 100000

"contentType": "image/jpeg", // 图片内容类型

"alignment": null // TOP/TOP_LEFT/TOP_RIGHT/LEFT/BOTTOM/BOTTOM_LEFT/BOTTOM_RIGHT/RIGHT/CENTER

}

},

"geometry": {

"name": "rect"

},

"contentType": "image/jpeg"

}

},

"children": []

}

]

}

]

}

颜色填充说明

形状填充 fillStyle 和 线条画笔 paint 、文字 fontColor 都是同样填充数据结构

  • 无填充

     

    {

    "type": "noFill"

    }

  • 颜色填充

     

    {

    "type": "color",

    "color": {

    "scheme": null, // 主题色,对应母版主题颜色中的 accent1/accent2/...

    "color": -16777216, // 颜色(32bit ARGB) color = (A & 255) << 24 | (R & 255) << 16 | (G & 255) << 8 | (B & 255) << 0, R => (color >> 16) & 255

    "realColor": -16777216, // 真正颜色(计算后的颜色)

    "alpha": null, // 透明度,alpha / 100000.0 * 255

    "hueMod": null, // hsv 色相

    "hueOff": null, // 偏移

    "satMod": null, // hsv 饱和度

    "satOff": null, // 偏移

    "lumMod": null, // hsv 亮度 lumMod / 100000 => 85000=0.85; 95000=0.95; 50000=0.5

    "lumOff": null, // 偏移

    "shade": null,

    "tint": null

    }

    }

    注意:上面颜色渲染是用 realColor 字段即可,修改也是改 realColor 字段,同时把其他字段设置为 null

    颜色是按位或计算得出来的整数类型,转换方式如下:

    int32 颜色转 rgba 前端颜色:

     

    let color = -16777216 // ARGB

    let r = (color >> 16) & 255 // 红 0-255

    let g = (color >> 8) & 255 // 绿 0-255

    let b = (color >> 0) & 255 // 蓝 0-255

    let a = ((color >> 24) & 255) / 255 // 透明度 0-255 转小数 0-1

    let rgba = `rgba(${r}, ${g}, ${b}, ${a})`

    rgba转int32

     

    let r = 255

    let g = 255

    let b = 255

    let a = 255

    let color = (a & 255) << 24 | (r & 255) << 16 | (g & 255) << 8 | (b & 255) << 0

  • 渐变颜色

     

    {

    "type": "gradient",

    "gradient": {

    "gradientType": "linear", // 类型:linear,circular,rectangular,shape

    "colors": [ // 渐变颜色 color-stop

    {

    "type": "color",

    "color": {

    "scheme": null, // 主题色

    "color": -16777216, // 颜色(32bit ARGB)

    "realColor": -16777216 // 真正颜色(计算后的颜色)

    }

    },

    {

    "type": "color",

    "color": {

    "scheme": null, // 主题色

    "color": -14787035, // 颜色(32bit ARGB)

    "realColor": -14787035 // 真正颜色(计算后的颜色)

    }

    }

    ],

    "fractions": [0.5, 0.5], // offset比例 0-1

    "angle": null, // 角度(确定方向)

    "insets": null // 射线中所在访问占比 [1,0.5,0.5,1]

    }

    }

  • 蒙版

     

    {

    "type": "texture",

    "texture": {

    "imageData": "data:image/jpeg;base64,xxx", // 图片数据(URL/base64)

    "contentType": "image/png", // 图片类型

    "alpha": 100000, // 透明度 => alpha / 100000

    "insets": [0, 0, 0, 0], // 图片裁剪 [top,left,bottom,right]

    "stretch": [0, 0, 0, 0], // 图片拉伸 [top,left,bottom,right]

    "flipMode": "NONE", // X,Y,XY,NONE

    "alignment": null // TOP/TOP_LEFT/TOP_RIGHT/LEFT/BOTTOM/BOTTOM_LEFT/BOTTOM_RIGHT/RIGHT/CENTER

    }

    }

  • 图案

     

    {

    "type": "pattern",

    "pattern": {

    "prst": "vert", // 预置图案类型

    "bgColor": { // 背景色

    "type": "color",

    "color": {

    "scheme": null,

    "color": -16777216,

    "realColor": -16777216

    }

    },

    "fgColor": { // 前景色

    "type": "color",

    "color": {

    "scheme": null,

    "color": -14787035,

    "realColor": -14787035

    }

    }

    }

    }

  • 容器颜色

     

    {

    "type": "groupFill" // 使用父元素容器 container 中的 groupFillStyle 颜色进行填充

    }

  • 背景颜色

     

    {

    "type": "bgFill" // 使用背景颜色填充

    }

容器嵌套说明

容器 container 嵌套后子元素中的位置使用的是相对位置,偏移和缩放取决于父容器中的 interiorAnchor 属性

容器对象结构属性示例:

 

{

"anchor": [10, 20, 100, 200], // 容器位置 [x,y,width,height]

"interiorAnchor": [5, 10, 200, 400], // 内部位置 [x,y,width,height]

"flipHorizontal": false, // 水平翻转

"flipVertical": false, // 垂直翻转

"rotation": 0, // 旋转角度

"groupFillStyle": null // 容器填充颜色,给子元素 groupFill 用

}

子元素位置计算方式

 

// scaleX = anchor[2] / interiorAnchor[2]

// scaleY = anchor[3] / interiorAnchor[3]

// 元素真实x = 元素x * scaleX + 容器x - 容器内部偏移x * scaleX

// 元素真实y = 元素y * scaleY + 容器y - 容器内部偏移y * scaleY

// 元素真实w = 元素w * scaleX

// 元素真实h = 元素h * scaleY


http://www.ppmy.cn/news/1555814.html

相关文章

C语言基础(结构体)

文章目录 构造类型数据类型结构体结构体的定义结构体变量的定义结构体变量的使用结构体数组 构造体类型构造体数组案例 构造体指针构造体成员访问构造体类型求大小共用体/联合体类型 构造类型 数据类型 1.基本类型/基础类型 整数类型 短整型&#xff1a;short/short int(2字…

【Linux金典面试题(下)】41道Linux金典面试问题+详细解答,包含基本操作、系统维护、网络配置、脚本编程等问题。

大家好&#xff0c;我是摇光~&#xff0c;用大白话讲解所有你难懂的知识点 之前写了一篇关于 python 的面试题&#xff0c;感觉大家都很需要&#xff0c;所以打算出一个面试专栏。 【数据分析岗】Python金典面试题 这个专栏主要针对面试大数据岗位、数据分析岗位、数据运维等…

如何用AI技术解锁一键生成PPT的新边界?

当代社会PPT早已不仅是职场人用来开会的工具&#xff0c;更是承载创意、传递信息的桥梁。但面对紧张的时间与无尽的需求&#xff0c;一份吸睛的PPT却往往成为无数人头疼的难题。难道我们真的要在熬夜改幻灯片中度过职业生涯的黄金岁月&#xff1f;答案或许藏在“AI生成PPT”这一…

【操作系统】文件管理

1. 文件和文件系统 文件系统的管理功能是将其管理的程序和数据通过组织为一系列文件的方式实现的。 文件则是指具有文件名的若干相关元素的集合。 元素通常是记录&#xff0c;而记录又是一组有意义的数据项的集合。 可见&#xff0c;基于文件系统的概念&#xff0c;可以把数…

阿里云效流水线部署springboot项目

1.新建流水线,选中部署到阿里云ECS 2.配置流水线源 3.java构建上传,其他都可以默认,打包路径填写jar包路径.(切记不要填写多个打包路径,否则后面会解压到别的目前,暂未解决) 4.主机部署,部署脚本是解压和执行脚本 脚本说明 deploy.sh、compose.yaml、Dockerfile这三个脚本要提…

Leetcode1847:最近的房间

题目描述&#xff1a; 一个酒店里有 n 个房间&#xff0c;这些房间用二维整数数组 rooms 表示&#xff0c;其中 rooms[i] [roomIdi, sizei] 表示有一个房间号为 roomIdi 的房间且它的面积为 sizei 。每一个房间号 roomIdi 保证是 独一无二 的。 同时给你 k 个查询&#xff…

【SpringBoot】配置文件

在 Spring 项目中&#xff0c;我们必须自行创建 Spring 的配置文件&#xff0c;通常命名为 "spring-config.xml" 。但在 SpringBoot 中无需自行创建&#xff0c;在 SpringBoot 项目创建时就存在了即 application.properties 文件。它的用处: 设置项目的启动端口设置数…

简单的Java小项目

学生选课系统 在控制台输入输出信息&#xff1a; 在eclipse上面的超级简单文件结构&#xff1a; Main.java package experiment_4;import java.util.*; import java.io.*;public class Main {public static List<Course> courseList new ArrayList<>();publi…