Gerenciar Caixas de Texto em Apresentações Usando Java
Introdução
Os textos em slides normalmente existem em caixas de texto ou formas. Portanto, para adicionar um texto a um slide, você precisa adicionar uma caixa de texto e então colocar algum texto dentro da caixa de texto. O Aspose.Slides for Java fornece a interface IAutoShape que permite adicionar uma forma que contém algum texto.
Info
O Aspose.Slides também fornece a interface IShape que permite adicionar formas aos slides. No entanto, nem todas as formas adicionadas através da interfaceIShape podem conter texto. Mas as formas adicionadas através da interface IAutoShape podem conter texto.
Note
Portanto, ao lidar com uma forma à qual você deseja adicionar texto, pode ser necessário verificar e confirmar que ela foi convertida através da interfaceIAutoShape. Só então você poderá trabalhar com TextFrame, que é uma propriedade de IAutoShape. Veja a seção Update Text nesta página.
Criar uma Caixa de Texto em um Slide
Para criar uma caixa de texto em um slide, siga estas etapas:
- Crie uma instância da classe Presentation.
- Obtenha uma referência para o primeiro slide da apresentação recém‑criada.
- Adicione um objeto IAutoShape com ShapeType definido como
Rectangleem uma posição especificada no slide e obtenha a referência para o objetoIAutoShaperecém‑adicionado. - Adicione a propriedade
TextFrameao objetoIAutoShapeque conterá um texto. No exemplo abaixo, adicionamos este texto: Aspose TextBox - Por fim, grave o arquivo PPTX através do objeto
Presentation.
Este código Java — uma implementação dos passos acima — mostra como adicionar texto a um slide:
// Instancia a Presentation
Presentation pres = new Presentation();
try {
// Obtém o primeiro slide da apresentação
ISlide sld = pres.getSlides().get_Item(0);
// Adiciona um AutoShape com o tipo definido como Rectangle
IAutoShape ashp = sld.getShapes().addAutoShape(ShapeType.Rectangle, 150, 75, 150, 50);
// Adiciona TextFrame ao Rectangle
ashp.addTextFrame(" ");
// Acessa o TextFrame
ITextFrame txtFrame = ashp.getTextFrame();
// Cria o objeto Paragraph para o TextFrame
IParagraph para = txtFrame.getParagraphs().get_Item(0);
// Cria um objeto Portion para o parágrafo
IPortion portion = para.getPortions().get_Item(0);
// Define o texto
portion.setText("Aspose TextBox");
// Salva a apresentação no disco
pres.save("TextBox_out.pptx", SaveFormat.Pptx);
} finally {
if (pres != null) pres.dispose();
}
Verificar se é uma Forma de Caixa de Texto
O Aspose.Slides fornece o método isTextBox da interface IAutoShape que permite examinar formas e identificar caixas de texto.

