Compartilhar via


Como trabalhar com layouts de slide

Este tópico discute a classe Open XML SDK for Office SlideLayout e como ela se relaciona com o esquema Open XML File Format PresentationML.

Layouts de slides em PresentationML

A especificação ISO/IEC 29500 descreve o elemento Open XML PresentationML <sldLayout> usado para representar layouts de slide em um documento PresentationML da seguinte maneira:

Esse elemento especifica uma instância de um layout de slide. O layout do slide contém em essência um design de slide de modelo que pode ser aplicado a qualquer slide existente. Quando aplicado a um slide existente, todo o conteúdo correspondente deve ser mapeado para o novo layout do slide.

O <elemento sldLayout> é o elemento raiz da parte layout do slide presentationml. Para obter mais informações sobre a estrutura geral das partes e elementos que compõem um documento PresentationML, consulte Estrutura de um Documento PresentationML.

A tabela a seguir lista os elementos filho do <elemento sldLayout> usados ao trabalhar com layouts de slide e as classes SDK do Open XML que correspondem a eles.

Elemento PresentationML Classe SDK Open XML
<clrMapOvr> ColorMapOverride
<cSld> CommonSlideData
<extLst> ExtensionListWithModification
<Hf> HeaderFooter
<Tempo> Timing
<Transição> Transition

A tabela a seguir da especificação ISO/IEC 29500 descreve os atributos do <elemento sldLayout> .

Atributos Description
matchingName (Nome correspondente) Especifica um nome a ser usado no lugar do atributo de nome dentro do elemento cSld. Isso é usado para correspondência de layout em resposta a alterações de layout e aplicativos de modelo.
Os valores possíveis para esse atributo são definidos pelo tipo de dados de cadeia de caracteres W3C XML Schema.
preserve (Preserve Slide Layout) Especifica se o layout de slide correspondente é excluído quando todos os slides que seguem esse layout são excluídos. Se esse atributo não for especificado, um valor de false deverá ser assumido pelo aplicativo gerador. Isso significaria que o slide seria de fato excluído se nenhum slide dentro da apresentação estivesse relacionado a ele.
Os valores possíveis para esse atributo são definidos pelo tipo de dados booliano W3C XML Schema.
showMasterPhAnim (mostrar animações de espaço reservado mestre) Especifica se deve ou não exibir animações em espaços reservados do slide master.
Os valores possíveis para esse atributo são definidos pelo tipo de dados booliano W3C XML Schema.
showMasterSp (Mostrar Formas Mestras) Especifica se as formas no slide master devem ser mostradas em slides ou não.
Os valores possíveis para esse atributo são definidos pelo tipo de dados booliano W3C XML Schema.
tipo (Tipo de Layout de Slide) Especifica o tipo de layout de slide usado por este slide.
Os valores possíveis para esse atributo são definidos pelo tipo ST_SlideLayoutType simples (§19.7.15).
userDrawn (é desenhado pelo usuário) Especifica se o objeto correspondente foi desenhado pelo usuário e, portanto, não deve ser excluído. Isso permite a sinalização de slides que contêm dados desenhados pelo usuário.
Os valores possíveis para esse atributo são definidos pelo tipo de dados booliano W3C XML Schema.

Classe Open XML SDK SlideLayout

A classe SlideLayout do SDK OXML representa o <elemento sldLayout> definido no esquema Open XML File Format para documentos PresentationML. Use a classe SlideLayout para manipular elementos sldLayout> individuais <em um documento PresentationML.

Classes que representam elementos filho do <elemento sldLayout> e que, portanto, são comumente associadas à classe SlideLayout são mostradas na lista a seguir.

Classe ColorMapOverride

A classe ColorMapOverride corresponde ao <elemento clrMapOvr> . As seguintes informações da especificação ISO/IEC 29500 introduzem o <elemento clrMapOvr> :

Esse elemento fornece um mecanismo com o qual substituir os esquemas de cores listados no <elemento ClrMap> . Se o <elemento filho masterClrMapping> estiver presente, o esquema de cores definido pelo master será usado. Se o <elemento filho overrideClrMapping> estiver presente, ele definirá um novo esquema de cores específico para o slide de notas pai, slide de apresentação ou layout de slides.

Classe CommonSlideData

A classe CommonSlideData corresponde ao <elemento cSld> . As seguintes informações da especificação ISO/IEC 29500 introduzem o <elemento cSld> :

Esse elemento especifica um contêiner para o tipo de informações de slide relevantes para todos os tipos de slides. Todos os slides compartilham um conjunto comum de propriedades independente do tipo de slide; a descrição dessas propriedades para qualquer slide específico é armazenada no contêiner cSld> do <slide. Os dados de slide específicos para o tipo de slide indicado pelo elemento pai são armazenados em outro lugar.

Os dados reais em <cSld> descrevem apenas o slide pai específico; é apenas o tipo de informação armazenada que é comum em todos os slides.

Classe ExtensionListWithModification

A classe ExtensionListWithModification corresponde ao <elemento extLst>. As seguintes informações da especificação ISO/IEC 29500 introduzem o <elemento extLst> :

