Google 文档的结构

本指南介绍了 Google 文档的内部结构:构成该文档的元素以及它们之间的关系。

顶级元素

文档的顶层元素包括正文和整个文档的一些其他属性:

document: {
    body: ... ,
    documentStyle: ... ,
    lists: ... ,
    documentId: ... ,
    namedStyles: ... ,
    revisionId: ... ,
    title: ...
}

要在正文内容之外操作全局文档功能,最好使用一个或多个文档模板,它们可用作以编程方式生成新文档的基础。

正文内容

您可以或可能希望以编程方式使用的大多数项目都是正文内容中的元素:

正文内容示意图。

结构元素

正文内容只是一系列 StructuralElement 对象。内容元素会对每个 StructuralElement 对象进行个性化设置,如下图所示:

结构元素示意图。

结构元素及其内容对象包含文档的所有文本、内嵌图片等。

段落包含一种称为 ParagraphElement 的特殊元素类型,其作用类似于 StructuralElement。一组内容元素类型会对自己的 ParagraphElement 进行个性化设置,如下图所示:

段落元素的示意图。

如需查看完整文档结构的示例,请参阅 JSON 格式的文档示例转储。 在输出中,您可以看到许多关键结构和内容元素,以及起始索引和结束索引的使用,如下一部分所述。

起始和结束索引

正文内容中的大多数元素都具有 startIndexendIndex 属性。它们用于指明元素相对于起始部分和起始位置的偏移量。

索引以 UTF-16 代码单元进行测量。这意味着代理对使用 2 个索引。例如,“GRINNING FACE”表情符号 😄? 将表示为“\uD83D\uDE00”,并且会使用 2 个索引。

对于文档正文内的元素,索引代表到正文内容开头部分的偏移量,即“根”元素。

结构元素的“个性化”类型(SectionBreakTableOfContentsTableParagraph)没有这些索引,因为其所属的 StructuralElement 包含这些字段。对于 ParagraphElement 中包含的个性化类型也是如此。

段落结构

段落由以下部分组成:

  • elements - 包含一个或多个 textRun 实例的序列。
  • paragraphStyle - 可选元素,用于明确设置段落的样式属性。
  • bullet - 一个可选元素,用于提供在项目列表中包含的项目符号规范。

文字运行

textRun 表示具有完全相同的文本样式的连续文本字符串。一个段落可以包含多个文本段,但文本段不能跨段落边界。例如,假设存在一个如下所示的小文档:

下图展示了如何直观呈现上述文档中段落的序列,其中每个段落都有自己的文本运行和可选的项目符号设置。

文本运行图。

访问元素

许多元素都可以使用 BatchUpdate 方法进行修改。例如,使用 InsertTextRequest 请求类型,您可以修改任何包含文本的元素的内容。同样,您可以使用 UpdateTextStyleRequest 将格式应用于一个或多个元素中包含的一系列文本。

如需读取文档的元素,请使用 get 方法获取完整文档的 JSON 转储文件。(要执行此操作,请参阅以 JSON 格式输出文档内容示例)。然后,您可以解析生成的 JSON,以查找各个元素的值。

解析内容对于各种用例来说很有用。例如,假设某个文档目录应用列出了找到的文档。此应用可能需要提取文档的标题、修订版本 ID 和起始页,如下图所示:

文档编目应用的示意图。

由于没有明确读取这些设置的方法,因此您的应用需要获取整个文档,然后解析 JSON 以提取这些值。