Gerenciar Parágrafos de Texto do PowerPoint em Java
Introdução
Aspose.Slides fornece todas as interfaces e classes que você precisa para trabalhar com textos, parágrafos e porções do PowerPoint em Java.
- Aspose.Slides fornece a interface ITextFrame que permite adicionar objetos que representam um parágrafo. Um objeto
ITextFamepode ter um ou vários parágrafos (cada parágrafo é criado por meio de uma quebra de linha). - Aspose.Slides fornece a interface IParagraph que permite adicionar objetos que representam porções. Um objeto
IParagraphpode ter uma ou várias porções (coleção de objetos iPortions). - Aspose.Slides fornece a interface IPortion que permite adicionar objetos que representam textos e suas propriedades de formatação.
Um objeto IParagraph é capaz de lidar com textos com diferentes propriedades de formatação por meio de seus objetos subjacentes IPortion.
Adicionar Vários Parágrafos Contendo Várias Porções
Estas etapas mostram como adicionar um quadro de texto contendo 3 parágrafos e cada parágrafo contendo 3 porções:
- Crie uma instância da classe Presentation.
- Acesse a referência do slide relevante através do seu índice.
- Adicione um retângulo IAutoShape ao slide.
- Obtenha o ITextFrame associado ao IAutoShape.
- Crie dois objetos IParagraph e adicione‑os à coleção
IParagraphsdo ITextFrame. - Crie três objetos IPortion para cada novo
IParagraph(dois objetos Portion para o Parágrafo padrão) e adicione cada objetoIPortionà coleção IPortion de cadaIParagraph. - Defina algum texto para cada porção.
- Aplique os recursos de formatação de sua preferência a cada porção usando as propriedades de formatação expostas pelo objeto
IPortion. - Salve a apresentação modificada.
// Instanciar a classe Presentation que representa um arquivo PPTX
Presentation pres = new Presentation();
try {
// Acessando o primeiro slide
ISlide slide = pres.getSlides().get_Item(0);
// Adicionar um AutoShape do tipo Retângulo
IAutoShape ashp = slide.getShapes().addAutoShape(ShapeType.Rectangle, 50, 150, 300, 150);
// Acessar o TextFrame do AutoShape
ITextFrame tf = ashp.getTextFrame();
// Criar Parágrafos e Porções com 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);
}
}
}
// Gravar PPTX no disco
pres.save("multiParaPort_out.pptx", SaveFormat.Pptx);
} finally {
if (pres != null) pres.dispose();
}
Gerenciar Marcadores de Parágrafo
Listas com marcadores ajudam a organizar e apresentar informações de forma rápida e eficiente. Parágrafos com marcadores são sempre mais fáceis de ler e entender.
- Crie uma instância da classe Presentation.
- Acesse a referência do slide relevante através do seu índice.
- Adicione um autoshape ao slide selecionado.
- Acesse o TextFrame do autoshape.
- Remova o parágrafo padrão no
TextFrame. - Crie a primeira instância de parágrafo usando a classe Paragraph.
- Defina o
Typedo marcador paraSymbole defina o caractere do marcador. - Defina o
Textdo parágrafo. - Defina a
Indentdo parágrafo para o marcador. - Defina uma cor para o marcador.
- Defina uma altura para o marcador.
- Adicione o novo parágrafo à coleção de parágrafos do
TextFrame. - Adicione o segundo parágrafo e repita o processo descrito nas etapas 7 a 13.
- Salve a apresentação.
// Instancia uma classe Presentation que representa um arquivo PPTX
Presentation pres = new Presentation();
try {
// Acessa o primeiro slide
ISlide slide = pres.getSlides().get_Item(0);
// Adiciona e acessa o Autoshape
IAutoShape aShp = slide.getShapes().addAutoShape(ShapeType.Rectangle, 200, 200, 400, 200);
// Acessa o quadro de texto do autoshape
ITextFrame txtFrm = aShp.getTextFrame();
// Remove o parágrafo padrão
txtFrm.getParagraphs().removeAt(0);
// Cria um parágrafo
Paragraph para = new Paragraph();
// Define o estilo e o símbolo do marcador do parágrafo
para.getParagraphFormat().getBullet().setType(BulletType.Symbol);
para.getParagraphFormat().getBullet().setChar((char)8226);
// Define o texto do parágrafo
para.setText("Welcome to Aspose.Slides");
// Define a indentação do marcador
para.getParagraphFormat().setIndent(25);
// Define a cor do marcador
para.getParagraphFormat().getBullet().getColor().setColorType(ColorType.RGB);
para.getParagraphFormat().getBullet().getColor().setColor(Color.BLACK);
para.getParagraphFormat().getBullet().setBulletHardColor(NullableBool.True); // definir IsBulletHardColor como true para usar cor própria do marcador
// Define a altura do marcador
para.getParagraphFormat().getBullet().setHeight(100);
// Adiciona o parágrafo ao quadro de texto
txtFrm.getParagraphs().add(para);
// Cria o segundo parágrafo
Paragraph para2 = new Paragraph();
// Define o tipo e o estilo do marcador do parágrafo
para2.getParagraphFormat().getBullet().setType(BulletType.Numbered);
para2.getParagraphFormat().getBullet().setNumberedBulletStyle(NumberedBulletStyle.BulletCircleNumWDBlackPlain);
// Adiciona o texto do parágrafo
para2.setText("This is numbered bullet");
// Define a indentação do marcador
para2.getParagraphFormat().setIndent(25);
para2.getParagraphFormat().getBullet().getColor().setColorType(ColorType.RGB);
para2.getParagraphFormat().getBullet().getColor().setColor(Color.BLACK);
para2.getParagraphFormat().getBullet().setBulletHardColor(NullableBool.True); // definir IsBulletHardColor como true para usar cor própria do marcador
// Define a altura do marcador
para2.getParagraphFormat().getBullet().setHeight(100);
// Adiciona o parágrafo ao quadro de texto
txtFrm.getParagraphs().add(para2);
// Salva a apresentação modificada
pres.save("Bullet_out.pptx", SaveFormat.Pptx);
} finally {
if (pres != null) pres.dispose();
}
Gerenciar Marcadores de Imagem
Listas com marcadores ajudam a organizar e apresentar informações de forma rápida e eficiente. Parágrafos com imagens são fáceis de ler e entender.
- Crie uma instância da classe Presentation.
- Acesse a referência do slide relevante através do seu índice.
- Adicione um autoshape ao slide.
- Acesse o TextFrame do autoshape.
- Remova o parágrafo padrão no
TextFrame. - Crie a primeira instância de parágrafo usando a classe Paragraph.
- Carregue a imagem em IPPImage.
- Defina o tipo de marcador como Picture e defina a imagem.
- Defina o
Textdo parágrafo. - Defina a
Indentdo parágrafo para o marcador. - Defina uma cor para o marcador.
- Defina uma altura para o marcador.
- Adicione o novo parágrafo à coleção de parágrafos do
TextFrame. - Adicione o segundo parágrafo e repita o processo com base nas etapas anteriores.
- Salve a apresentação modificada.
// Instancia uma classe Presentation que representa um arquivo PPTX
Presentation presentation = new Presentation();
try {
// Acessa o primeiro slide
ISlide slide = presentation.getSlides().get_Item(0);
// Instancia a imagem para marcadores
IPPImage picture;
IImage image = Images.fromFile("bullets.png");
try {
picture = presentation.getImages().addImage(image);
} finally {
if (image != null) image.dispose();
}
// Adiciona e acessa o AutoShape
IAutoShape autoShape = slide.getShapes().addAutoShape(ShapeType.Rectangle, 200, 200, 400, 200);
// Acessa o TextFrame do autoshape
ITextFrame textFrame = autoShape.getTextFrame();
// Remove o parágrafo padrão
textFrame.getParagraphs().removeAt(0);
// Cria um novo parágrafo
Paragraph paragraph = new Paragraph();
paragraph.setText("Welcome to Aspose.Slides");
// Define o estilo de marcador do parágrafo e a imagem
paragraph.getParagraphFormat().getBullet().setType(BulletType.Picture);
paragraph.getParagraphFormat().getBullet().getPicture().setImage(picture);
// Define a altura do marcador
paragraph.getParagraphFormat().getBullet().setHeight(100);
// Adiciona o parágrafo ao TextFrame
textFrame.getParagraphs().add(paragraph);
// Grava a apresentação como arquivo PPTX
presentation.save("ParagraphPictureBulletsPPTX_out.pptx", SaveFormat.Pptx);
// Grava a apresentação como arquivo PPT
presentation.save("ParagraphPictureBulletsPPT_out.ppt", SaveFormat.Ppt);
} catch (IOException e) {
} finally {
if (presentation != null) presentation.dispose();
}
Gerenciar Marcadores Multinível
Listas com marcadores ajudam a organizar e apresentar informações de forma rápida e eficiente. Marcadores multinível são fáceis de ler e entender.
- Crie uma instância da classe Presentation.
- Acesse a referência do slide relevante através do seu índice.
- Adicione um autoshape no novo slide.
- Acesse o TextFrame do autoshape.
- Remova o parágrafo padrão no
TextFrame. - Crie a primeira instância de parágrafo através da classe Paragraph e defina a profundidade como 0.
- Crie a segunda instância de parágrafo através da classe
Paragraphe defina a profundidade como 1. - Crie a terceira instância de parágrafo através da classe
Paragraphe defina a profundidade como 2. - Crie a quarta instância de parágrafo através da classe
Paragraphe defina a profundidade como 3. - Adicione os novos parágrafos à coleção de parágrafos do
TextFrame. - Salve a apresentação modificada.
// Instancia uma classe Presentation que representa um arquivo PPTX
Presentation pres = new Presentation();
try {
// Acessa o primeiro slide
ISlide slide = pres.getSlides().get_Item(0);
// Adiciona e acessa o AutoShape
IAutoShape aShp = slide.getShapes().addAutoShape(ShapeType.Rectangle, 200, 200, 400, 200);
// Acessa o quadro de texto do AutoShape criado
ITextFrame text = aShp.addTextFrame("");
// Limpa o parágrafo padrão
text.getParagraphs().clear();
// Adiciona o primeiro parágrafo
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);
// Define o nível do marcador
para1.getParagraphFormat().setDepth((short)0);
// Adiciona o segundo parágrafo
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);
// Define o nível do marcador
para2.getParagraphFormat().setDepth((short)1);
// Adiciona o terceiro parágrafo
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);
// Define o nível do marcador
para3.getParagraphFormat().setDepth((short)2);
// Adiciona o quarto parágrafo
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);
// Define o nível do marcador
para4.getParagraphFormat().setDepth((short)3);
// Adiciona os parágrafos à coleção
text.getParagraphs().add(para1);
text.getParagraphs().add(para2);
text.getParagraphs().add(para3);
text.getParagraphs().add(para4);
// Grava a apresentação como um arquivo PPTX
pres.save("MultilevelBullet.pptx", SaveFormat.Pptx);
} finally {
if (pres != null) pres.dispose();
}
Gerenciar um Parágrafo com Lista Numerada Personalizada
A interface IBulletFormat fornece a propriedade NumberedBulletStartWith e outras que permitem gerenciar parágrafos com numeração ou formatação personalizada.
- Crie uma instância da classe Presentation.
- Acesse o slide que contém o parágrafo.
- Adicione um autoshape ao slide.
- Acesse o TextFrame do autoshape.
- Remova o parágrafo padrão no
TextFrame. - Crie a primeira instância de parágrafo através da classe Paragraph e defina NumberedBulletStartWith como 2.
- Crie a segunda instância de parágrafo através da classe
Paragraphe definaNumberedBulletStartWithcomo 3. - Crie a terceira instância de parágrafo através da classe
Paragraphe definaNumberedBulletStartWithcomo 7. - Adicione os novos parágrafos à coleção de parágrafos do
TextFrame. - Salve a apresentação modificada.
Presentation presentation = new Presentation();
try {
IAutoShape shape = presentation.getSlides().get_Item(0).getShapes().addAutoShape(ShapeType.Rectangle, 200, 200, 400, 200);
// Acessa o quadro de texto do autoshape criado
ITextFrame textFrame = shape.getTextFrame();
// Remove o parágrafo padrão existente
textFrame.getParagraphs().removeAt(0);
// Primeira 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();
}
Definir Recuo da Primeira Linha para um Parágrafo
Use o método IParagraphFormat.setIndent para controlar o recuo da primeira linha de um parágrafo. Esse método move apenas a primeira linha em relação à margem esquerda do parágrafo. Um valor positivo desloca a primeira linha para a direita, enquanto as linhas restantes permanecem alinhadas ao corpo do parágrafo.
Use IParagraphFormat.setMarginLeft quando precisar mover todo o parágrafo. Use IParagraphFormat.setIndent quando precisar mover apenas a primeira linha.
O exemplo abaixo cria vários parágrafos e aplica valores diferentes de recuo para demonstrar como o recuo da primeira linha afeta o layout do parágrafo.
- Crie uma instância da classe Presentation.
- Acesse o slide de destino.
- Adicione um AutoShape retangular ao slide.
- Adicione um TextFrame vazio à forma e remova o parágrafo padrão.
- Crie vários parágrafos e defina valores diferentes de Indent para eles.
- Adicione os parágrafos ao quadro de texto.
- Salve a apresentação modificada.
Presentation presentation = new Presentation();
try {
ISlide slide = presentation.getSlides().get_Item(0);
IAutoShape rectangleShape = slide.getShapes().addAutoShape(ShapeType.Rectangle, 50, 50, 420, 220);
rectangleShape.getFillFormat().setFillType(FillType.NoFill);
rectangleShape.getLineFormat().getFillFormat().setFillType(FillType.Solid);
rectangleShape.getLineFormat().getFillFormat().getSolidFillColor().setColor(Color.GRAY);
ITextFrame textFrame = rectangleShape.addTextFrame("");
textFrame.getTextFrameFormat().setAutofitType(TextAutofitType.Shape);
textFrame.getParagraphs().removeAt(0);
Paragraph firstParagraph = new Paragraph();
firstParagraph.getParagraphFormat().getDefaultPortionFormat().getFillFormat().setFillType(FillType.Solid);
firstParagraph.getParagraphFormat().getDefaultPortionFormat().getFillFormat().getSolidFillColor().setColor(Color.BLACK);
firstParagraph.setText("No first-line indent. Wrapped lines start at the same position as the first line.");
firstParagraph.getParagraphFormat().setMarginLeft(20f);
firstParagraph.getParagraphFormat().setIndent(0f);
Paragraph secondParagraph = new Paragraph();
secondParagraph.getParagraphFormat().getDefaultPortionFormat().getFillFormat().setFillType(FillType.Solid);
secondParagraph.getParagraphFormat().getDefaultPortionFormat().getFillFormat().getSolidFillColor().setColor(Color.BLACK);
secondParagraph.setText("First-line indent of 20 points. The first line moves to the right, while wrapped lines remain aligned to the paragraph body.");
secondParagraph.getParagraphFormat().setMarginLeft(20f);
secondParagraph.getParagraphFormat().setIndent(20f);
Paragraph thirdParagraph = new Paragraph();
thirdParagraph.getParagraphFormat().getDefaultPortionFormat().getFillFormat().setFillType(FillType.Solid);
thirdParagraph.getParagraphFormat().getDefaultPortionFormat().getFillFormat().getSolidFillColor().setColor(Color.BLACK);
thirdParagraph.setText("First-line indent of 40 points. This paragraph shows a larger first-line offset to make the effect easier to see.");
thirdParagraph.getParagraphFormat().setMarginLeft(20f);
thirdParagraph.getParagraphFormat().setIndent(40f);
textFrame.getParagraphs().add(firstParagraph);
textFrame.getParagraphs().add(secondParagraph);
textFrame.getParagraphs().add(thirdParagraph);
presentation.save("paragraph_indent.pptx", SaveFormat.Pptx);
}
finally {
presentation.dispose();
}
O resultado:

