Google 文件架構

為了有效使用 Google Document API,您必須瞭解 Google 文件的架構和組成文件的元素,以及這些文件之間的關係。本頁面提供這些主題的詳細總覽:

  • 文件元素的概念模型
  • Document API 如何表示這些元素
  • 元素的樣式屬性

頂層元素

Google 文件最外層的容器元素是「文件」。這個單位可以儲存在 Google 雲端硬碟、與其他使用者共用,並包含文字和圖片更新。

documents 資源的頂層元素包括 BodyHeaderFooter 和其他多個屬性:

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

如要操控 Body 內容以外的全域文件功能,建議您盡可能使用一或多個文件範本,做為透過程式輔助方式產生新文件的基礎。詳情請參閱「將文字合併至文件」。

內文

Body 通常包含完整文件內容。大多數您可以使用或可能想要透過程式輔助方式使用的項目是 Body 內容中的元素:

內文內容的結構。
圖 1. 內文內容的結構。

結構元素

StructuralElement 說明瞭為文件提供結構的內容。Body 內容是 StructuralElement 物件的序列。內容元素會個人化每個 StructuralElement 物件,如下圖所示:

結構元素。
圖 2. 結構元素。

結構元素及其內容物件包含文件中的所有視覺元件。包括文字、內嵌圖片和格式。

段落結構

Paragraph 是代表段落的 StructuralElement。其中有許多內容是以換行字元結束當中包含下列物件:

  • ParagraphElement:說明段落中的內容。
  • ParagraphStyle:選用元素,可明確設定段落的樣式屬性。
  • Bullet:如果段落屬於清單的一部分,則為提供項目符號規格的選用元素。

ParagraphElement 的運作方式與 StructuralElement 類似。一組內容元素類型 (例如 ColumnBreakEquation) 會自訂其自己的 ParagraphElement,如下圖所示:

段落元素的結構。
圖 3. 段落元素結構。

如需完整文件結構的範例,請參閱 JSON 格式的文件範例。您可以在輸出中看到許多重要的結構和內容元素,並且按照下一節所述的方式,使用開始和結束索引。

文字執行作業

TextRun 是一個 ParagraphElement,代表具有相同文字樣式的連續文字字串。一個段落可以包含多個文字執行,但文字無法跨越段落界線。內容會在換行字元後分割,以形成獨立的文字執行作業。例如,請考慮使用如下的簡短文件:

內含段落和項目符號清單的小型文件。
圖 4 一個小型文件。

下圖說明如何以視覺化方式呈現上文中的段落順序,每個段落都有各自的 TextRun 和選用的 Bullet 設定。

文字執行作業的結構。
圖 5 文字執行作業的結構。

AutoText

AutoTextParagraphElement,代表文字中的某個位置,以動態方式取代可能會隨時間變動的內容。在 Google 文件中,這會用於頁碼。

起始與結束索引

當您更新文件內容時,每次更新都會在文件的特定位置或範圍內發生。這些位置和範圍是以「索引」指定,後者代表包含文件區隔中的偏移量。區段是內含結構或內容元素的內文、頁首、頁尾或註腳。片段內元素的索引與該片段的開頭相對。

內文內容中的多數元素都有以零為基礎的 startIndexendIndex 屬性。這類指標表示元素開頭和結尾與外圍片段開頭之間的偏移值。如要進一步瞭解如何訂購批次文件 API 呼叫,請參閱批次更新一文。

索引的測量單位是 UTF-16 代碼單位。這表示代理值組合會耗用兩個索引。例如,「GRINNING FACE」表情符號「Hum」以 \uD83D\uDE00 表示,並會使用兩個索引。

對於文件內文中的元素,索引代表與內文內容開頭的偏移,即「根」元素。

結構元素 (SectionBreakTableOfContentsTableParagraph) 的「個人化」類型沒有這些索引,因為其外圍的 StructuralElement 包含這些欄位。這也適用於 ParagraphElement 所含的個人化類型,例如 TextRunAutoTextPageBreak

存取元素

許多元素可以透過 documents.batchUpdate 方法修改。舉例來說,您可以使用 InsertTextRequest 變更任何含有文字的元素內容。同樣地,您可以使用 UpdateTextStyleRequest 將格式套用至一或多個元素中包含的一段文字。

如要讀取文件的元素,請使用 documents.get 方法取得完整文件的 JSON 傾印。接著,您可以剖析產生的 JSON,找出個別元素的值。詳情請參閱以 JSON 格式輸出文件內容

無論用途為何,剖析內容都是很實用的做法。例如,建立一份文件將找到的文件編入目錄的文件。這個應用程式可擷取文件的標題、修訂版本 ID 和起始頁面編號,如下圖所示:

文件目錄結構。
圖 6 文件目錄的結構。

由於沒有方法明確讀取這些設定,應用程式需要取得整份文件,然後剖析 JSON 才能擷取這些值。

資源繼承

StructuralElement 可以繼承父項物件的屬性。物件的屬性 (包括其定義和繼承的屬性) 會影響最終的視覺外觀。

文字字元格式會決定文件中的文字轉譯方式,例如粗體、斜體和底線。套用的格式會覆寫基礎段落 TextStyle 的預設格式。反之,未設定格式的字元會繼續沿用段落的樣式。

段落格式設定會決定文件中顯示文字區塊的方式,例如對齊、邊框和縮排。您套用的格式設定會覆寫從基礎 ParagraphStyle 沿用的預設格式設定。相反地,未設定的所有格式地圖項目都會繼續沿用段落樣式。