Este código Java mostra como verificar se uma forma foi criada como uma caixa de texto:
Presentation presentation = new Presentation("sample.pptx");
try {
ForEach.shape(presentation, (shape, slide, index) -> {
if (shape instanceof IAutoShape) {
IAutoShape autoShape = (IAutoShape) shape;
System.out.println(autoShape.isTextBox() ? "shape is a text box" : "shape is not a text box");
}
});
} finally {
presentation.dispose();
}
Observe que, se você simplesmente adicionar uma forma automática usando o método addAutoShape da interface IShapeCollection , o método isTextBox da forma automática retornará false. Entretanto, após adicionar texto à forma automática usando o método addTextFrame ou o método setText, a propriedade isTextBox retornará true.
Presentation presentation = new Presentation();
ISlide slide = presentation.getSlides().get_Item(0);
IAutoShape shape1 = slide.getShapes().addAutoShape(ShapeType.Rectangle, 10, 10, 100, 40);
// shape1.isTextBox() retorna false
shape1.addTextFrame("shape 1");
// shape1.isTextBox() retorna true
IAutoShape shape2 = slide.getShapes().addAutoShape(ShapeType.Rectangle, 10, 110, 100, 40);
// shape2.isTextBox() retorna false
shape2.getTextFrame().setText("shape 2");
// shape2.isTextBox() retorna true
IAutoShape shape3 = slide.getShapes().addAutoShape(ShapeType.Rectangle, 10, 210, 100, 40);
// shape3.isTextBox() retorna false
shape3.addTextFrame("");
// shape3.isTextBox() retorna false
IAutoShape shape4 = slide.getShapes().addAutoShape(ShapeType.Rectangle, 10, 310, 100, 40);
// shape4.isTextBox() retorna false
shape4.getTextFrame().setText("");
// shape4.isTextBox() retorna false
Adicionar Colunas a uma Caixa de Texto
O Aspose.Slides fornece as propriedades ColumnCount e ColumnSpacing (da interface ITextFrameFormat e da classe TextFrameFormat) que permitem adicionar colunas a caixas de texto. Você pode especificar o número de colunas em uma caixa de texto e definir a quantidade de espaçamento em pontos entre as colunas.
Este código em Java demonstra a operação descrita:
Presentation pres = new Presentation();
try {
// Obtém o primeiro slide da apresentação
ISlide slide = pres.getSlides().get_Item(0);
// Adiciona um AutoShape com o tipo definido como Rectangle
IAutoShape aShape = slide.getShapes().addAutoShape(ShapeType.Rectangle, 100, 100, 300, 300);
// Adiciona TextFrame ao Rectangle
aShape.addTextFrame("All these columns are limited to be within a single text container -- " +
"you can add or delete text and the new or remaining text automatically adjusts " +
"itself to flow within the container. You cannot have text flow from one container " +
"to other though -- we told you PowerPoint's column options for text are limited!");
// Obtém o formato de texto do TextFrame
ITextFrameFormat format = aShape.getTextFrame().getTextFrameFormat();
// Especifica o número de colunas no TextFrame
format.setColumnCount(3);
// Especifica o espaçamento entre colunas
format.setColumnSpacing(10);
// Salva a apresentação
pres.save("ColumnCount.pptx", SaveFormat.Pptx);
} finally {
if (pres != null) pres.dispose();
}
Adicionar Colunas a uma Moldura de Texto
O Aspose.Slides for Java fornece a propriedade ColumnCount (da interface ITextFrameFormat) que permite adicionar colunas em molduras de texto. Por meio dessa propriedade, você pode especificar o número de colunas desejado em uma moldura de texto.
Este código Java mostra como adicionar uma coluna dentro de uma moldura de texto:
String outPptxFileName = "ColumnsTest.pptx";
Presentation pres = new Presentation();
try {
IAutoShape shape1 = pres.getSlides().get_Item(0).getShapes().addAutoShape(ShapeType.Rectangle, 100, 100, 300, 300);
TextFrameFormat format = (TextFrameFormat)shape1.getTextFrame().getTextFrameFormat();
format.setColumnCount(2);
shape1.getTextFrame().setText("All these columns are forced to stay within a single text container -- " +
"you can add or delete text - and the new or remaining text automatically adjusts " +
"itself to stay within the container. You cannot have text spill over from one container " +
"to other, though -- because PowerPoint's column options for text are limited!");
pres.save(outPptxFileName, SaveFormat.Pptx);
Presentation test = new Presentation(outPptxFileName);
try {
IAutoShape autoShape = ((AutoShape)test.getSlides().get_Item(0).getShapes().get_Item(0));
Assert.assertTrue(2 == autoShape.getTextFrame().getTextFrameFormat().getColumnCount());
Assert.assertTrue(Double.NaN == autoShape.getTextFrame().getTextFrameFormat().getColumnSpacing());
} finally {
if (test != null) test.dispose();
}
format.setColumnSpacing(20);
pres.save(outPptxFileName, SaveFormat.Pptx);
Presentation test1 = new Presentation(outPptxFileName);
try {
IAutoShape autoShape = ((AutoShape)test1.getSlides().get_Item(0).getShapes().get_Item(0));
Assert.assertTrue(2 == autoShape.getTextFrame().getTextFrameFormat().getColumnCount());
Assert.assertTrue(20 == autoShape.getTextFrame().getTextFrameFormat().getColumnSpacing());
} finally {
if (test1 != null) test1.dispose();
}
format.setColumnCount(3);
format.setColumnSpacing(15);
pres.save(outPptxFileName, SaveFormat.Pptx);
Presentation test2 = new Presentation(outPptxFileName);
try {
IAutoShape autoShape = ((AutoShape)test2.getSlides().get_Item(0).getShapes().get_Item(0));
Assert.assertTrue(3 == autoShape.getTextFrame().getTextFrameFormat().getColumnCount());
Assert.assertTrue(15 == autoShape.getTextFrame().getTextFrameFormat().getColumnSpacing());
} finally {
if (test2 != null) test2.dispose();
}
} finally {
if (pres != null) pres.dispose();
}
Atualizar Texto
O Aspose.Slides permite alterar ou atualizar o texto contido em uma caixa de texto ou todos os textos contidos em uma apresentação.
Este código Java demonstra uma operação em que todos os textos de uma apresentação são atualizados ou alterados:
Presentation pres = new Presentation("text.pptx");
try {
for (ISlide slide : pres.getSlides())
{
for (IShape shape : slide.getShapes())
{
if (shape instanceof IAutoShape) //Verifica se a forma suporta quadro de texto (IAutoShape).
{
IAutoShape autoShape = (IAutoShape)shape;
for (IParagraph paragraph : autoShape.getTextFrame().getParagraphs()) //Itera pelos parágrafos no quadro de texto
{
for (IPortion portion : paragraph.getPortions()) //Itera por cada porção no parágrafo
{
portion.setText(portion.getText().replace("years", "months")); //Altera o texto
portion.getPortionFormat().setFontBold(NullableBool.True); //Altera a formatação
}
}
}
}
}
//Salva a apresentação modificada
pres.save("text-changed.pptx", SaveFormat.Pptx);
} finally {
if (pres != null) pres.dispose();
}
Adicionar uma Caixa de Texto com um Hiperlink
É possível inserir um link dentro de uma caixa de texto. Quando a caixa de texto é clicada, os usuários são direcionados para abrir o link.
Para adicionar uma caixa de texto contendo um link, siga estas etapas:
- Crie uma instância da classe
Presentation. - Obtenha uma referência para o primeiro slide da apresentação recém‑criada.
- Adicione um objeto
AutoShapecomShapeTypedefinido comoRectangleem uma posição especificada no slide e obtenha a referência do objeto AutoShape recém‑adicionado. - Adicione um
TextFrameao objetoAutoShapeque contém Aspose TextBox como texto padrão. - Instancie a classe
IHyperlinkManager. - Atribua o objeto
IHyperlinkManagerà propriedade HyperlinkClick associada à sua parte preferida doTextFrame. - Por fim, grave o arquivo PPTX através do objeto
Presentation.
Este código Java — uma implementação dos passos acima — mostra como adicionar uma caixa de texto com um hiperlink a um slide:
// Instancia uma classe Presentation que representa um PPTX
Presentation pres = new Presentation();
try {
// Obtém o primeiro slide da apresentação
ISlide slide = pres.getSlides().get_Item(0);
// Adiciona um objeto AutoShape com o tipo definido como Rectangle
IShape shape = slide.getShapes().addAutoShape(ShapeType.Rectangle, 150, 150, 150, 50);
// Faz cast da forma para AutoShape
IAutoShape pptxAutoShape = (IAutoShape)shape;
// Acessa a propriedade ITextFrame associada ao AutoShape
pptxAutoShape.addTextFrame("");
ITextFrame textFrame = pptxAutoShape.getTextFrame();
// Adiciona algum texto ao frame
textFrame.getParagraphs().get_Item(0).getPortions().get_Item(0).setText("Aspose.Slides");
// Define o Hyperlink para o texto da porção
IHyperlinkManager hyperlinkManager = textFrame.getParagraphs().get_Item(0).getPortions().get_Item(0).
getPortionFormat().getHyperlinkManager();
hyperlinkManager.setExternalHyperlinkClick("http://www.aspose.com");
// Salva a apresentação PPTX
pres.save("hLink_out.pptx", SaveFormat.Pptx);
} finally {
if (pres != null) pres.dispose();
}
FAQ
Qual é a diferença entre uma caixa de texto e um placeholder de texto ao trabalhar com slides mestres?
Um placeholder herda estilo/posição do master e pode ser sobrescrito em layouts, whereas a regular text box is an independent object on a specific slide and doesn’t change when you switch layouts.
Como posso realizar uma substituição em massa de texto em toda a apresentação sem alterar o texto dentro de gráficos, tabelas e SmartArt?
Limite sua iteração às auto‑formas que possuem molduras de texto e exclua objetos incorporados (charts, tables, SmartArt) percorrendo suas coleções separadamente ou ignorando esses tipos de objeto.