Definir Recuo Suspenso para um Parágrafo
Um recuo suspenso é um layout de parágrafo em que a primeira linha começa à esquerda das linhas restantes. No Aspose.Slides, você cria esse efeito com o método IParagraphFormat.setIndent. Defina o recuo como um valor negativo para mover a primeira linha para a esquerda em relação ao corpo do parágrafo.
Na prática, IParagraphFormat.setMarginLeft define a posição esquerda do corpo do parágrafo, e IParagraphFormat.setIndent define a posição da primeira linha em relação a essa margem. Para criar um recuo suspenso, defina um valor positivo para MarginLeft e um valor negativo para Indent.
Essa formatação é útil para bibliografias, referências, entradas de glossário e outros parágrafos onde as linhas quebradas devem alinhar-se sob o corpo do parágrafo e não sob o primeiro caractere da primeira linha.
- Crie uma instância da classe Presentation.
- Acesse o slide de destino.
- Adicione um AutoShape retangular ao slide.
- Adicione um TextFrame vazio à forma e remova o parágrafo padrão.
- Crie parágrafos e defina um valor positivo de MarginLeft para cada parágrafo.
- Defina um valor negativo de Indent para criar o efeito de recuo suspenso.
- Adicione os parágrafos ao quadro de texto.
- Salve a apresentação modificada.
Presentation presentation = new Presentation();
try {
ISlide slide = presentation.getSlides().get_Item(0);
IAutoShape rectangleShape = slide.getShapes().addAutoShape(ShapeType.Rectangle, 50, 50, 420, 220);
rectangleShape.getFillFormat().setFillType(FillType.NoFill);
rectangleShape.getLineFormat().getFillFormat().setFillType(FillType.Solid);
rectangleShape.getLineFormat().getFillFormat().getSolidFillColor().setColor(Color.GRAY);
ITextFrame textFrame = rectangleShape.addTextFrame("");
textFrame.getTextFrameFormat().setAutofitType(TextAutofitType.Shape);
textFrame.getParagraphs().removeAt(0);
Paragraph firstParagraph = new Paragraph();
firstParagraph.getParagraphFormat().getDefaultPortionFormat().getFillFormat().setFillType(FillType.Solid);
firstParagraph.getParagraphFormat().getDefaultPortionFormat().getFillFormat().getSolidFillColor().setColor(Color.BLACK);
firstParagraph.setText("A hanging indent is created by combining a positive left margin with a negative indent. The first line starts to the left, while wrapped lines align with the paragraph body.");
firstParagraph.getParagraphFormat().setMarginLeft(40f);
firstParagraph.getParagraphFormat().setIndent(-20f);
Paragraph secondParagraph = new Paragraph();
secondParagraph.getParagraphFormat().getDefaultPortionFormat().getFillFormat().setFillType(FillType.Solid);
secondParagraph.getParagraphFormat().getDefaultPortionFormat().getFillFormat().getSolidFillColor().setColor(Color.BLACK);
secondParagraph.setText("This second example uses a deeper hanging indent so the difference between the first line and the wrapped lines is easier to compare.");
secondParagraph.getParagraphFormat().setMarginLeft(60f);
secondParagraph.getParagraphFormat().setIndent(-30f);
textFrame.getParagraphs().add(firstParagraph);
textFrame.getParagraphs().add(secondParagraph);
presentation.save("hanging_indent.pptx", SaveFormat.Pptx);
}
finally {
presentation.dispose();
}
O resultado:

