Struttura di un documento di Documenti Google

Per utilizzare l'API Google Docs in modo efficace, devi comprendere l'architettura di un documento Google Docs e gli elementi che lo compongono, nonché la relazione tra questi elementi. Questa pagina fornisce una panoramica dettagliata di questi argomenti:

  • Un modello concettuale degli elementi del documento
  • Come l'API Docs rappresenta questi elementi
  • Le proprietà di stile degli elementi

Elementi di primo livello

L'elemento contenitore più esterno in Documenti Google è un documento. Questa è l'unità che può essere salvata su Google Drive, condivisa con altri utenti e aggiornata con testo e immagini.

Gli elementi di primo livello di una risorsa documents includono i relativi Tab, SuggestionsViewMode e altri attributi:

document: {
    title: ... ,
    revisionId: ... ,
    documentId: ... ,
    suggestionsViewMode: ... ,
    tabs: ...
}

Schede

Un singolo documento può contenere più schede, che hanno contenuti a livello di testo diversi. La proprietà tabs del documento è una sequenza di oggetti Tab. Un Tab è composto dai seguenti campi:

  • TabProperties: contiene gli attributi di una scheda, ad esempio ID, titolo e indice.
  • childTabs: mostra le schede secondarie di una scheda (le schede nidificate direttamente sotto di essa).
  • DocumentTab: Rappresenta il contenuto di testo di una scheda.
Struttura delle schede di un documento.
Figura 1. Struttura delle schede di un documento.

Le sezioni successive forniscono una breve panoramica della gerarchia delle schede del documento; la rappresentazione JSON delle schede fornisce anche informazioni più dettagliate. Per ulteriori informazioni sulla funzionalità delle schede, consulta la sezione Utilizzare le schede.

Per manipolare le funzionalità delle schede dei documenti globali al di fuori dei contenuti Body, è quasi sempre meglio utilizzare uno o più modelli di documenti, che puoi utilizzare come base per generare nuovi documenti in modo programmatico. Per saperne di più, vedi Unire il testo in un documento.

Contenuto del corpo

Il Body in genere contiene tutti i contenuti di una scheda del documento. La maggior parte degli elementi che puoi o vorresti utilizzare a livello di programmazione si trova all'interno dei contenuti Body:

Struttura del contenuto del corpo.
Figura 2. Struttura del contenuto del corpo.

Elemento strutturale

Un StructuralElement descrive i contenuti che forniscono struttura al documento. I contenuti Body sono una sequenza di oggetti StructuralElement. Un elemento di contenuti personalizza ogni oggetto StructuralElement, come mostrato nel seguente diagramma:

Elementi strutturali.
Figura 3. Elementi strutturali.

Gli elementi strutturali e i relativi oggetti di contenuti contengono tutti i componenti visivi all'interno del documento. Sono inclusi testo, immagini incorporate e formattazione.

Struttura del paragrafo

Paragraph è un StructuralElement che rappresenta un paragrafo. Contiene una serie di contenuti terminati con un carattere di nuova riga. È composto dai seguenti oggetti:

  • ParagraphElement: Descrive i contenuti all'interno di un paragrafo.
  • ParagraphStyle: Un elemento facoltativo che imposta esplicitamente le proprietà di stile per il paragrafo.
  • Bullet: se il paragrafo fa parte di un elenco, un elemento facoltativo che fornisce la specifica del punto elenco.

Il ParagraphElement funziona un po' come un StructuralElement. Un insieme di tipi di elementi dei contenuti (ad esempio ColumnBreak e Equation) personalizza il proprio ParagraphElement, come mostrato nel seguente diagramma:

Struttura degli elementi del paragrafo.
Figura 4. Struttura degli elementi del paragrafo.

Per un esempio di struttura completa del documento, consulta l'esempio di documento in formato JSON. Nell'output puoi vedere molti degli elementi strutturali e di contenuti chiave, nonché l'utilizzo degli indici di inizio e fine, come descritto in una sezione successiva.

Esecuzioni di testo

Un TextRun è un ParagraphElement che rappresenta una stringa di testo contigua con lo stesso stile di testo. Un paragrafo può contenere più sequenze di testo, ma queste non superano mai i limiti del paragrafo. I contenuti vengono suddivisi dopo un carattere di nuova riga per formare esecuzioni di testo separate. Ad esempio, considera un documento molto piccolo come il seguente:

