gogcli 文档图片清单指南:使用gog docs images枚举 Google Docs 内嵌与浮动图片
【免费下载链接】gogcliGoogle Workspace in your terminal.项目地址: https://gitcode.com/GitHub_Trending/gogcl/gogcli
gog docs images是 gogcli(Google Workspace in your terminal)提供的 Google Docs 结构化枚举命令之一,用于以命令行方式列出文档中的所有图片资源。本文将围绕该命令的用法、输出格式、全局参数与底层实现展开,结合仓库源码与测试用例,帮助你掌握对 Google Docs 内联图片(Inline Image)与定位图片(Positioned Image)的清单化巡检能力,为文档审计、内容迁移与自动化校验提供可靠数据基础。
命令结构与定位
gog docs images属于gog docs命令家族的只读巡检类子命令(与 tables、headings、paragraphs 并列)。在源码中,它由 internal/cmd/docs.go 注册为:
Images DocsImagesCmd `cmd:"" name:"images" help:"List document images"`其命令层级如下:
gog docs └── images # List document images └── list (ls) # List inline and positioned images父命令与子命令的定义位于 internal/cmd/docs_enumerators.go:
type DocsImagesCmd struct { List DocsImagesListCmd `cmd:"" name:"list" aliases:"ls" help:"List inline and positioned images"` }子命令list支持ls别名,日常巡检时可简写为gog docs images ls。
基本用法
gog docs (doc) images <command> gog docs (doc) images list (ls) <docId> [flags]位置参数<docId>为必填的 Google Docs 文档 ID(命令会通过normalizeGoogleID对输入做标准化处理,也接受文档 URL 中的 ID 片段)。常用示例:
# 列出文档中全部图片(表格输出) gog docs images list 1AbC...xYz # 使用 ls 别名 gog docs images ls 1AbC...xYz # 指定多页签文档中的某个标签页 gog docs images list 1AbC...xYz --tab "附录" # 以 JSON 输出供脚本消费 gog docs images list 1AbC...xYz --json--tab参数与多页签文档
当文档启用了 Google Docs 的 Tabs(页签)功能时,--tab用于按标题或 ID 定位目标页签。从 internal/cmd/docs_enumerators.go 的实现可以看出其内部行为:
- 未指定
--tab时,直接请求documents.get,返回默认页签内容; - 指定
--tab时,请求会附加includeTabsContent=true,随后在扁平化后的页签树中查找目标,并仅针对该页签投影文档内容进行枚举,输出中的tabId字段即来自该页签的TabProperties.TabId。
也就是说,gog docs images list天然支持多页签文档,不会把其他页签的图片混入结果。
输出格式详解
命令支持三种输出模式,由全局 flag 控制。
表格输出(默认)
非 plain 模式会先输出表头:
# OBJECT ID START POSITIONED WIDTH HEIGHT UNIT ALT 1 kix.abc123... 45 false 720 166 PT Diagram Flow各列含义如下:
| 列 | 说明 |
|---|---|
# | 图片在文档中的序号(1 起,按出现顺序) |
OBJECT ID | Google Docs 内部对象 ID(InlineObjectId或PositionedObjectId) |
START | 图片所在位置在正文中的 UTF-16 起始索引 |
POSITIONED | 是否为定位(浮动)图片,true/false |
WIDTH/HEIGHT | 图片宽高(数值部分,无值时为空) |
UNIT | 尺寸单位,Google Docs 中通常为PT(磅) |
ALT | 无障碍文本(由图片的 Title 与 Description 拼接) |
JSON 输出(--json/-j/--machine)
适合脚本解析。顶层封装包含documentId、tabId与images数组:
{ "documentId": "1AbC...xYz", "tabId": "", "images": [ { "index": 1, "objectId": "kix.abc123...", "startIndex": 45, "alt": "Diagram Flow", "positioned": false, "width": 720, "height": 166, "sizeUnit": "PT" } ] }单个图片条目的字段与docsImageListItem结构体一致(定义见 internal/cmd/docs_enumerators.go):
| JSON 字段 | 类型 | 说明 |
|---|---|---|
index | int | 序号 |
objectId | string | 图片对象 ID |
startIndex | int64 | 正文起始索引(定位图片若未锚定到段落则省略) |
alt | string | 无障碍文本 |
positioned | bool | 是否为定位图片 |
width/height | float64 | 尺寸(无值时省略) |
sizeUnit | string | 尺寸单位 |
在 JSON 模式下还可搭配--results-only(仅输出主结果、丢弃 envelope 字段)、--select/--pick/--project(按逗号分隔字段选择输出,支持点路径)进一步裁剪数据。
Plain / TSV 输出(--plain/-p/--tsv)
输出稳定、无表头、无颜色的 TSV 行,字段顺序与表格模式一致(#、OBJECT ID、START、POSITIONED、WIDTH、HEIGHT、UNIT、ALT),其中 ALT 字段内的制表符、换行、反斜杠会被转义(见docsTSVField),保证单行可解析。这一模式特别适合awk/cut流水线处理:
gog docs images ls <docId> --plain | cut -f2全局 Flags 解析
gog docs images与其子命令共享 gogcli 的全局参数集。以下是完整参数表及关键项的解读:
| Flag | 类型 | 默认值 | 说明 |
|---|---|---|---|
--access-token | string | 直接使用给定的 access token(绕过存储的 refresh token;token 约 1 小时过期) | |
-a--account--acct | string | 账户邮箱、别名或auto,用于已认证的 Google API 命令 | |
--client | string | OAuth client 名称(选择已存凭据与对应 token bucket) | |
--color | string | auto | 颜色输出:auto|always|never |
--disable-commands | string | 逗号分隔的禁用命令列表,支持点路径 | |
-n--dry-run--dryrun--noop--preview | bool | 不执行变更,仅打印预期操作并成功退出 | |
--enable-commands | string | 逗号分隔的启用命令前缀列表,点路径限制 CLI | |
--enable-commands-exact | string | 逗号分隔的精确启用命令列表,父命令不会启用子命令 | |
-y--force--assume-yes--yes | bool | 跳过破坏性命令的确认提示 | |
--gmail-no-send | bool | false | 阻止 Gmail 发送操作(Agent 安全开关) |
-h--help | kong.helpFlag | 显示上下文相关帮助 | |
--home | string | 覆盖 gogcli 配置/数据/状态/缓存根目录(等价于GOG_HOME) | |
-j--json--machine | bool | false | 输出 JSON 到 stdout(脚本友好) |
--no-input--non-interactive--noninteractive | bool | 从不提示,失败即退出(适合 CI) | |
-p--plain--tsv | bool | false | 输出稳定可解析的文本(TSV,无颜色) |
--quota-project | string | 用于计费的 Google Cloud 项目(作为X-Goog-User-Project发送;部分 API 与--access-token或 ADC 组合时需要) | |
--readonly | bool | false | 在运行时阻止变更类 API 请求;auth add也只会请求只读 OAuth scope |
--results-only | bool | JSON 模式下只输出主结果(丢弃nextPageToken等 envelope 字段) | |
--select--pick--project | string | JSON 模式下选择逗号分隔的字段(尽力而为,支持点路径) | |
-v--verbose | bool | 启用详细日志 | |
--version | kong.VersionFlag | 打印版本并退出 | |
--wrap-untrusted | bool | false | JSON/raw 输出中,将获取的文本字段用外部不可信内容标记包裹 |
值得注意的是,gog docs images属于只读巡检命令,可与--readonly搭配用于安全审计场景;--no-input使其可无缝接入 CI 脚本做文档合规检查。认证相关参数(--account、--client、--access-token)与全局认证体系一致,未指定时会使用默认账户。
源码级实现原理
两种图片类型的识别
enumerateDocsImages(internal/cmd/docs_enumerators.go)是核心枚举函数,它区分两类图片:
- 内联图片(Inline Image):来自
doc.InlineObjects,且仅当对象的InlineObjectProperties.EmbeddedObject.ImageProperties非空时才计入; - 定位图片(Positioned Image):来自
doc.PositionedObjects,需要PositionedObjectProperties.EmbeddedObject.ImageProperties非空。
深度优先遍历与排序
实现通过递归的walk函数对Body.Content做深度优先遍历:段落中的InlineObjectElement记录为内联图片,段落附带的PositionedObjectIds记录为定位图片;当遇到Table元素时,会递归进入每一行的每一个单元格继续扫描——也就是说,表格单元格内部的图片同样会被枚举,不会遗漏。
收集完成后按StartIndex做稳定排序(sort.SliceStable),保证输出顺序与文档正文顺序一致;之后补齐Index序号。对于未锚定到任何段落的定位图片(如纯浮动图),则按对象 ID 字典序追加在末尾,确保它们也能被呈现。
元数据提取
applyEmbeddedObjectImage(internal/cmd/docs_enumerators.go)负责从EmbeddedObject提取:
- ALT 文本:将
Title与Description拼接并以空格连接、去除首尾空白; - 尺寸:从
Size.Width/Size.Height提取Magnitude(数值)与Unit(单位,如PT); - 尺寸缺失时输出为空,不影响图片条目本身。
测试验证
仓库在 internal/cmd/docs_enumerators_test.go 的TestEnumerateDocsImagesOrderAndMetadata中覆盖了关键行为:构造一个同时包含「锚定定位图片z-last、内联图片inline、未锚定定位图片a-first」的文档,断言最终顺序为z-last→inline→a-first,并校验了内联图片的Alt("Diagram Flow",由 Title 与 Description 拼接)、Width=720、Height=166、Unit="PT"以及Positioned标记的正确性。该测试同时验证了「未锚定定位图片排到最后」的边界行为。
与相邻命令的联动场景
gog docs images list通常不是孤立使用的,它可与文档图片管理的其他命令形成闭环:
- gog docs insert-image:向文档插入图片。支持
--url直接插入公开 HTTPS 图片,或--file上传本地 PNG/JPEG/GIF;--width(默认 468pt)、--height控制尺寸,--at/--after/--before决定插入位置。在批量插入后,可用gog docs images list校验图片是否按预期落位、尺寸是否正确。 - gog docs replace-image:替换文档中的已有图片。此时
gog docs images list输出的OBJECT ID正是替换操作的定位依据——先用清单拿到对象 ID,再按 ID 精准替换,实现「先枚举、后定位、再替换」的无损编辑流程。
此外,Markdown 导入流程(gog docs create --file)支持alt内联图片语法与{width=N height=N}尺寸控制,导入完成后同样可以用本命令核对图片是否全部落盘成功。
实操建议
- 审计文档图片现状:
gog docs images ls <docId> --plain结合awk可按POSITIONED列快速筛选浮动图片,定位「悬浮在文本之上、可能遮挡内容」的图片。 - 校验无障碍文本:检查
ALT列为空的图片条目,作为补充替代文本的待办清单。 - CI 合规检查:在脚本中使用
--json --results-only --no-input,对images数组做断言,例如「图片总数不超过 N」「不允许存在定位图片」等规则。 - 多页签文档:记得为每个页签分别执行
--tab枚举,或将--tab与docs list-tabs的输出组合实现全量巡检。
如需了解gog docs命令家族的完整结构,可参考 gog-docs.md 与 命令索引;相关实现与测试可继续阅读 internal/cmd/docs_enumerators.go 与 internal/cmd/docs_enumerators_test.go。
【免费下载链接】gogcliGoogle Workspace in your terminal.项目地址: https://gitcode.com/GitHub_Trending/gogcl/gogcli
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考