Administrar párrafos de texto de PowerPoint en Android
Aspose.Slides proporciona todas las interfaces y clases que necesita para trabajar con textos, párrafos y fragmentos de PowerPoint en Java.
- Aspose.Slides proporciona la interfaz ITextFrame para permitirle agregar objetos que representan un párrafo. Un objeto
ITextFamepuede tener uno o varios párrafos (cada párrafo se crea mediante un retorno de carro). - Aspose.Slides proporciona la interfaz IParagraph para permitirle agregar objetos que representan fragmentos. Un objeto
IParagraphpuede tener uno o varios fragmentos (colección de objetos iPortions). - Aspose.Slides proporciona la interfaz IPortion para permitirle agregar objetos que representan textos y sus propiedades de formato.
Un objeto IParagraph es capaz de manejar textos con diferentes propiedades de formato a través de sus objetos subyacentes IPortion.
Agregar varios párrafos que contengan varios fragmentos de texto
Estos pasos le muestran cómo agregar un marco de texto que contenga 3 párrafos y cada párrafo contenga 3 fragmentos:
- Crear una instancia de la clase Presentation.
- Acceder a la referencia de la diapositiva correspondiente mediante su índice.
- Agregar un rectángulo IAutoShape a la diapositiva.
- Obtener el ITextFrame asociado con el IAutoShape.
- Crear dos objetos IParagraph y añadirlos a la colección
IParagraphsdel ITextFrame. - Crear tres objetos IPortion para cada nuevo
IParagraph(dos objetos Portion para el párrafo predeterminado) y añadir cada objetoIPortiona la colección IPortion de cadaIParagraph. - Establecer algún texto para cada fragmento.
- Aplicar sus características de formato preferidas a cada fragmento usando las propiedades de formato expuestas por el objeto
IPortion. - Guardar la presentación modificada.
Este código Java es una implementación de los pasos para agregar párrafos que contengan fragmentos:
// Instanciar una clase Presentation que representa un archivo PPTX
Presentation pres = new Presentation();
try {
// Accediendo a la primera diapositiva
ISlide slide = pres.getSlides().get_Item(0);
// Agregar un AutoShape de tipo Rectángulo
IAutoShape ashp = slide.getShapes().addAutoShape(ShapeType.Rectangle, 50, 150, 300, 150);
// Acceder al TextFrame del AutoShape
ITextFrame tf = ashp.getTextFrame();
// Crear párrafos y fragmentos con diferentes formatos de texto
IParagraph para0 = tf.getParagraphs().get_Item(0);
IPortion port01 = new Portion();
IPortion port02 = new Portion();
para0.getPortions().add(port01);
para0.getPortions().add(port02);
IParagraph para1 = new Paragraph();
tf.getParagraphs().add(para1);
IPortion port10 = new Portion();
IPortion port11 = new Portion();
IPortion port12 = new Portion();
para1.getPortions().add(port10);
para1.getPortions().add(port11);
para1.getPortions().add(port12);
IParagraph para2 = new Paragraph();
tf.getParagraphs().add(para2);
IPortion port20 = new Portion();
IPortion port21 = new Portion();
IPortion port22 = new Portion();
para2.getPortions().add(port20);
para2.getPortions().add(port21);
para2.getPortions().add(port22);
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
IPortion portion = tf.getParagraphs().get_Item(i).getPortions().get_Item(j);
portion.setText("Portion0" + j);
if (j == 0) {
portion.getPortionFormat().getFillFormat().setFillType(FillType.Solid);
portion.getPortionFormat().getFillFormat().getSolidFillColor().setColor(Color.RED);
portion.getPortionFormat().setFontBold(NullableBool.True);
portion.getPortionFormat().setFontHeight(15);
} else if (j == 1) {
portion.getPortionFormat().getFillFormat().setFillType(FillType.Solid);
portion.getPortionFormat().getFillFormat().getSolidFillColor().setColor(Color.BLUE);
portion.getPortionFormat().setFontItalic(NullableBool.True);
portion.getPortionFormat().setFontHeight(18);
}
}
}
// Guardar el PPTX en disco
pres.save("multiParaPort_out.pptx", SaveFormat.Pptx);
} finally {
if (pres != null) pres.dispose();
}
Administrar viñetas de párrafo
Las listas con viñetas le ayudan a organizar y presentar la información de forma rápida y eficiente. Los párrafos con viñetas siempre son más fáciles de leer y comprender.
- Crear una instancia de la clase Presentation.
- Acceder a la referencia de la diapositiva correspondiente mediante su índice.
- Agregar una forma automática a la diapositiva seleccionada.
- Acceder al TextFrame de la forma automática.
- Eliminar el párrafo predeterminado en el
TextFrame. - Crear la primera instancia de párrafo usando la clase Paragraph.
- Establecer el
Typede la viñeta para el párrafo aSymboly establecer el carácter de la viñeta. - Establecer el
Textdel párrafo. - Establecer la
Indentdel párrafo para la viñeta. - Establecer un color para la viñeta.
- Establecer una altura para la viñeta.
- Añadir el nuevo párrafo a la colección de párrafos del
TextFrame. - Añadir el segundo párrafo y repetir el proceso descrito en los pasos 7 a 13.
- Guardar la presentación.
Este código Java le muestra cómo agregar una viñeta de párrafo:
// Instancia una clase Presentation que representa un archivo PPTX
Presentation pres = new Presentation();
try {
// Accede a la primera diapositiva
ISlide slide = pres.getSlides().get_Item(0);
// Agrega y accede al Autoshape
IAutoShape aShp = slide.getShapes().addAutoShape(ShapeType.Rectangle, 200, 200, 400, 200);
// Accede al marco de texto del autoshape
ITextFrame txtFrm = aShp.getTextFrame();
// Elimina el párrafo predeterminado
txtFrm.getParagraphs().removeAt(0);
// Crea un párrafo
Paragraph para = new Paragraph();
// Establece el estilo de viñeta del párrafo y el símbolo
para.getParagraphFormat().getBullet().setType(BulletType.Symbol);
para.getParagraphFormat().getBullet().setChar((char)8226);
// Establece el texto del párrafo
para.setText("Welcome to Aspose.Slides");
// Establece la sangría de la viñeta
para.getParagraphFormat().setIndent(25);
// Establece el color de la viñeta
para.getParagraphFormat().getBullet().getColor().setColorType(ColorType.RGB);
para.getParagraphFormat().getBullet().getColor().setColor(Color.BLACK);
para.getParagraphFormat().getBullet().setBulletHardColor(NullableBool.True); // establecer IsBulletHardColor a true para usar un color de viñeta propio
// Establece la altura de la viñeta
para.getParagraphFormat().getBullet().setHeight(100);
// Añade el párrafo al marco de texto
txtFrm.getParagraphs().add(para);
// Crea el segundo párrafo
Paragraph para2 = new Paragraph();
// Establece el tipo y estilo de viñeta del párrafo
para2.getParagraphFormat().getBullet().setType(BulletType.Numbered);
para2.getParagraphFormat().getBullet().setNumberedBulletStyle(NumberedBulletStyle.BulletCircleNumWDBlackPlain);
// Añade texto al párrafo
para2.setText("This is numbered bullet");
// Establece la sangría de la viñeta
para2.getParagraphFormat().setIndent(25);
para2.getParagraphFormat().getBullet().getColor().setColorType(ColorType.RGB);
para2.getParagraphFormat().getBullet().getColor().setColor(Color.BLACK);
para2.getParagraphFormat().getBullet().setBulletHardColor(NullableBool.True); // establecer IsBulletHardColor a true para usar un color de viñeta propio
// Establece la altura de la viñeta
para2.getParagraphFormat().getBullet().setHeight(100);
// Añade el párrafo al marco de texto
txtFrm.getParagraphs().add(para2);
// Guarda la presentación modificada
pres.save("Bullet_out.pptx", SaveFormat.Pptx);
} finally {
if (pres != null) pres.dispose();
}
Administrar viñetas con imágenes
Las listas con viñetas le ayudan a organizar y presentar la información de forma rápida y eficiente. Los párrafos con imágenes son fáciles de leer y comprender.
- Crear una instancia de la clase Presentation.
- Acceder a la referencia de la diapositiva correspondiente mediante su índice.
- Agregar una forma automática a la diapositiva.
- Acceder al TextFrame de la forma automática.
- Eliminar el párrafo predeterminado en el
TextFrame. - Crear la primera instancia de párrafo usando la clase Paragraph.
- Cargar la imagen en IPPImage.
- Establecer el tipo de viñeta a Picture y asignar la imagen.
- Establecer el
Textdel párrafo. - Establecer la
Indentdel párrafo para la viñeta. - Establecer un color para la viñeta.
- Establecer una altura para la viñeta.
- Añadir el nuevo párrafo a la colección de párrafos del
TextFrame. - Añadir el segundo párrafo y repetir el proceso basado en los pasos anteriores.
- Guardar la presentación modificada.
Este código Java le muestra cómo agregar y administrar viñetas con imágenes:
// Instancia una clase Presentation que representa un archivo PPTX
Presentation presentation = new Presentation();
try {
// Accede a la primera diapositiva
ISlide slide = presentation.getSlides().get_Item(0);
// Instancia la imagen para viñetas
IPPImage picture;
IImage image = Images.fromFile("bullets.png");
try {
picture = presentation.getImages().addImage(image);
} finally {
if (image != null) image.dispose();
}
// Agrega y accede al Autoshape
IAutoShape autoShape = slide.getShapes().addAutoShape(ShapeType.Rectangle, 200, 200, 400, 200);
// Accede al marco de texto del autoshape
ITextFrame textFrame = autoShape.getTextFrame();
// Elimina el párrafo predeterminado
textFrame.getParagraphs().removeAt(0);
// Crea un nuevo párrafo
Paragraph paragraph = new Paragraph();
paragraph.setText("Welcome to Aspose.Slides");
// Establece el estilo de viñeta del párrafo y la imagen
paragraph.getParagraphFormat().getBullet().setType(BulletType.Picture);
paragraph.getParagraphFormat().getBullet().getPicture().setImage(picture);
// Establece la altura de la viñeta
paragraph.getParagraphFormat().getBullet().setHeight(100);
// Añade el párrafo al marco de texto
textFrame.getParagraphs().add(paragraph);
// Escribe la presentación como archivo PPTX
presentation.save("ParagraphPictureBulletsPPTX_out.pptx", SaveFormat.Pptx);
// Escribe la presentación como archivo PPT
presentation.save("ParagraphPictureBulletsPPT_out.ppt", SaveFormat.Ppt);
} catch (IOException e) {
} finally {
if (presentation != null) presentation.dispose();
}
Administrar viñetas multinivel
Las listas con viñetas le ayudan a organizar y presentar la información de forma rápida y eficiente. Las viñetas multinivel son fáciles de leer y comprender.
- Crear una instancia de la clase Presentation.
- Acceder a la referencia de la diapositiva correspondiente mediante su índice.
- Agregar una forma automática en la nueva diapositiva.
- Acceder al TextFrame de la forma automática.
- Eliminar el párrafo predeterminado en el
TextFrame. - Crear la primera instancia de párrafo mediante la clase Paragraph y establecer la profundidad a 0.
- Crear la segunda instancia de párrafo mediante la clase
Paragraphy establecer la profundidad a 1. - Crear la tercera instancia de párrafo mediante la clase
Paragraphy establecer la profundidad a 2. - Crear la cuarta instancia de párrafo mediante la clase
Paragraphy establecer la profundidad a 3. - Añadir los nuevos párrafos a la colección de párrafos del
TextFrame. - Guardar la presentación modificada.
Este código Java le muestra cómo agregar y administrar viñetas multinivel:
// Instancia una clase Presentation que representa un archivo PPTX
Presentation pres = new Presentation();
try {
// Accede a la primera diapositiva
ISlide slide = pres.getSlides().get_Item(0);
// Agrega y accede al Autoshape
IAutoShape aShp = slide.getShapes().addAutoShape(ShapeType.Rectangle, 200, 200, 400, 200);
// Accede al marco de texto del autoshape creado
ITextFrame text = aShp.addTextFrame("");
// Elimina el párrafo predeterminado
text.getParagraphs().clear();
// Agrega el primer párrafo
IParagraph para1 = new Paragraph();
para1.setText("Content");
para1.getParagraphFormat().getBullet().setType(BulletType.Symbol);
para1.getParagraphFormat().getBullet().setChar((char)8226);
para1.getParagraphFormat().getDefaultPortionFormat().getFillFormat().setFillType(FillType.Solid);
para1.getParagraphFormat().getDefaultPortionFormat().getFillFormat().getSolidFillColor().setColor(Color.BLACK);
// Establece el nivel de viñeta
para1.getParagraphFormat().setDepth((short)0);
// Agrega el segundo párrafo
IParagraph para2 = new Paragraph();
para2.setText("Second Level");
para2.getParagraphFormat().getBullet().setType(BulletType.Symbol);
para2.getParagraphFormat().getBullet().setChar('-');
para2.getParagraphFormat().getDefaultPortionFormat().getFillFormat().setFillType(FillType.Solid);
para2.getParagraphFormat().getDefaultPortionFormat().getFillFormat().getSolidFillColor().setColor(Color.BLACK);
// Establece el nivel de viñeta
para2.getParagraphFormat().setDepth((short)1);
// Agrega el tercer párrafo
IParagraph para3 = new Paragraph();
para3.setText("Third Level");
para3.getParagraphFormat().getBullet().setType(BulletType.Symbol);
para3.getParagraphFormat().getBullet().setChar((char)8226);
para3.getParagraphFormat().getDefaultPortionFormat().getFillFormat().setFillType(FillType.Solid);
para3.getParagraphFormat().getDefaultPortionFormat().getFillFormat().getSolidFillColor().setColor(Color.BLACK);
// Establece el nivel de viñeta
para3.getParagraphFormat().setDepth((short)2);
// Agrega el cuarto párrafo
IParagraph para4 = new Paragraph();
para4.setText("Fourth Level");
para4.getParagraphFormat().getBullet().setType(BulletType.Symbol);
para4.getParagraphFormat().getBullet().setChar('-');
para4.getParagraphFormat().getDefaultPortionFormat().getFillFormat().setFillType(FillType.Solid);
para4.getParagraphFormat().getDefaultPortionFormat().getFillFormat().getSolidFillColor().setColor(Color.BLACK);
// Establece el nivel de viñeta
para4.getParagraphFormat().setDepth((short)3);
// Agrega los párrafos a la colección
text.getParagraphs().add(para1);
text.getParagraphs().add(para2);
text.getParagraphs().add(para3);
text.getParagraphs().add(para4);
// Escribe la presentación como archivo PPTX
pres.save("MultilevelBullet.pptx", SaveFormat.Pptx);
} finally {
if (pres != null) pres.dispose();
}
Administrar un párrafo con una lista numerada personalizada
La interfaz IBulletFormat proporciona la propiedad NumberedBulletStartWith y otras que le permiten administrar párrafos con numeración o formato personalizado.
- Crear una instancia de la clase Presentation.
- Acceder a la diapositiva que contiene el párrafo.
- Agregar una forma automática a la diapositiva.
- Acceder al TextFrame de la forma automática.
- Eliminar el párrafo predeterminado en el
TextFrame. - Crear la primera instancia de párrafo mediante la clase Paragraph y establecer NumberedBulletStartWith en 2.
- Crear la segunda instancia de párrafo mediante la clase
Paragraphy establecerNumberedBulletStartWithen 3. - Crear la tercera instancia de párrafo mediante la clase
Paragraphy establecerNumberedBulletStartWithen 7. - Añadir los nuevos párrafos a la colección de párrafos del
TextFrame. - Guardar la presentación modificada.
Este código Java le muestra cómo agregar y administrar párrafos con numeración o formato personalizado:
Presentation presentation = new Presentation();
try {
IAutoShape shape = presentation.getSlides().get_Item(0).getShapes().addAutoShape(ShapeType.Rectangle, 200, 200, 400, 200);
// Accede al marco de texto del autoshape creado
ITextFrame textFrame = shape.getTextFrame();
// Elimina el párrafo predeterminado existente
textFrame.getParagraphs().removeAt(0);
// Primera lista
Paragraph paragraph1 = new Paragraph();
paragraph1.setText("bullet 2");
paragraph1.getParagraphFormat().setDepth((short)4);
paragraph1.getParagraphFormat().getBullet().setNumberedBulletStartWith((short)2);
paragraph1.getParagraphFormat().getBullet().setType(BulletType.Numbered);
textFrame.getParagraphs().add(paragraph1);
Paragraph paragraph2 = new Paragraph();
paragraph2.setText("bullet 3");
paragraph2.getParagraphFormat().setDepth((short)4);
paragraph2.getParagraphFormat().getBullet().setNumberedBulletStartWith((short)3);
paragraph2.getParagraphFormat().getBullet().setType(BulletType.Numbered);
textFrame.getParagraphs().add(paragraph2);
Paragraph paragraph5 = new Paragraph();
paragraph5.setText("bullet 7");
paragraph5.getParagraphFormat().setDepth((short)4);
paragraph5.getParagraphFormat().getBullet().setNumberedBulletStartWith((short)7);
paragraph5.getParagraphFormat().getBullet().setType(BulletType.Numbered);
textFrame.getParagraphs().add(paragraph5);
presentation.save("SetCustomBulletsNumber-slides.pptx", SaveFormat.Pptx);
} finally {
if (presentation != null) presentation.dispose();
}
Establecer sangría de párrafo
- Crear una instancia de la clase Presentation.
- Acceder a la referencia de la diapositiva correspondiente mediante su índice.
- Agregar un rectángulo forma automática a la diapositiva.
- Añadir un TextFrame con tres párrafos al rectángulo forma automática.
- Ocultar las líneas del rectángulo.
- Establecer la sangría para cada Paragraph a través de su propiedad
BulletOffset. - Guardar la presentación modificada como archivo PPT.
Este código Java le muestra cómo establecer una sangría de párrafo:
// Instanciar clase Presentation
Presentation pres = new Presentation();
try {
// Obtener la primera diapositiva
ISlide sld = pres.getSlides().get_Item(0);
// Añadir una forma rectangular
IAutoShape rect = sld.getShapes().addAutoShape(ShapeType.Rectangle, 100, 100, 500, 150);
// Añadir TextFrame al rectángulo
ITextFrame tf = rect.addTextFrame("This is first line \rThis is second line \rThis is third line");
// Establecer el texto para que se ajuste a la forma
tf.getTextFrameFormat().setAutofitType(TextAutofitType.Shape);
// Ocultar las líneas del rectángulo
rect.getLineFormat().getFillFormat().setFillType(FillType.Solid);
// Obtener el primer párrafo en el TextFrame y establecer su sangría
IParagraph para1 = tf.getParagraphs().get_Item(0);
// Configurar estilo de viñeta del párrafo y símbolo
para1.getParagraphFormat().getBullet().setType(BulletType.Symbol);
para1.getParagraphFormat().getBullet().setChar((char)8226);
para1.getParagraphFormat().setAlignment(TextAlignment.Left);
para1.getParagraphFormat().setDepth((short)2);
para1.getParagraphFormat().setIndent(30);
// Obtener el segundo párrafo en el TextFrame y establecer su sangría
IParagraph para2 = tf.getParagraphs().get_Item(1);
para2.getParagraphFormat().getBullet().setType(BulletType.Symbol);
para2.getParagraphFormat().getBullet().setChar((char)8226);
para2.getParagraphFormat().setAlignment(TextAlignment.Left);
para2.getParagraphFormat().setDepth((short)2);
para2.getParagraphFormat().setIndent(40);
// Obtener el tercer párrafo en el TextFrame y establecer su sangría
IParagraph para3 = tf.getParagraphs().get_Item(2);
para3.getParagraphFormat().getBullet().setType(BulletType.Symbol);
para3.getParagraphFormat().getBullet().setChar((char)8226);
para3.getParagraphFormat().setAlignment(TextAlignment.Left);
para3.getParagraphFormat().setDepth((short)2);
para3.getParagraphFormat().setIndent(50);
// Guardar la presentación en disco
pres.save("InOutDent_out.pptx", SaveFormat.Pptx);
} finally {
if (pres != null) pres.dispose();
}
Establecer sangría colgante para un párrafo
Este código Java le muestra cómo establecer la sangría colgante para un párrafo:
Presentation pres = new Presentation();
try {
IAutoShape autoShape = pres.getSlides().get_Item(0).getShapes().addAutoShape(ShapeType.Rectangle, 50, 250, 550, 150);
Paragraph para1 = new Paragraph();
para1.setText("Example");
Paragraph para2 = new Paragraph();
para2.setText("Set Hanging Indent for Paragraph");
Paragraph para3 = new Paragraph();
para3.setText("This code shows you how to set the hanging indent for a paragraph: ");
para2.getParagraphFormat().setMarginLeft(10f);
para3.getParagraphFormat().setMarginLeft(20f);
autoShape.getTextFrame().getParagraphs().add(para1);
autoShape.getTextFrame().getParagraphs().add(para2);
autoShape.getTextFrame().getParagraphs().add(para3);
pres.save("pres.pptx", SaveFormat.Pptx);
} finally {
if (pres != null) pres.dispose();
}
Administrar propiedades de ejecución al final del párrafo
- Crear una instancia de la clase Presentation.
- Obtener la referencia de la diapositiva que contiene el párrafo mediante su posición.
- Agregar un rectángulo forma automática a la diapositiva.
- Añadir un TextFrame con dos párrafos al rectángulo.
- Establecer el
FontHeighty el tipo de fuente para los párrafos. - Establecer las propiedades End para los párrafos.
- Guardar la presentación modificada como archivo PPTX.
Este código Java le muestra cómo establecer las propiedades End para los párrafos en PowerPoint:
Presentation pres = new Presentation();
try {
IAutoShape shape = pres.getSlides().get_Item(0).getShapes().addAutoShape(ShapeType.Rectangle, 10, 10, 200, 250);
Paragraph para1 = new Paragraph();
para1.getPortions().add(new Portion("Sample text"));
Paragraph para2 = new Paragraph();
para2.getPortions().add(new Portion("Sample text 2"));
PortionFormat portionFormat = new PortionFormat();
portionFormat.setFontHeight(48);
portionFormat.setLatinFont(new FontData("Times New Roman"));
para2.setEndParagraphPortionFormat(portionFormat);
shape.getTextFrame().getParagraphs().add(para1);
shape.getTextFrame().getParagraphs().add(para2);
pres.save(resourcesOutputPath+"pres.pptx", SaveFormat.Pptx);
} finally {
if (pres != null) pres.dispose();
}
Importar texto HTML en párrafos
Aspose.Slides ofrece soporte mejorado para importar texto HTML en párrafos.
- Crear una instancia de la clase Presentation.
- Acceder a la referencia de la diapositiva correspondiente mediante su índice.
- Agregar una forma automática a la diapositiva.
- Añadir y acceder al
autoshapeITextFrame. - Eliminar el párrafo predeterminado en el
ITextFrame. - Leer el archivo HTML fuente en un TextReader.
- Crear la primera instancia de párrafo mediante la clase Paragraph.
- Añadir el contenido del archivo HTML leído con el TextReader a la ParagraphCollection del TextFrame.
- Guardar la presentación modificada.
Este código Java es una implementación de los pasos para importar textos HTML en párrafos:
// Crear instancia vacía de presentación
Presentation pres = new Presentation();
try {
// Acceder a la diapositiva predeterminada inicial de la presentación
ISlide slide = pres.getSlides().get_Item(0);
// Agregar el AutoShape para alojar el contenido HTML
IAutoShape ashape = slide.getShapes().addAutoShape(ShapeType.Rectangle, 10, 10,
(float)pres.getSlideSize().getSize().getWidth() - 20, (float)pres.getSlideSize().getSize().getHeight() - 10);
ashape.getFillFormat().setFillType(FillType.NoFill);
// Agregar marco de texto a la forma
ashape.addTextFrame("");
// Borrar todos los párrafos del marco de texto agregado
ashape.getTextFrame().getParagraphs().clear();
// Cargar el archivo HTML usando lector de flujo
TextReader tr = new StreamReader("file.html");
// Agregar texto del lector de flujo HTML al marco de texto
ashape.getTextFrame().getParagraphs().addFromHtml(tr.readToEnd());
// Guardar presentación
pres.save("output_out.pptx", SaveFormat.Pptx);
} finally {
if (pres != null) pres.dispose();
}
Exportar texto de párrafo a HTML
Aspose.Slides ofrece soporte mejorado para exportar textos (contenidos en párrafos) a HTML.
- Crear una instancia de la clase Presentation y cargar la presentación deseada.
- Acceder a la referencia de la diapositiva correspondiente mediante su índice.
- Acceder a la forma que contiene el texto que se exportará a HTML.
- Acceder a la TextFrame de la forma.
- Crear una instancia de
StreamWritery añadir el nuevo archivo HTML. - Proporcionar un índice inicial a StreamWriter y exportar los párrafos que prefiera.
Este código Java le muestra cómo exportar textos de párrafo de PowerPoint a HTML:
// Cargar el archivo de presentación
Presentation pres = new Presentation("ExportingHTMLText.pptx");
try {
// Acceder a la primera diapositiva predeterminada de la presentación
ISlide slide = pres.getSlides().get_Item(0);
// Índice deseado
int index = 0;
// Acceder a la forma añadida
IAutoShape ashape = (IAutoShape) slide.getShapes().get_Item(index);
// Crear archivo HTML de salida
OutputStream os = new FileOutputStream("output.html");
Writer writer = new OutputStreamWriter(os, "UTF-8");
// Extraer el primer párrafo como HTML
// Escribir datos de los párrafos a HTML proporcionando el índice inicial del párrafo y el número total de párrafos a copiar
writer.write(ashape.getTextFrame().getParagraphs().exportToHtml(0, ashape.getTextFrame().getParagraphs().getCount(), null));
writer.close();
} catch (IOException e) {
} finally {
if (pres != null) pres.dispose();
}
Guardar un párrafo como una imagen
En esta sección, exploraremos dos ejemplos que demuestran cómo guardar un párrafo de texto, representado por la interfaz IParagraph, como una imagen. Ambos ejemplos incluyen la obtención de la imagen de una forma que contiene el párrafo usando los métodos getImage de la interfaz IShape, el cálculo de los límites del párrafo dentro de la forma y su exportación como una imagen bitmap. Estos enfoques le permiten extraer partes específicas del texto de presentaciones de PowerPoint y guardarlas como imágenes independientes, lo que puede ser útil para diversos escenarios.
Supongamos que tenemos un archivo de presentación llamado sample.pptx con una diapositiva, donde la primera forma es un cuadro de texto que contiene tres párrafos.

