Estrutura de um arquivo do Documentos Google

Para usar a API Google Docs de maneira eficaz, é necessário entender a arquitetura de um documento do Google Docs e os elementos que o compõem, além da relação entre eles. Nesta página, você encontra uma visão geral detalhada destes tópicos:

  • Um modelo conceitual dos elementos do documento
  • Como a API Docs representa esses elementos
  • As propriedades de estilo dos elementos

Elementos de nível superior

O elemento contêiner mais externo nos Documentos Google é um documento. É a unidade que pode ser salva no Google Drive, compartilhada com outros usuários e atualizada com texto e imagens.

Os elementos de nível superior de um recurso documents incluem os Tabs, SuggestionsViewMode e outros atributos:

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

Guias

Um único documento pode conter várias guias com conteúdos diferentes no nível do texto. A propriedade tabs do documento é uma sequência de objetos Tab. Um Tab é composto pelos seguintes campos:

  • TabProperties: contém atributos de uma guia, como ID, título e índice.
  • childTabs: expõe as guias filhas de uma guia (guias aninhadas diretamente abaixo dela).
  • DocumentTab: representa o conteúdo de texto de uma guia.
Estrutura das guias de um documento.
Figura 1. Estrutura das guias de um documento.

As seções posteriores oferecem uma breve visão geral da hierarquia de guias de documentos. A representação JSON da guia também fornece informações mais detalhadas. Consulte Trabalhar com guias para mais informações sobre o recurso guias.

Para manipular recursos globais da guia de documentos fora do conteúdo Body, é quase sempre melhor usar um ou mais modelos de documentos, que podem ser usados como base para gerar novos documentos de forma programática. Para mais informações, consulte Mesclar texto em um documento.

Conteúdo do corpo

O Body geralmente contém todo o conteúdo da guia de um documento. A maioria dos itens que você pode ou provavelmente vai querer usar de forma programática são elementos dentro do conteúdo Body:

Estrutura do conteúdo do corpo.
Figura 2. Estrutura do conteúdo do corpo.

Elemento estrutural

Um StructuralElement descreve o conteúdo que fornece estrutura ao documento. O conteúdo Body é uma sequência de objetos StructuralElement. Um elemento de conteúdo personaliza cada objeto StructuralElement, conforme mostrado no diagrama a seguir:

Elementos estruturais.
Figura 3. Elementos estruturais.

Os elementos estruturais e os objetos de conteúdo contêm todos os componentes visuais do documento. Isso inclui o texto, as imagens inline e a formatação.

Estrutura do parágrafo

Um Paragraph é um StructuralElement que representa um parágrafo. Ele tem um intervalo de conteúdo que termina com um caractere de nova linha. Ele é composto pelos seguintes objetos:

  • ParagraphElement: descreve o conteúdo de um parágrafo.
  • ParagraphStyle: um elemento opcional que define explicitamente as propriedades de estilo do parágrafo.
  • Bullet: se o parágrafo fizer parte de uma lista, um elemento opcional que fornece a especificação do marcador.

O ParagraphElement funciona como um StructuralElement. Um conjunto de tipos de elementos de conteúdo (como ColumnBreak e Equation) personaliza o próprio ParagraphElement, conforme mostrado no diagrama a seguir:

Estrutura dos elementos de parágrafo.
Figura 4. Estrutura dos elementos de parágrafo.

Para ver um exemplo de uma estrutura de documento completa, consulte o exemplo de documento no formato JSON. Na saída, é possível ver muitos dos principais elementos estruturais e de conteúdo, bem como o uso de índices de início e fim, conforme descrito em uma seção a seguir.

Execuções de texto

Um TextRun é um ParagraphElement que representa uma string contígua de texto com o mesmo estilo. Um parágrafo pode conter várias execuções de texto, mas elas nunca cruzam os limites do parágrafo. O conteúdo é dividido após um caractere de nova linha para formar execuções de texto separadas. Por exemplo, considere um documento pequeno como este:

