PicoBot/.qoder/skills/lark-slides/references/lark-slides-xml-presentation-slide-create.md
ooodc a7883dbed9 refactor(todo): 重构待办事项管理逻辑及更新状态规则
- 移除 TodoItem 中的 priority、created_at 和 updated_at 字段
- 强制每个任务都必须有唯一 id,且由用户负责生成
- 修改合并模式逻辑,merge=true 下保留未提及的旧任务
- 支持已完成和已取消任务重新激活(状态改回 pending 或 in_progress)
- 禁止 in_progress 状态退回到 pending,必须标记为 completed 或 cancelled
- 优化状态转换校验,允许特定状态间合法切换
- 简化任务变更消息,移除详细的新增/更新/移除统计
- 更新文档和示例,明确 id 必须由用户生成和使用
- 修复和补充测试,增强状态转换和合并模式验证
- 调整任务时间戳生成逻辑,统一使用当前时间及索引
- 该变更提供更合理的任务状态机械及管理模式,提升稳定性和易用性
2026-06-13 09:22:33 +08:00

8.3 KiB
Raw Blame History

lark-slides xml_presentation.slide create

用途

在指定的 XML 演示文稿中创建新的幻灯片页面,通常用于给 slides +create 创建出的空白 PPT 逐页补充内容。

命令

lark-cli slides xml_presentation.slide create --as user --params '<json_params>' --data '<json_data>'

参数说明

参数 类型 必需 说明
--params JSON string 路径参数与查询参数
--data JSON string 请求体,包含新页面内容

params JSON 结构

{
  "xml_presentation_id": "slides_example_presentation_id",
  "revision_id": -1,
  "tid": "idMock"
}
字段 类型 必需 说明
xml_presentation_id string 目标演示文稿的唯一标识符
revision_id integer 演示文稿版本号,-1 表示最新版本
tid string 锁的事务 ID

data JSON 结构

{
  "slide": {
    "slide_id": "slide_example_id",
    "content": "<slide xmlns=\"http://www.larkoffice.com/sml/2.0\">...</slide>"
  },
  "before_slide_id": "slide_before_target"
}
字段 类型 必需 说明
slide.slide_id string 幻灯片页面 short ID
slide.content string 新幻灯片的 XML 内容
before_slide_id string 插入到指定页面之前

slide XML 结构

slide.content 是一个完整的 <slide> 元素,遵循 SML 2.0 Schema

<slide xmlns="http://www.larkoffice.com/sml/2.0">
  <data>
    <shape type="text" topLeftX="80" topLeftY="80" width="800" height="120">
      <content textType="title">
        <p>标题</p>
      </content>
    </shape>
  </data>
</slide>

详细格式请参考 xml-format-guide.mdxml-schema-quick-ref.md

使用示例

在末尾添加幻灯片

lark-cli slides xml_presentation.slide create --as user --params '{
  "xml_presentation_id": "slides_example_presentation_id"
}' --data '{
  "slide": {
    "content": "<slide xmlns=\"http://www.larkoffice.com/sml/2.0\"><data><shape type=\"text\" topLeftX=\"80\" topLeftY=\"80\" width=\"800\" height=\"120\"><content textType=\"title\"><p>新页面标题</p></content></shape><shape type=\"text\" topLeftX=\"80\" topLeftY=\"200\" width=\"800\" height=\"180\"><content textType=\"body\"><p>内容文本</p></content></shape></data></slide>"
  }
}'

在指定页面前插入幻灯片

lark-cli slides xml_presentation.slide create --as user --params '{
  "xml_presentation_id": "slides_example_presentation_id"
}' --data '{
  "slide": {
    "content": "<slide xmlns=\"http://www.larkoffice.com/sml/2.0\"><data><shape type=\"text\" topLeftX=\"80\" topLeftY=\"80\" width=\"800\" height=\"120\"><content textType=\"title\"><p>插入的标题页</p></content></shape></data></slide>"
  },
  "before_slide_id": "slide_before_target"
}'

带图形元素的幻灯片

lark-cli slides xml_presentation.slide create --as user --params '{
  "xml_presentation_id": "slides_example_presentation_id"
}' --data '{
  "slide": {
    "content": "<slide xmlns=\"http://www.larkoffice.com/sml/2.0\"><data><shape type=\"text\" topLeftX=\"80\" topLeftY=\"80\" width=\"520\" height=\"120\"><content textType=\"title\"><p>数据展示</p></content></shape><shape type=\"rect\" topLeftX=\"700\" topLeftY=\"100\" width=\"200\" height=\"150\"><fill><fillColor color=\"rgb(100, 149, 237)\"/></fill></shape></data></slide>"
  }
}'