Gerenciar Propriedades de Execução de Parágrafo Final
- Crie uma instância da classe Presentation.
- Obtenha a referência do slide que contém o parágrafo através da sua posição.
- Adicione um autoshape retangular ao slide.
- Adicione um TextFrame com dois parágrafos ao retângulo.
- Defina
FontHeighte o tipo de fonte para os parágrafos. - Defina as propriedades End para os parágrafos.
- Grave a apresentação modificada como um arquivo PPTX.
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 para Parágrafos
Aspose.Slides fornece suporte avançado para importação de texto HTML em parágrafos.
- Crie uma instância da classe Presentation.
- Acesse a referência do slide relevante através do seu índice.
- Adicione um autoshape ao slide.
- Adicione e acesse o ITextFrame do
autoshape. - Remova o parágrafo padrão no
ITextFrame. - Leia o arquivo HTML de origem em um TextReader.
- Crie a primeira instância de parágrafo através da classe Paragraph.
- Adicione o conteúdo do arquivo HTML lido pelo TextReader à ParagraphCollection do TextFrame.
- Salve a apresentação modificada.
// Cria uma instância vazia de apresentação
Presentation pres = new Presentation();
try {
// Acessa o primeiro slide padrão da apresentação
ISlide slide = pres.getSlides().get_Item(0);
// Adiciona o AutoShape para acomodar o conteúdo 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);
// Adiciona quadro de texto à forma
ashape.addTextFrame("");
// Limpa todos os parágrafos no quadro de texto adicionado
ashape.getTextFrame().getParagraphs().clear();
// Carrega o arquivo HTML usando StreamReader
TextReader tr = new StreamReader("file.html");
// Adiciona texto do StreamReader HTML ao quadro de texto
ashape.getTextFrame().getParagraphs().addFromHtml(tr.readToEnd());
// Salva a apresentação
pres.save("output_out.pptx", SaveFormat.Pptx);
} finally {
if (pres != null) pres.dispose();
}
Exportar Texto de Parágrafo para HTML
Aspose.Slides fornece suporte avançado para exportar textos (contidos em parágrafos) para HTML.
- Crie uma instância da classe Presentation e carregue a apresentação desejada.
- Acesse a referência do slide relevante através do seu índice.
- Acesse a forma que contém o texto que será exportado para HTML.
- Acesse o TextFrame da forma.
- Crie uma instância de
StreamWritere adicione o novo arquivo HTML. - Forneça um índice inicial ao StreamWriter e exporte os parágrafos desejados.
// Carrega o arquivo de apresentação
Presentation pres = new Presentation("ExportingHTMLText.pptx");
try {
// Acessa o primeiro slide padrão da apresentação
ISlide slide = pres.getSlides().get_Item(0);
// Índice desejado
int index = 0;
// Acessando a forma adicionada
IAutoShape ashape = (IAutoShape) slide.getShapes().get_Item(index);
// Criando o arquivo HTML de saída
OutputStream os = new FileOutputStream("output.html");
Writer writer = new OutputStreamWriter(os, "UTF-8");
//Extraindo o primeiro parágrafo como HTML
// Gravando dados dos parágrafos em HTML fornecendo o índice inicial do parágrafo e o total de parágrafos a serem copiados
writer.write(ashape.getTextFrame().getParagraphs().exportToHtml(0, ashape.getTextFrame().getParagraphs().getCount(), null));
writer.close();
} catch (IOException e) {
} finally {
if (pres != null) pres.dispose();
}
Salvar um Parágrafo como Imagem
Nesta seção, exploraremos dois exemplos que demonstram como salvar um parágrafo de texto, representado pela interface IParagraph, como uma imagem. Ambos os exemplos incluem a obtenção da imagem de uma forma que contém o parágrafo usando os métodos getImage da interface IShape, o cálculo dos limites do parágrafo dentro da forma e a exportação como imagem bitmap. Essas abordagens permitem extrair partes específicas do texto de apresentações PowerPoint e salvá‑las como imagens separadas, útil para diversos cenários.
Vamos supor que temos um arquivo de apresentação chamado sample.pptx com um slide, onde a primeira forma é uma caixa de texto contendo três parágrafos.