Ejemplo 1
En este ejemplo, obtenemos el segundo párrafo como una imagen. Para ello, extraemos la imagen de la forma de la primera diapositiva de la presentación y luego calculamos los límites del segundo párrafo en el marco de texto de la forma. El párrafo se vuelve a dibujar sobre una nueva imagen bitmap, que se guarda en formato PNG. Este método es especialmente útil cuando necesita guardar un párrafo específico como una imagen separada manteniendo las dimensiones y el formato exactos del texto.
Presentation presentation = new Presentation("sample.pptx");
try {
IAutoShape firstShape = (IAutoShape) presentation.getSlides().get_Item(0).getShapes().get_Item(0);
// Guardar la forma en memoria como un bitmap.
IImage shapeImage = firstShape.getImage();
ByteArrayOutputStream shapeImageStream = new ByteArrayOutputStream();
shapeImage.save(shapeImageStream, ImageFormat.Png);
shapeImage.dispose();
// Crear un bitmap de la forma desde la memoria.
InputStream shapeImageInputStream = new ByteArrayInputStream(shapeImageStream.toByteArray());
BufferedImage shapeBitmap = ImageIO.read(shapeImageInputStream);
// Calcular los límites del segundo párrafo.
IParagraph secondParagraph = firstShape.getTextFrame().getParagraphs().get_Item(1);
RectF paragraphRectangle = secondParagraph.getRect();
// Calcular las coordenadas y el tamaño de la imagen de salida (tamaño mínimo - 1x1 píxel).
int imageX = (int) Math.floor(paragraphRectangle.left);
int imageY = (int) Math.floor(paragraphRectangle.top);
int imageWidth = Math.max(1, (int) Math.ceil(paragraphRectangle.width()));
int imageHeight = Math.max(1, (int) Math.ceil(paragraphRectangle.height()));
// Recortar el bitmap de la forma para obtener solo el bitmap del párrafo.
BufferedImage paragraphBitmap = shapeBitmap.getSubimage(imageX, imageY, imageWidth, imageHeight);
ImageIO.write(paragraphBitmap, "png", new File("paragraph.png"));
} catch (IOException e) {
} finally {
if (presentation != null) presentation.dispose();
}
El resultado:

Ejemplo 2
En este ejemplo, ampliamos el enfoque anterior añadiendo factores de escala a la imagen del párrafo. La forma se extrae de la presentación y se guarda como una imagen con un factor de escala de 2. Esto permite obtener una salida de mayor resolución al exportar el párrafo. Los límites del párrafo se calculan considerando la escala. La escala puede ser particularmente útil cuando se necesita una imagen más detallada, por ejemplo, para materiales impresos de alta calidad.
float imageScaleX = 2f;
float imageScaleY = imageScaleX;
Presentation presentation = new Presentation("sample.pptx");
try {
IAutoShape firstShape = (IAutoShape) presentation.getSlides().get_Item(0).getShapes().get_Item(0);
// Guardar la forma en memoria como un bitmap con escala.
IImage shapeImage = firstShape.getImage(ShapeThumbnailBounds.Shape, imageScaleX, imageScaleY);
ByteArrayOutputStream shapeImageStream = new ByteArrayOutputStream();
shapeImage.save(shapeImageStream, ImageFormat.Png);
shapeImage.dispose();
// Create a shape bitmap from memory.
InputStream shapeImageInputStream = new ByteArrayInputStream(shapeImageStream.toByteArray());
BufferedImage shapeBitmap = ImageIO.read(shapeImageInputStream);
// Calculate the boundaries of the second paragraph.
IParagraph secondParagraph = firstShape.getTextFrame().getParagraphs().get_Item(1);
RectF paragraphRectangle = secondParagraph.getRect();
paragraphRectangle.set(
paragraphRectangle.left * imageScaleX,
paragraphRectangle.top * imageScaleY,
paragraphRectangle.right * imageScaleX,
paragraphRectangle.bottom * imageScaleY
);
// Calculate the coordinates and size for the output image (minimum size - 1x1 pixel).
int imageX = (int) Math.floor(paragraphRectangle.left);
int imageY = (int) Math.floor(paragraphRectangle.top);
int imageWidth = Math.max(1, (int) Math.ceil(paragraphRectangle.width()));
int imageHeight = Math.max(1, (int) Math.ceil(paragraphRectangle.height()));
// Crop the shape bitmap to get the paragraph bitmap only.
BufferedImage paragraphBitmap = shapeBitmap.getSubimage(imageX, imageY, imageWidth, imageHeight);
ImageIO.write(paragraphBitmap, "png", new File("paragraph.png"));
} catch (IOException e) {
} finally {
if (presentation != null) presentation.dispose();
}
Preguntas frecuentes
¿Puedo desactivar completamente el ajuste de línea dentro de un marco de texto?
Sí. Use la configuración de ajuste del marco de texto (setWrapText) para desactivar el ajuste y que las líneas no se rompan en los bordes del marco.
¿Cómo puedo obtener los límites exactos en la diapositiva de un párrafo específico?
Puede recuperar el rectángulo delimitador del párrafo (e incluso de un solo fragmento) para conocer su posición y tamaño precisos en la diapositiva.
¿Dónde se controla la alineación del párrafo (izquierda/derecha/centrado/justificado)?
Alignment es una configuración a nivel de párrafo en ParagraphFormat; se aplica a todo el párrafo independientemente del formato de los fragmentos individuales.
¿Puedo establecer un idioma de corrección ortográfica solo para una parte del párrafo (por ejemplo, una palabra)?
Sí. El idioma se establece a nivel de fragmento (PortionFormat.setLanguageId), por lo que pueden coexistir varios idiomas dentro de un mismo párrafo.