Documento pequeno com parágrafos e lista com marcadores.
Figura 5. Um documento pequeno.

O diagrama a seguir mostra como você pode visualizar a sequência de parágrafos no documento anterior, cada um com suas próprias configurações de TextRun e Bullet opcionais.

Estrutura de um trecho de texto.
Figura 6. Estrutura de um trecho de texto.

AutoText

AutoText é um ParagraphElement que representa um ponto no texto que é substituído dinamicamente por conteúdo que pode mudar com o tempo. Nos Documentos, isso é usado para números de página.

Índices de início e término

Quando você atualiza o conteúdo de uma guia de documento, cada atualização ocorre em um local ou em um intervalo dentro do documento. Esses locais e intervalos são especificados usando índices, que representam um deslocamento em um segmento de documento. Um segmento é o corpo, o cabeçalho, o rodapé ou uma nota de rodapé que contém elementos estruturais ou de conteúdo. Os índices dos elementos em um segmento são relativos ao início dele.

A maioria dos elementos no conteúdo do corpo tem as propriedades startIndex e endIndex baseadas em zero. Eles indicam o ajuste do início e do fim de um elemento em relação ao início do segmento que o envolve. Para mais informações sobre como ordenar suas chamadas em lote da API Docs, consulte Atualizações em lote.

Os índices são medidos em unidades de código UTF-16. Isso significa que os pares alternativos consomem dois índices. Por exemplo, o emoji "ROSTO SORRINDO", 😄, é representado como \uD83D\uDE00 e consome dois índices.

Para elementos no corpo de um documento, os índices representam deslocamentos do início do conteúdo do corpo, que é o elemento "raiz".

Os tipos "personalizing" para elementos estruturais (SectionBreak, TableOfContents, Table e Paragraph) não têm esses índices porque o StructuralElement que os envolve tem esses campos. Isso também se aplica aos tipos de personalização contidos em um ParagraphElement, como TextRun, AutoText e PageBreak.

Acessar elementos

Muitos elementos podem ser modificados com o método documents.batchUpdate. Por exemplo, usando InsertTextRequest, é possível mudar o conteúdo de qualquer elemento que contenha texto. Da mesma forma, você pode usar UpdateTextStyleRequest para aplicar formatação a um intervalo de texto contido em um ou mais elementos.

Para ler elementos do documento, use o método documents.get para extrair um despejo JSON do documento completo. Em seguida, analise o JSON resultante para encontrar os valores de elementos individuais. Para mais informações, consulte Conteúdo do documento de saída como JSON.

Analisar o conteúdo pode ser útil para vários casos de uso. Por exemplo, um aplicativo de catalogação de documentos que lista os documentos encontrados. Esse app pode extrair o título, o ID da revisão e o número da página inicial das guias de um documento, conforme mostrado no diagrama a seguir:

Estrutura de um catálogo de documentos.
Figura 7. Estrutura de um catálogo de documentos.

Como não há métodos para ler essas configurações explicitamente, seu app precisa receber o documento inteiro e analisar o JSON para extrair esses valores.

Herança da propriedade

Um StructuralElement pode herdar propriedades dos objetos pai. As propriedades de um objeto, incluindo as que ele define e as que herda, determinam a aparência visual final.

A formatação de caracteres de texto determina como o texto é renderizado em um documento, como negrito, itálico e sublinhado. A formatação aplicada substitui a formatação padrão herdada do TextStyle do parágrafo. Por outro lado, os caracteres cujo formato não é definido continuam herdando os estilos do parágrafo.

A formatação de parágrafo determina como os blocos de texto são renderizados em um documento, como alinhamento, bordas e recuo. A formatação aplicada substitui a formatação padrão herdada do ParagraphStyle subjacente. Por outro lado, os recursos de formatação que você não definir vão continuar herdando o estilo de parágrafo.