Exemplo 1
Neste exemplo, obtém‑se o segundo parágrafo como imagem. Para isso, extraímos a imagem da forma do primeiro slide da apresentação e então calculamos os limites do segundo parágrafo no quadro de texto da forma. O parágrafo é então redesenhado em uma nova imagem bitmap, que é salva no formato PNG. Esse método é especialmente útil quando se precisa salvar um parágrafo específico como imagem separada preservando as dimensões e formatação exatas do texto.
Presentation presentation = new Presentation("sample.pptx");
try {
IAutoShape firstShape = (IAutoShape) presentation.getSlides().get_Item(0).getShapes().get_Item(0);
// Salvar a forma na memória como um bitmap.
IImage shapeImage = firstShape.getImage();
ByteArrayOutputStream shapeImageStream = new ByteArrayOutputStream();
shapeImage.save(shapeImageStream, ImageFormat.Png);
shapeImage.dispose();
// Criar um bitmap da forma a partir da memória.
InputStream shapeImageInputStream = new ByteArrayInputStream(shapeImageStream.toByteArray());
BufferedImage shapeBitmap = ImageIO.read(shapeImageInputStream);
// Calcular os limites do segundo parágrafo.
IParagraph secondParagraph = firstShape.getTextFrame().getParagraphs().get_Item(1);
Rectangle2D paragraphRectangle = secondParagraph.getRect();
// Calcular as coordenadas e o tamanho da imagem de saída (tamanho mínimo - 1x1 pixel).
int imageX = (int) Math.floor(paragraphRectangle.getX());
int imageY = (int) Math.floor(paragraphRectangle.getY());
int imageWidth = Math.max(1, (int) Math.ceil(paragraphRectangle.getWidth()));
int imageHeight = Math.max(1, (int) Math.ceil(paragraphRectangle.getHeight()));
// Recortar o bitmap da forma para obter apenas o bitmap do parágrafo.
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();
}
O resultado:

