Struttura di un documento di Documenti Google

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

  • Un modello concettuale degli elementi del documento
  • In che modo 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 Body, Header, Footer e diversi altri attributi:

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

Per gestire le funzionalità globali dei documenti al di fuori dei contenuti Body, è quasi sempre meglio utilizzare uno o più modelli di documento, che puoi utilizzare come base per generare nuovi documenti in modo programmatico. Per maggiori informazioni, consulta Unire testo in un documento.

Corpo del testo

L'oggetto Body in genere include l'intero contenuto del documento. La maggior parte degli elementi che puoi, o che probabilmente vorrai utilizzare in modo programmatico, sono elementi all'interno dei contenuti di Body:

Struttura dei contenuti del corpo.
Figura 1. Struttura dei contenuti del corpo.

Elemento strutturale

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

Elementi strutturali.
Figura 2. Elementi strutturali.

Gli elementi strutturali e i relativi oggetti di contenuto contengono tutti i componenti visivi all'interno del documento. Ciò include testo, immagini in linea e formattazione.

Struttura del paragrafo

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

  • ParagraphElement: descrive i contenuti di un paragrafo.
  • ParagraphStyle: un elemento facoltativo che imposta in modo esplicito 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.

ParagraphElement funziona in modo simile a un StructuralElement. Un insieme di tipi di elementi di contenuti (come ColumnBreak e Equation) personalizza il proprio ParagraphElement, come mostrato nel seguente diagramma:

Struttura degli elementi del paragrafo.
Figura 3. Struttura degli elementi del paragrafo.

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

Esecuzioni testo

Un elemento TextRun è un ParagraphElement che rappresenta una stringa di testo contigua con lo stesso stile di testo. Un paragrafo può contenere più esecuzioni di testo, che però non superano mai i confini dei paragrafi. I contenuti vengono suddivisi dopo un carattere di nuova riga per formare esecuzioni di testo separate. Ad esempio, considera un documento di dimensioni ridotte come il seguente:

Piccolo documento con paragrafi ed elenco puntato.
Figura 4. Un documento di piccole dimensioni.

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

Struttura di un'esecuzione di testo.
Figura 5. Struttura di un'esecuzione di testo.

AutoText

AutoText è una ParagraphElement che rappresenta uno spazio nel testo che viene sostituito dinamicamente con contenuti che possono cambiare nel tempo. In Documenti, è usata per i numeri di pagina.

Indici di inizio e fine

Quando aggiorni i contenuti di un documento, ogni aggiornamento avviene in una posizione o in un intervallo all'interno del documento. Le località e gli intervalli vengono specificati utilizzando gli indici, che rappresentano un offset all'interno di un segmento di documenti contenitore. Un segmento è il corpo, l'intestazione, il piè di pagina o la nota a piè di pagina che contiene 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 dei contenuti del corpo ha le proprietà startIndex e endIndex in base zero. Indica l'offset dell'inizio e della fine di un elemento rispetto all'inizio del segmento che lo contiene. Per ulteriori informazioni su come ordinare le chiamate API Documenti batch, consulta Aggiornamenti batch.

Gli indici sono misurati in unità di codice UTF-16. Ciò significa che le coppie di surrogati consumano due indici. Ad esempio, l'emoji "FASCIA CON RINGRAZIAMENTO", tan, è 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 "principale".

I tipi di "personalizzazione" degli elementi strutturali, SectionBreak, TableOfContents, Table e Paragraph, non hanno questi indici perché il loro Contenuto StructuralElement include questi campi. Questo vale anche per i tipi di personalizzazione contenuti in un ParagraphElement, come TextRun, AutoText e PageBreak.

Elementi di accesso

Molti elementi sono modificabili con il metodo documents.batchUpdate. Ad esempio, con InsertTextRequest puoi modificare i contenuti 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 codice JSON risultante per trovare i valori dei singoli elementi. Per ulteriori informazioni, consulta Generare i contenuti del documento come JSON.

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

Struttura di un catalogo di documenti.
Figura 6. Struttura di un catalogo di documenti.

Poiché non esistono metodi per leggere esplicitamente queste impostazioni, l'app deve ottenere l'intero documento e quindi analizzare il codice JSON per estrarre questi valori.

Eredità della proprietà

Un elemento StructuralElement può ereditare le proprietà dagli oggetti padre. Le proprietà di un oggetto, comprese quelle che definisce e quelle che eredita, determinano il suo aspetto visivo finale.

La formattazione dei caratteri del testo determina come il testo viene visualizzato in un documento, ad esempio grassetto, corsivo e sottolineato. La formattazione che applichi sostituisce la formattazione predefinita ereditata dal parametro TextStyle del paragrafo sottostante. Al contrario, i caratteri la cui formattazione non imposti continuano a essere ereditati dagli stili del paragrafo.

La formattazione del paragrafo determina il modo in cui vengono visualizzati blocchi di testo in un documento, ad esempio allineamento, bordi e rientro. La formattazione applicata sostituisce la formattazione predefinita ereditata dall'elemento ParagraphStyle sottostante. Al contrario, le caratteristiche di formattazione che non imposti continuano a ereditare dallo stile di paragrafo.