Agregar diapositiva a la presentación
Presentación OpenXML
En la funcionalidad a continuación, por defecto se agrega una diapositiva a la presentación. Aquí estamos agregando una nueva diapositiva en el índice 2 que tiene algo de texto.
string FilePath = @"..\..\..\..\Sample Files\";
string FileName = FilePath + "Agregar diapositiva a la presentación.pptx";
InsertNewSlide(FileName, 1, "Mi nueva diapositiva");
// Insertar una diapositiva en la presentación especificada.
public static void InsertNewSlide(string presentationFile, int position, string slideTitle)
{
// Abrir el documento fuente como lectura/escritura.
using (PresentationDocument presentationDocument = PresentationDocument.Open(presentationFile, true))
{
// Pasar el documento fuente y la posición y título de la diapositiva que se va a insertar al siguiente método.
InsertNewSlide(presentationDocument, position, slideTitle);
}
}
// Insertar la diapositiva especificada en la presentación en la posición 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;
// Verificar que la presentación no esté vacía.
if (presentationPart == null)
{
throw new InvalidOperationException("El documento de presentación está vacío.");
}
// Declarar e instanciar una nueva diapositiva.
Slide slide = new Slide(new CommonSlideData(new ShapeTree()));
uint drawingObjectId = 1;
// Construir el contenido de la diapositiva.
// Especificar las propiedades no visuales de la nueva diapositiva.
NonVisualGroupShapeProperties nonVisualProperties = slide.CommonSlideData.ShapeTree.AppendChild(new NonVisualGroupShapeProperties());
nonVisualProperties.NonVisualDrawingProperties = new NonVisualDrawingProperties() { Id = 1, Name = "" };
nonVisualProperties.NonVisualGroupShapeDrawingProperties = new NonVisualGroupShapeDrawingProperties();
nonVisualProperties.ApplicationNonVisualDrawingProperties = new ApplicationNonVisualDrawingProperties();
// Especificar las propiedades del grupo de la nueva diapositiva.
slide.CommonSlideData.ShapeTree.AppendChild(new GroupShapeProperties());
// Declarar e instanciar la forma del título de la nueva diapositiva.
Shape titleShape = slide.CommonSlideData.ShapeTree.AppendChild(new Shape());
drawingObjectId++;
// Especificar las propiedades requeridas de la forma para la forma del título.
titleShape.NonVisualShapeProperties = new NonVisualShapeProperties
(new NonVisualDrawingProperties() { Id = drawingObjectId, Name = "Título" },
new NonVisualShapeDrawingProperties(new Drawing.ShapeLocks() { NoGrouping = true }),
new ApplicationNonVisualDrawingProperties(new PlaceholderShape() { Type = PlaceholderValues.Title }));
titleShape.ShapeProperties = new ShapeProperties();
// Especificar el texto de la forma del título.
titleShape.TextBody = new TextBody(new Drawing.BodyProperties(),
new Drawing.ListStyle(),
new Drawing.Paragraph(new Drawing.Run(new Drawing.Text() { Text = slideTitle })));
// Declarar e instanciar la forma del cuerpo de la nueva diapositiva.
Shape bodyShape = slide.CommonSlideData.ShapeTree.AppendChild(new Shape());
drawingObjectId++;
// Especificar las propiedades requeridas de la forma para la forma del cuerpo.
bodyShape.NonVisualShapeProperties = new NonVisualShapeProperties(new NonVisualDrawingProperties() { Id = drawingObjectId, Name = "Marcador de posición de contenido" },
new NonVisualShapeDrawingProperties(new Drawing.ShapeLocks() { NoGrouping = true }),
new ApplicationNonVisualDrawingProperties(new PlaceholderShape() { Index = 1 }));
bodyShape.ShapeProperties = new ShapeProperties();
// Especificar el texto de la forma del cuerpo.
bodyShape.TextBody = new TextBody(new Drawing.BodyProperties(),
new Drawing.ListStyle(),
new Drawing.Paragraph());
// Crear la parte de la diapositiva para la nueva diapositiva.
SlidePart slidePart = presentationPart.AddNewPart<SlidePart>();
// Guardar la nueva parte de la diapositiva.
slide.Save(slidePart);
// Modificar la lista de ID de diapositivas en la parte de presentación.
// La lista de ID de diapositivas no debe ser nula.
SlideIdList slideIdList = presentationPart.Presentation.SlideIdList;
// Encontrar el ID de diapositiva más alto en la lista actual.
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++;
// Obtener el ID de la diapositiva anterior.
SlidePart lastSlidePart;
if (prevSlideId != null)
{
lastSlidePart = (SlidePart)presentationPart.GetPartById(prevSlideId.RelationshipId);
}
else
{
lastSlidePart = (SlidePart)presentationPart.GetPartById(((SlideId)(slideIdList.ChildElements[0])).RelationshipId);
}
// Usar el mismo diseño de diapositiva que el de la diapositiva anterior.
if (null != lastSlidePart.SlideLayoutPart)
{
slidePart.AddPart(lastSlidePart.SlideLayoutPart);
}
// Insertar la nueva diapositiva en la lista de diapositivas después de la diapositiva anterior.
SlideId newSlideId = slideIdList.InsertAfter(new SlideId(), prevSlideId);
newSlideId.Id = maxSlideId;
newSlideId.RelationshipId = presentationPart.GetIdOfPart(slidePart);
// Guardar la presentación modificada.
presentationPart.Presentation.Save();
}
}
Aspose.Slides
Cada archivo de presentación de PowerPoint contiene una Diapositiva Maestra Principal y otras Diapositivas Normales. Esto significa que un archivo de presentación contiene al menos una o más diapositivas. Es importante saber que los archivos de presentación sin diapositivas no son compatibles con Aspose.Slides para .NET. Cada diapositiva tiene una posición específica y un Id único. El Id de la diapositiva puede variar de 0 a 255 para las diapositivas maestras y de 256 a 65535 para las diapositivas normales.
Aspose.Slides para .NET permite a los desarrolladores agregar diapositivas vacías a las presentaciones utilizando el método AddEmptySlide expuesto por el objeto Presentation. Para agregar una diapositiva vacía en la presentación, siga los pasos a continuación:
- Crear una instancia de la clase Presentation
- Llamar al método AddEmptySlide expuesto por el objeto Presentation
- Realizar algún trabajo con la nueva diapositiva vacía añadida
- Agregar otra diapositiva e insertar texto en ella.
- Finalmente, escribir el archivo PPT utilizando el método Write expuesto por el objeto Presentation
string FileName = FilePath + "Agregar diapositiva a la presentación.pptx";
//Instanciar la clase PresentationEx que representa el archivo PPT
Presentation pres = new Presentation();
//Se añade una diapositiva en blanco por defecto, al crear
//presentación desde el constructor por defecto
//Agregar una diapositiva vacía a la presentación y obtener la referencia de
//esa diapositiva vacía
ISlide slide = pres.Slides.AddEmptySlide(pres.LayoutSlides[0]);
//Escribir la salida en el disco
pres.Save(FileName,Aspose.Slides.Export.SaveFormat.Pptx);