Esse elemento especifica a lista de extensão com capacidade de modificação na qual todas as extensões futuras do tipo <de elemento são> definidas. A lista de extensão junto com as extensões futuras correspondentes é usada para estender os recursos de armazenamento da estrutura PresentationML. Isso permite que vários novos tipos de dados sejam armazenados nativamente dentro da estrutura.

Observação

O uso desse elemento extLst permite que o aplicativo gerador armazene se essa propriedade de extensão foi modificada.

Classe HeaderFooter

A classe HeaderFooter corresponde ao <elemento hf> . As seguintes informações da especificação ISO/IEC 29500 introduzem o <elemento hf> :

Esse elemento especifica as informações de cabeçalho e rodapé para um slide. Cabeçalhos e rodapés consistem em espaços reservados para texto que devem ser consistentes em todos os slides e tipos de slides, como data e hora, numeração de slides e texto de cabeçalho e rodapé personalizados.

Classe Timing

A classe Timing corresponde ao <elemento de tempo> . As seguintes informações da especificação ISO/IEC 29500 introduzem o <elemento de tempo> :

Esse elemento especifica as informações de tempo para lidar com todas as animações e eventos temporizados no slide correspondente. Essas informações são rastreadas por meio de nós de tempo dentro do <elemento de tempo> . Mais informações sobre as especificidades desses nós de tempo e como eles devem ser definidos podem ser encontradas na seção Animação da estrutura PresentationML.

Classe de transição

A classe Transição corresponde ao elemento de <transição> . As seguintes informações da especificação ISO/IEC 29500 introduzem o <elemento de transição> :

Esse elemento especifica o tipo de transição de slide que deve ser usada para fazer a transição para o slide atual do slide anterior. Ou seja, as informações de transição são armazenadas no slide que aparece após a conclusão da transição.

Trabalhando com a classe SlideLayout

Conforme mostrado no exemplo de código do SDK do Open XML que se segue, cada instância da classe SlideLayout está associada a uma instância da classe SlideLayoutPart , que representa uma parte de layout de slide, uma das partes necessárias de um pacote de arquivo de apresentação presentationML. Cada instância da classe SlideLayout também deve ser associada a instâncias das classes SlideMaster e Slide , que por sua vez estão associadas a partes de apresentação necessárias nomeadas da mesma forma, representadas pelas classes SlideMasterPart e SlidePart.

A classe SlideLayout , que representa o <elemento sldLayout> , também está associada a uma série de outras classes que representam os elementos filho do <elemento sldLayout> . Entre essas classes, conforme mostrado no exemplo de código a seguir, estão a classe CommonSlideData , a classe ColorMapOverride , a classe ShapeTree e a classe Shape .

Abrir o exemplo de código do SDK XML

O seguinte método do artigo Como criar um documento de apresentação fornecendo um nome de arquivo adiciona uma nova parte de layout de slide a uma apresentação existente e cria uma instância de uma classe Open XML SDKSlideLayout na nova parte do layout do slide. O construtor da classe SlideLayout cria instâncias da classe CommonSlideData e da classe ColorMapOverride . O construtor da classe CommonSlideData cria uma instância da classe ShapeTree , cujo construtor, por sua vez, cria instâncias de classe adicionais: uma instância da classe [NonVisualGroupShapeProperties ,https://msdn.microsoft.com/library/office/documentformat.openxml.presentation.nonvisualgroupshapeproperties.aspx) uma instância da classe GroupShapeProperties e uma instância da classe Shape .

O namespace representado pela letra P no código é o [DocumentFormat.OpenXml.Presentation (https://msdn.microsoft.com/library/office/documentformat.openxml.presentation.aspx) namespace.

using DocumentFormat.OpenXml;
using DocumentFormat.OpenXml.Drawing;
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Presentation;
using P = DocumentFormat.OpenXml.Presentation;

static SlideLayoutPart CreateSlideLayoutPart(SlidePart slidePart1)
{
    SlideLayoutPart slideLayoutPart1 = slidePart1.AddNewPart<SlideLayoutPart>("rId1");
    SlideLayout slideLayout = new SlideLayout(
    new CommonSlideData(new ShapeTree(
      new P.NonVisualGroupShapeProperties(
      new P.NonVisualDrawingProperties() { Id = (UInt32Value)1U, Name = "" },
      new P.NonVisualGroupShapeDrawingProperties(),
      new ApplicationNonVisualDrawingProperties()),
      new GroupShapeProperties(new TransformGroup()),
      new P.Shape(
      new P.NonVisualShapeProperties(
        new P.NonVisualDrawingProperties() { Id = (UInt32Value)2U, Name = "" },
        new P.NonVisualShapeDrawingProperties(new ShapeLocks() { NoGrouping = true }),
        new ApplicationNonVisualDrawingProperties(new PlaceholderShape())),
      new P.ShapeProperties(),
      new P.TextBody(
        new BodyProperties(),
        new ListStyle(),
        new Paragraph(new EndParagraphRunProperties()))))),
    new ColorMapOverride(new MasterColorMapping()));
    slideLayoutPart1.SlideLayout = slideLayout;
    return slideLayoutPart1;
}