Como trabalhar com slides de apresentações
Este tópico discute a classe Open XML SDK for Office Slide e como ela se relaciona com o esquema Open XML File Format 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**.
Slides de apresentação no PresentationML
A especificação ISO/IEC 29500 descreve o elemento SLD> Open XML PresentationML <usado para representar um slide de apresentação em um documento PresentationML da seguinte maneira:
Esse elemento especifica um slide dentro de uma lista de slides. A lista de slides é usada para especificar uma ordenação de slides.
Exemplo: considere o seguinte show personalizado com uma ordenação de slides.
<p:custShowLst>
<p:custShow name="Custom Show 1" id="0">
<p:sldLst>
<p:sld r:id="rId4"/>
<p:sld r:id="rId3"/>
<p:sld r:id="rId2"/>
<p:sld r:id="rId5"/>
</p:sldLst>
</p:custShow>
</p:custShowLst>
No exemplo acima, a ordem especificada para apresentar os slides é o slide 4, depois 3, 2 e, por fim, 5.
© ISO/IEC29500: 2008.
O <elemento sld> é o elemento raiz da parte slide 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 sld> usado ao trabalhar com slides de apresentação e as classes de SDK Open XML que correspondem a eles.
Elemento PresentationML | Classe SDK Open XML |
---|---|
<clrMapOvr> | ColorMapOverride |
<cSld> | CommonSlideData |
<extLst> | ExtensionListWithModification |
<Tempo> | Timing |
<Transição> | Transition |
Abrir classe de slide do SDK XML
A classe Open XML SDKSlide representa o <elemento sld> definido no esquema Open XML File Format para documentos PresentationML. Use o objeto Slide para manipular elementos sld> individuais <em um documento PresentationML.
As classes comumente associadas à classe Slide são mostradas nas seções 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.
© ISO/IEC29500: 2008.
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.
© ISO/IEC29500: 2008.
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. nota final]
© ISO/IEC29500: 2008.
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.
© ISO/IEC29500: 2008.
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.
© ISO/IEC29500: 2008.
Trabalhando com a classe Slide
Conforme mostrado no exemplo de código SDK do Open XML que se segue, cada instância da classe Slide está associada a uma instância da classe SlidePart , que representa uma parte de slide, uma das partes necessárias de um pacote de arquivo de apresentação PresentationML. Cada instância da classe Slide também deve ser associada a instâncias das classes SlideLayout e SlideMaster , que por sua vez estão associadas a partes de apresentação necessárias nomeadas da mesma forma, representadas pelas classes SlideLayoutPart e SlideMasterPart .
A classe Slide , que representa o <elemento sld> , também está associada a uma série de outras classes que representam os elementos filho do <elemento sld> . 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 How to: Create a presentation document by providing a file name** adds a new slide part to an existing presentation and create a instance of the Open XML SDK Slide class in the new slide part. O construtor da classe Slide cria instâncias das classes CommonSlideData e 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 , a classe GroupShapeProperties e a classe Shape .
Todas essas instâncias de classe e instâncias das classes que representam os elementos filho do <elemento sld> são necessárias para criar o número mínimo de elementos XML necessários para representar um novo slide.
O namespace representado pela letra P no código é o namespace DocumentFormat.OpenXml.Presentation .
private static SlidePart CreateSlidePart(PresentationPart presentationPart)
{
SlidePart slidePart1 = presentationPart.AddNewPart<SlidePart>("rId2");
slidePart1.Slide = new Slide(
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 1" },
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() { Language = "en-US" }))))),
new ColorMapOverride(new MasterColorMapping()));
return slidePart1;
}
Para adicionar outra forma à árvore de forma e, portanto, ao slide, instancie um segundo objeto Shape passando um parâmetro adicional que contém o código a seguir para o construtor ShapeTree .
new P.Shape(
new P.NonVisualShapeProperties(
new P.NonVisualDrawingProperties() { Id = (UInt32Value)2U, Name = "Title 1" },
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() { Language = "en-US" })))
PresentationML gerado
Quando o código SDK Open XML no método é executado, o código XML a seguir é gravado no arquivo de documento PresentationML referenciado no código.
<?xml version="1.0" encoding="utf-8" ?>
<p:sld xmlns:p="https://schemas.openxmlformats.org/presentationml/2006/main">
<p:cSld>
<p:spTree>
<p:nvGrpSpPr>
<p:cNvPr id="1" name="" />
<p:cNvGrpSpPr />
<p:nvPr />
</p:nvGrpSpPr>
<p:grpSpPr>
<a:xfrm xmlns:a="https://schemas.openxmlformats.org/drawingml/2006/main" />
</p:grpSpPr>
<p:sp>
<p:nvSpPr>
<p:cNvPr id="2" name="Title 1" />
<p:cNvSpPr>
<a:spLocks noGrp="1" xmlns:a="https://schemas.openxmlformats.org/drawingml/2006/main" />
</p:cNvSpPr>
<p:nvPr>
<p:ph />
</p:nvPr>
</p:nvSpPr>
<p:spPr />
<p:txBody>
<a:bodyPr xmlns:a="https://schemas.openxmlformats.org/drawingml/2006/main" />
<a:lstStyle xmlns:a="https://schemas.openxmlformats.org/drawingml/2006/main" />
<a:p xmlns:a="https://schemas.openxmlformats.org/drawingml/2006/main">
<a:endParaRPr lang="en-US" />
</a:p>
</p:txBody>
</p:sp>
</p:spTree>
</p:cSld>
<p:clrMapOvr>
<a:masterClrMapping xmlns:a="https://schemas.openxmlformats.org/drawingml/2006/main" />
</p:clrMapOvr>
</p:sld>
Confira também
Sobre o SDK do Open XML para Office
Como inserir um novo slide em uma apresentação
Como excluir um slide de uma apresentação
Como recuperar o número de slides em um documento de apresentação
Como aplicar um tema a uma apresentação
Como criar um documento de apresentação fornecendo um nome de arquivo