Exemplo 2
Neste exemplo, ampliamos a abordagem anterior adicionando fatores de escala à imagem do parágrafo. A forma é extraída da apresentação e salva como imagem com um fator de escala de 2. Isso permite uma saída de resolução mais alta ao exportar o parágrafo. Os limites do parágrafo são então calculados considerando a escala. A escala pode ser particularmente útil quando se necessita de uma imagem mais detalhada, por exemplo, para materiais impressos de alta qualidade.
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);
// Salvar a forma na memória como um bitmap com escala.
IImage shapeImage = firstShape.getImage(ShapeThumbnailBounds.Shape, imageScaleX, imageScaleY);
ByteArrayOutputStream shapeImageStream = new ByteArrayOutputStream();
shapeImage.save(shapeImageStream, ImageFormat.Png);
shapeImage.dispose();
// Criar um bitmap da forma a partir da memória.
InputStream shapeImageInputStream = new ByteArrayInputStream(shapeImageStream.toByteArray());
BufferedImage shapeBitmap = ImageIO.read(shapeImageInputStream);
// Calcular os limites do segundo parágrafo.
IParagraph secondParagraph = firstShape.getTextFrame().getParagraphs().get_Item(1);
Rectangle2D paragraphRectangle = secondParagraph.getRect();
paragraphRectangle.setRect(
paragraphRectangle.getX() * imageScaleX,
paragraphRectangle.getY() * imageScaleY,
paragraphRectangle.getWidth() * imageScaleX,
paragraphRectangle.getHeight() * imageScaleY
);
// Calcular as coordenadas e o tamanho da imagem de saída (tamanho mínimo - 1x1 pixel).
int imageX = (int) Math.floor(paragraphRectangle.getX());
int imageY = (int) Math.floor(paragraphRectangle.getY());
int imageWidth = Math.max(1, (int) Math.ceil(paragraphRectangle.getWidth()));
int imageHeight = Math.max(1, (int) Math.ceil(paragraphRectangle.getHeight()));
// Recortar o bitmap da forma para obter apenas o bitmap do parágrafo.
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();
}
FAQ
Posso desativar completamente a quebra de linha dentro de um quadro de texto?
Sim. Use a configuração de quebra de linha do quadro de texto (setWrapText) para desligar a quebra, de modo que as linhas não quebrem nas bordas do quadro.
Como posso obter os limites exatos de um parágrafo específico no slide?
Você pode recuperar o retângulo delimitador do parágrafo (e até de uma única porção) para conhecer sua posição e tamanho precisos no slide.
Onde o alinhamento do parágrafo (esquerda/direita/centralizado/justificado) é controlado?
Alignment é uma configuração ao nível do parágrafo em ParagraphFormat; ela se aplica a todo o parágrafo independentemente da formatação individual das porções.
Posso definir um idioma de verificação ortográfica para apenas parte de um parágrafo (por exemplo, uma palavra)?
Sim. O idioma é definido no nível da porção (PortionFormat.setLanguageId), permitindo que múltiplos idiomas coexistam dentro de um único parágrafo.