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;
}