Documento di piccole dimensioni con paragrafi ed elenco puntato.
Figura 5. Un documento di piccole dimensioni.

Il seguente diagramma mostra come visualizzare la sequenza di paragrafi nel documento precedente, ognuno con le proprie impostazioni TextRun e Bullet facoltative.

Struttura di una sequenza di testo.
Figura 6. Struttura di una sequenza di testo.

AutoText

AutoText è un ParagraphElement che rappresenta un punto nel testo che viene sostituito dinamicamente con contenuti che possono cambiare nel tempo. In Documenti, questo viene utilizzato per i numeri di pagina.

Indici iniziale e finale

Quando apporti aggiornamenti ai contenuti di una scheda di un documento, ogni aggiornamento viene eseguito in una posizione o in un intervallo all'interno del documento. Queste posizioni e intervalli vengono specificati utilizzando indici, che rappresentano un offset all'interno di un segmento del documento contenitore. Un segmento è il corpo, l'intestazione, il piè di pagina o la nota a piè di pagina contenente elementi strutturali o di contenuti. Gli indici degli elementi all'interno di un segmento sono relativi all'inizio del segmento.

La maggior parte degli elementi all'interno del corpo del contenuto ha le proprietà startIndex e endIndex basate su zero. Indicano l'offset dell'inizio e della fine di un elemento rispetto all'inizio del segmento contenitore. Per saperne di più su come ordinare le chiamate API batch di Documenti, consulta Aggiornamenti batch.

Gli indici vengono misurati in unità di codice UTF-16. Ciò significa che le coppie di surrogati consumano due indici. Ad esempio, l'emoji "FACCIA SORRIDENTE", 😄, è rappresentata come \uD83D\uDE00 e consuma due indici.

Per gli elementi all'interno del corpo di un documento, gli indici rappresentano gli offset dall'inizio dei contenuti del corpo, che è l'elemento "radice".

I tipi "personalizzazione" per gli elementi strutturali SectionBreak, TableOfContents, Table e Paragraph non hanno questi indici perché il relativo StructuralElement contiene questi campi. Ciò vale anche per i tipi di personalizzazione contenuti in un ParagraphElement, ad esempio TextRun, AutoText e PageBreak.

Elementi di accesso

Molti elementi sono modificabili con il metodo documents.batchUpdate. Ad esempio, utilizzando InsertTextRequest, puoi modificare il contenuto di qualsiasi elemento contenente testo. Allo stesso modo, puoi utilizzare UpdateTextStyleRequest per applicare la formattazione a un intervallo di testo contenuto in uno o più elementi.

Per leggere gli elementi del documento, utilizza il metodo documents.get per ottenere un dump JSON del documento completo. Puoi quindi analizzare il JSON risultante per trovare i valori dei singoli elementi. Per ulteriori informazioni, consulta la sezione Output document contents as JSON.

L'analisi del contenuto può essere utile per vari casi d'uso. Prendi in considerazione, ad esempio, un'applicazione di catalogazione dei documenti che elenca i documenti che trova. Questa app può estrarre il titolo, l'ID revisione e il numero di pagina iniziale delle schede di un documento, come mostrato nel seguente diagramma:

Struttura di un catalogo di documenti.
Figura 7. Struttura di un catalogo di documenti.

Poiché non esistono metodi per leggere esplicitamente queste impostazioni, la tua app deve recuperare l'intero documento e poi analizzare il JSON per estrarre questi valori.

Eredità della proprietà

Un StructuralElement può ereditare le proprietà dai relativi oggetti principali. Le proprietà di un oggetto, incluse quelle che definisce e quelle che eredita, determinano il suo aspetto visivo finale.

La formattazione dei caratteri di testo determina la modalità di rendering del testo in un documento, ad esempio grassetto, corsivo e sottolineatura. La formattazione che applichi sostituisce quella predefinita ereditata dal TextStyle del paragrafo sottostante. Al contrario, tutti i caratteri la cui formattazione non viene impostata continuano a ereditare gli stili del paragrafo.

La formattazione dei paragrafi determina il modo in cui i blocchi di testo vengono visualizzati in un documento, ad esempio allineamento, bordi e rientro. La formattazione che applichi override della formattazione predefinita ereditata dal ParagraphStyle sottostante. Al contrario, tutte le funzionalità di formattazione che non imposti continuano a essere ereditate dallo stile del paragrafo.