从文件读取 XML

# 先创建 slide.xml 文件
cat > slide.xml << 'EOF'
<slide xmlns="http://www.larkoffice.com/sml/2.0">
  <data>
    <shape type="text" topLeftX="80" topLeftY="80" width="800" height="120">
      <content textType="title">
        <p>从文件加载</p>
      </content>
    </shape>
    <shape type="text" topLeftX="80" topLeftY="200" width="800" height="180">
      <content textType="body">
        <p>这是从文件读取的幻灯片内容</p>
      </content>
    </shape>
  </data>
</slide>
EOF

# 然后创建幻灯片
lark-cli slides xml_presentation.slide create --as user \
  --params '{"xml_presentation_id":"slides_example_presentation_id"}' \
  --data "$(jq -n --arg content "$(cat slide.xml)" '{slide:{content:$content}}')"

返回值

成功时返回创建的幻灯片信息:

{
  "code": 0,
  "data": {
    "slide_id": "slide_example_id",
    "revision_id": 100
  },
  "msg": "success"
}

返回字段说明

字段 类型 说明
data.slide_id string 新幻灯片的唯一标识
data.revision_id integer 演示文稿最新版本号

slide 元素可用子元素

元素 说明
<style> 页面样式(背景填充)
<data> 图形元素容器shape、img、table、chart、whiteboard 等)
<note> 演讲者备注

Important

本地图片必须先上传xml_presentation.slide.create 不识别 @./local.png 占位符(那是 +create --slides 的语法糖)。直接调本接口添加带图新页时,必须先用 slides +media-upload 拿到 file_token,再写进 <img src="<file_token>">

如果是从零开始建带图 PPT强烈建议改用 slides +create --slides '[...]' 一步搞定(自动上传 + 替换 token

常见错误

错误码 含义 解决方案
404 演示文稿不存在 检查 xml_presentation_id 是否正确
400 XML 格式错误 检查 slide.content 是否是完整 <slide> 元素
400 请求体结构错误 检查是否按 slide.contentbefore_slide_id 包装
403 权限不足 检查是否拥有 slides:presentation:updateslides:presentation:write_only scope
3350001 XML 非 well-formed 或服务端参数校验失败 优先检查未转义字符:文本 Q&A -> Q&amp;A,文本 < / > 写成 &lt; / &gt;,属性 URL a=1&b=2 -> a=1&amp;b=2

注意事项

  1. 执行前必做: 使用 lark-cli schema slides.xml_presentation.slide.create 查看最新的参数结构
  2. slide.content 格式: 必须是完整的 <slide> 元素,不是整个 presentation
  3. 命名空间建议: 协议标准写法应带 xmlns,例如 <slide xmlns="http://www.larkoffice.com/sml/2.0">;当前服务端实现可能兼容不带 xmlns 的输入,但不作为协议保证
  4. fill / border 写法: 颜色填充使用 <fill><fillColor color="..."/></fill>,边框常用 <border color="..." width="2"/>
  5. 插入位置: 通过 before_slide_id 指定插入目标,而不是用 position
  6. JSON 转义: 如果直接内联 XML需要正确转义双引号
  7. 建议: 先使用 xml_presentations.get 获取现有结构,再添加新页面

批量添加建议

如果需要添加多张幻灯片,建议先明确每一页的 before_slide_id,或直接按最终顺序逐页追加:

#!/bin/bash

PRESENTATION_ID="slides_example_presentation_id"

declare -a slides=(
  '<slide xmlns="http://www.larkoffice.com/sml/2.0"><data><shape type="text" topLeftX="80" topLeftY="80" width="800" height="120"><content textType="title"><p>页面 1</p></content></shape></data></slide>'
  '<slide xmlns="http://www.larkoffice.com/sml/2.0"><data><shape type="text" topLeftX="80" topLeftY="80" width="800" height="120"><content textType="title"><p>页面 2</p></content></shape></data></slide>'
  '<slide xmlns="http://www.larkoffice.com/sml/2.0"><data><shape type="text" topLeftX="80" topLeftY="80" width="800" height="120"><content textType="title"><p>页面 3</p></content></shape></data></slide>'
)

for slide_xml in "${slides[@]}"; do
  payload=$(jq -n --arg content "$slide_xml" '{slide:{content:$content}}')
  lark-cli slides xml_presentation.slide create --as user --params "{\"xml_presentation_id\":\"$PRESENTATION_ID\"}" --data "$payload"
done

相关命令