Adicionar Slide à Apresentação
Apresentação OpenXML
Na funcionalidade abaixo, por padrão, um slide é adicionado à apresentação. Aqui estamos adicionando um novo slide no índice 2 contendo algum texto nele.
string FilePath = @"..\..\..\..\Sample Files\";
string FileName = FilePath + "Adding Slide to Presentation.pptx";
InsertNewSlide(FileName, 1, "My new slide");
// Inserir um slide na apresentação especificada.
public static void InsertNewSlide(string presentationFile, int position, string slideTitle)
{
// Abra o documento de origem como leitura/escrita.
using (PresentationDocument presentationDocument = PresentationDocument.Open(presentationFile, true))
{
// Passe o documento de origem, a posição e o título do slide a ser inserido para o próximo método.
InsertNewSlide(presentationDocument, position, slideTitle);
}
}
// Insira o slide especificado na apresentação na posição especificada.
public static void InsertNewSlide(PresentationDocument presentationDocument, int position, string slideTitle)
{
if (presentationDocument == null)
{
throw new ArgumentNullException("presentationDocument");
}
if (slideTitle == null)
{
throw new ArgumentNullException("slideTitle");
}
PresentationPart presentationPart = presentationDocument.PresentationPart;
// Verifique se a apresentação não está vazia.
if (presentationPart == null)
{
throw new InvalidOperationException("The presentation document is empty.");
}
// Declare e instancie um novo slide.
Slide slide = new Slide(new CommonSlideData(new ShapeTree()));
uint drawingObjectId = 1;
// Construa o conteúdo do slide.
// Especifique as propriedades não visuais do novo slide.
NonVisualGroupShapeProperties nonVisualProperties = slide.CommonSlideData.ShapeTree.AppendChild(new NonVisualGroupShapeProperties());
nonVisualProperties.NonVisualDrawingProperties = new NonVisualDrawingProperties() { Id = 1, Name = "" };
nonVisualProperties.NonVisualGroupShapeDrawingProperties = new NonVisualGroupShapeDrawingProperties();
nonVisualProperties.ApplicationNonVisualDrawingProperties = new ApplicationNonVisualDrawingProperties();
// Especifique as propriedades de forma do grupo do novo slide.
slide.CommonSlideData.ShapeTree.AppendChild(new GroupShapeProperties());
// Declare e instancie a forma de título do novo slide.
Shape titleShape = slide.CommonSlideData.ShapeTree.AppendChild(new Shape());
drawingObjectId++;
// Especifique as propriedades de forma necessárias para a forma de título.
titleShape.NonVisualShapeProperties = new NonVisualShapeProperties
(new NonVisualDrawingProperties() { Id = drawingObjectId, Name = "Title" },
new NonVisualShapeDrawingProperties(new Drawing.ShapeLocks() { NoGrouping = true }),
new ApplicationNonVisualDrawingProperties(new PlaceholderShape() { Type = PlaceholderValues.Title }));
titleShape.ShapeProperties = new ShapeProperties();
// Especifique o texto da forma de título.
titleShape.TextBody = new TextBody(new Drawing.BodyProperties(),
new Drawing.ListStyle(),
new Drawing.Paragraph(new Drawing.Run(new Drawing.Text() { Text = slideTitle })));
// Declare e instancie a forma de corpo do novo slide.
Shape bodyShape = slide.CommonSlideData.ShapeTree.AppendChild(new Shape());
drawingObjectId++;
// Especifique as propriedades de forma necessárias para a forma de corpo.
bodyShape.NonVisualShapeProperties = new NonVisualShapeProperties(new NonVisualDrawingProperties() { Id = drawingObjectId, Name = "Content Placeholder" },
new NonVisualShapeDrawingProperties(new Drawing.ShapeLocks() { NoGrouping = true }),
new ApplicationNonVisualDrawingProperties(new PlaceholderShape() { Index = 1 }));
bodyShape.ShapeProperties = new ShapeProperties();
// Especifique o texto da forma de corpo.
bodyShape.TextBody = new TextBody(new Drawing.BodyProperties(),
new Drawing.ListStyle(),
new Drawing.Paragraph());
// Crie a parte de slide para o novo slide.
SlidePart slidePart = presentationPart.AddNewPart<SlidePart>();
// Salve a nova parte de slide.
slide.Save(slidePart);
// Modifique a lista de IDs de slides na parte da apresentação.
// A lista de IDs de slides não deve ser nula.
SlideIdList slideIdList = presentationPart.Presentation.SlideIdList;
// Encontre o maior ID de slide na lista atual.
uint maxSlideId = 1;
SlideId prevSlideId = null;
foreach (SlideId slideId in slideIdList.ChildElements)
{
if (slideId.Id > maxSlideId)
{
maxSlideId = slideId.Id;
}
position--;
if (position == 0)
{
prevSlideId = slideId;
}
}
maxSlideId++;
// Obtenha o ID do slide anterior.
SlidePart lastSlidePart;
if (prevSlideId != null)
{
lastSlidePart = (SlidePart)presentationPart.GetPartById(prevSlideId.RelationshipId);
}
else
{
lastSlidePart = (SlidePart)presentationPart.GetPartById(((SlideId)(slideIdList.ChildElements[0])).RelationshipId);
}
// Use o mesmo layout de slide do slide anterior.
if (null != lastSlidePart.SlideLayoutPart)
{
slidePart.AddPart(lastSlidePart.SlideLayoutPart);
}
// Insira o novo slide na lista de slides após o slide anterior.
SlideId newSlideId = slideIdList.InsertAfter(new SlideId(), prevSlideId);
newSlideId.Id = maxSlideId;
newSlideId.RelationshipId = presentationPart.GetIdOfPart(slidePart);
// Salve a apresentação modificada.
presentationPart.Presentation.Save();
}
}
Aspose.Slides
Cada arquivo de apresentação PowerPoint contém um slide Main Master e outros slides Normais. Isso significa que um arquivo de apresentação contém pelo menos um ou mais slides. É importante saber que arquivos de apresentação sem slides não são suportados pelo Aspose.Slides para .NET. Cada slide tem posição específica e um Id único. O Id do slide pode variar de 0 a 255 para slides master e de 256 a 65535 para slides normais.
Aspose.Slides para .NET permite que os desenvolvedores adicionem slides vazios às apresentações usando o método AddEmptySlide exposto pelo objeto Presentation. Para adicionar um slide vazio na apresentação, siga os passos abaixo:
- Crie uma instância da classe Presentation
- Chame o método AddEmptySlide exposto pelo objeto Presentation
- Faça algum trabalho com o slide vazio recém-adicionado
- Adicione outro slide e insira texto nele.
- Finalmente, grave o arquivo PPT usando o método Write exposto pelo objeto Presentation
string FileName = FilePath + "Adding Slide to Presentation.pptx";
//Instanciar a classe PresentationEx que representa o arquivo PPT
Presentation pres = new Presentation();
//Um slide em branco é adicionado por padrão, ao criar
//a apresentação a partir do construtor padrão
//Adicionar um slide vazio à apresentação e obter a referência de
//esse slide vazio
ISlide slide = pres.Slides.AddEmptySlide(pres.LayoutSlides[0]);
//Gravar a saída no disco
pres.Save(FileName,Aspose.Slides.Export.SaveFormat.Pptx);