Como trabalhar com slides mestres
Este tópico discute a classe Open XML SDK for Office SlideMaster e como ela se relaciona com o esquema Open XML File Format PresentationML.
Mestres de Slides em PresentationML
A especificação ISO/IEC 29500 descreve o elemento Open XML PresentationML <sldMaster> usado para representar layouts de slide em um documento PresentationML da seguinte maneira.
Esse elemento especifica uma instância de um slide master slide. Em um slide master slide estão contidos todos os elementos que descrevem os objetos e sua formatação correspondente para dentro de um slide de apresentação. Dentro de um slide master slide há dois elementos main. O elemento cSld especifica os elementos de slide comuns, como formas e seus corpos de texto anexados. Em seguida, o elemento txStyles especifica a formatação para o texto dentro de cada uma dessas formas. As outras propriedades dentro de um slide master slide especificam outras propriedades para dentro de um slide de apresentação, como informações de cor, cabeçalhos e rodapés, bem como informações de tempo e transição para todos os slides de apresentação correspondentes.
O <elemento sldMaster> é o elemento raiz da parte Mestre de Slides do 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 sldMaster> usados ao trabalhar com mestres de slides e as classes SDK Open XML que correspondem a eles.
Elemento PresentationML | Classe SDK Open XML |
---|---|
<clrMap> | Colormap |
<cSld> | CommonSlideData |
<extLst> | ExtensionListWithModification |
<Hf> | HeaderFooter |
<sldLayoutIdLst> | SlideLayoutIdList |
<Tempo> | Timing |
<Transição> | Transition |
<txStyles> | TextStyles |
A tabela a seguir da especificação ISO/IEC 29500 descreve os atributos do <elemento sldMaster> .
Atributos | Description |
---|---|
preserve (Preserve Slide Master) | 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 de esquema XML W3C. |
Abrir classe XML SDK SlideMaster
A classe Open XMLSDK SlideMaster representa o <elemento sldMaster> definido no esquema Open XML File Format para documentos PresentationML. Use a classe SlideMaster para manipular elementos sldMaster> individuais <em um documento PresentationML.
Classes que representam elementos filho do <elemento sldMaster> e que, portanto, são comumente associadas à classe SlideMaster 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 SlideLayoutIdList
A classe SlideLayoutIdList corresponde ao <elemento sldLayoutIdLst> . As seguintes informações da especificação ISO/IEC 29500 introduzem o <elemento sldLayoutIdLst> :
Esse elemento especifica a existência da lista de identificação do layout do slide. Essa lista está contida no slide master e é usada para determinar quais layouts estão sendo usados no arquivo de master de slides. Cada layout dentro da lista de layouts de slides tem seu próprio número de identificação e identificador de relação que o identifica exclusivamente dentro do documento de apresentação e do slide master específico no qual ele é usado.
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.
Classe TextStyles
A classe TextStyles corresponde ao <elemento txStyles> . As seguintes informações da especificação ISO/IEC 29500 introduzem o <elemento txStyles> :
Esse elemento especifica os estilos de texto em um slide master. Dentro desse elemento estão as informações de estilo do texto do título, o texto do corpo e outro texto de slide também. Esse elemento é usado apenas no Slide Master e, portanto, define os estilos de texto para os slides de apresentação correspondentes.
Considere o caso em que gostaríamos de especificar o texto do título para um slide master.
<p:txStyles>
<p:titleStyle>
<a:lvl1pPr algn="ctr" rtl="0" latinLnBrk="0">
<a:spcBef>
<a:spcPct val="0"/>
</a:spcBef>
<a:buNone/>
<a:defRPr sz="4400" kern="1200">
<a:solidFill>vv
<a:schemeClr val="tx1"/>
</a:solidFill\>
<a:latin typeface="+mj-lt"/>
<a:ea typeface="+mj-ea"/>
<a:cs typeface="+mj-cs"/>
</a:defRPr>
</a:lvl1pPr>
</p:titleStyle>
</p:txStyles>
No exemplo anterior, o texto do título é definido de acordo com a formatação acima para todos os slides relacionados na apresentação.
Trabalhando com a classe SlideMaster
Conforme mostrado no exemplo de código do SDK Open XML a seguir, cada instância da classe SlideMaster está associada a uma instância da classe SlideMasterPart, que representa um slide master parte, uma das partes necessárias de um pacote de arquivo de apresentação PresentationML. Cada instância da classe SlideMaster também deve ser associada a instâncias das classes SlideLayout e <Slide , que por sua vez estão associadas a partes de apresentação necessárias nomeadas da mesma forma, representadas pelas classes SlideLayoutPart e SlidePart .
A classe SlideMaster , que representa o <elemento sldMaster> , também está associada a uma série de outras classes que representam os elementos filho do <elemento sldMaster> . Entre essas classes, conforme mostrado no exemplo de código a seguir, estão a classe CommonSlideData , a classe ColorMap , 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 do slidemaster a uma apresentação existente e cria uma instância de uma classeSlideMaster do SDK do Open XML no novo slide master parte. O construtor da classe SlideMaster cria instâncias da classe CommonSlideData e das classes ColorMap, SlideLayoutIdList e TextStyles . 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 , uma instância da classe GroupShapeProperties e uma instância da classe Shape , entre outras.
O namespace representado pela letra P no código é o namespace DocumentFormat.OpenXml.Presentation .
using DocumentFormat.OpenXml;
using DocumentFormat.OpenXml.Drawing;
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Presentation;
using D = DocumentFormat.OpenXml.Drawing;
using P = DocumentFormat.OpenXml.Presentation;
static SlideMasterPart CreateSlideMasterPart(SlideLayoutPart slideLayoutPart1)
{
SlideMasterPart slideMasterPart1 = slideLayoutPart1.AddNewPart<SlideMasterPart>("rId1");
SlideMaster slideMaster = new SlideMaster(
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 = "Title Placeholder 1" },
new P.NonVisualShapeDrawingProperties(new ShapeLocks() { NoGrouping = true }),
new ApplicationNonVisualDrawingProperties(new PlaceholderShape() { Type = PlaceholderValues.Title })),
new P.ShapeProperties(),
new P.TextBody(
new BodyProperties(),
new ListStyle(),
new Paragraph())))),
new P.ColorMap() { Background1 = D.ColorSchemeIndexValues.Light1, Text1 = D.ColorSchemeIndexValues.Dark1, Background2 = D.ColorSchemeIndexValues.Light2, Text2 = D.ColorSchemeIndexValues.Dark2, Accent1 = D.ColorSchemeIndexValues.Accent1, Accent2 = D.ColorSchemeIndexValues.Accent2, Accent3 = D.ColorSchemeIndexValues.Accent3, Accent4 = D.ColorSchemeIndexValues.Accent4, Accent5 = D.ColorSchemeIndexValues.Accent5, Accent6 = D.ColorSchemeIndexValues.Accent6, Hyperlink = D.ColorSchemeIndexValues.Hyperlink, FollowedHyperlink = D.ColorSchemeIndexValues.FollowedHyperlink },
new SlideLayoutIdList(new SlideLayoutId() { Id = (UInt32Value)2147483649U, RelationshipId = "rId1" }),
new TextStyles(new TitleStyle(), new BodyStyle(), new OtherStyle()));
slideMasterPart1.SlideMaster = slideMaster;
return slideMasterPart1;
}