Gerenciar caixas de texto em apresentações usando JavaScript
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, em seguida, colocar algum texto dentro da caixa de texto. Aspose.Slides for Node.js via Java fornece a AutoShape que permite adicionar uma forma contendo algum texto.
Info
Aspose.Slides também fornece a Shape que permite adicionar formas aos slides. No entanto, nem todas as formas adicionadas através da classeShape podem conter texto. Mas as formas adicionadas através da classe AutoShape 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 classeAutoShape. Só então você poderá trabalhar com TextFrame, que é uma propriedade da AutoShape. Consulte a seção Update Text nesta página.
Criar Caixa de Texto no 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 na apresentação recém‑criada.
- Adicione um objeto AutoShape com ShapeType definido como
Rectangleem uma posição especificada no slide e obtenha a referência para o objetoAutoShaperecém‑adicionado. - Adicione a propriedade
TextFrameao objetoAutoShapeque conterá um texto. No exemplo abaixo, adicionamos este texto: Aspose TextBox - Finalmente, grave o arquivo PPTX através do objeto
Presentation.
Este código JavaScript—uma implementação das etapas acima—mostra como adicionar texto a um slide:
// Instancia a Presentation
var pres = new aspose.slides.Presentation();
try {
// Obtém o primeiro slide na apresentação
var sld = pres.getSlides().get_Item(0);
// Adiciona um AutoShape com o tipo definido como Rectangle
var ashp = sld.getShapes().addAutoShape(aspose.slides.ShapeType.Rectangle, 150, 75, 150, 50);
// Adiciona TextFrame ao Rectangle
ashp.addTextFrame(" ");
// Acessa o quadro de texto
var txtFrame = ashp.getTextFrame();
// Cria o objeto Paragraph para o quadro de texto
var para = txtFrame.getParagraphs().get_Item(0);
// Cria um objeto Portion para o parágrafo
var portion = para.getPortions().get_Item(0);
// Define o texto
portion.setText("Aspose TextBox");
// Salva a apresentação no disco
pres.save("TextBox_out.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
if (pres != null) {
pres.dispose();
}
}
Verificar Forma de Caixa de Texto
Aspose.Slides fornece o método isTextBox da classe AutoShape que permite examinar formas e identificar caixas de texto.

Este código JavaScript mostra como verificar se uma forma foi criada como caixa de texto:
var presentation = new aspose.slides.Presentation("sample.pptx");
try {
java.callStaticMethodSync("ForEach", "shape", presentation, (shape, slide, index) -> {
if (java.instanceOf(shape, "com.aspose.slides.AutoShape")) {
var autoShape = shape;
console.log(autoShape.isTextBox() ? "shape is a text box" : "shape is not a text box");
}
});
} finally {
presentation.dispose();
}
Observe que, se você simplesmente adicionar uma autoshape usando o método addAutoShape da classe ShapeCollection, o método isTextBox da autoshape retornará false. No entanto, depois de adicionar texto à autoshape usando o método addTextFrame ou o método setText, a propriedade isTextBox retornará true.
var presentation = new aspose.slides.Presentation();
var slide = presentation.getSlides().get_Item(0);
var shape1 = slide.getShapes().addAutoShape(aspose.slides.ShapeType.Rectangle, 10, 10, 100, 40);
// shape1.isTextBox() retorna false
shape1.addTextFrame("shape 1");
// shape1.isTextBox() retorna true
var shape2 = slide.getShapes().addAutoShape(aspose.slides.ShapeType.Rectangle, 10, 110, 100, 40);
// shape2.isTextBox() retorna false
shape2.getTextFrame().setText("shape 2");
// shape2.isTextBox() retorna true
var shape3 = slide.getShapes().addAutoShape(aspose.slides.ShapeType.Rectangle, 10, 210, 100, 40);
// shape3.isTextBox() retorna false
shape3.addTextFrame("");
// shape3.isTextBox() retorna false
var shape4 = slide.getShapes().addAutoShape(aspose.slides.ShapeType.Rectangle, 10, 310, 100, 40);
// shape4.isTextBox() retorna false
shape4.getTextFrame().setText("");
// shape4.isTextBox() retorna false
Adicionar Coluna na Caixa de Texto
Aspose.Slides fornece os métodos setColumnCount e setColumnSpacing 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 o espaçamento em pontos entre as colunas.
Este código em JavaScript demonstra a operação descrita:
var pres = new aspose.slides.Presentation();
try {
// Obtém o primeiro slide na apresentação
var slide = pres.getSlides().get_Item(0);
// Adiciona um AutoShape com o tipo definido como Rectangle
var aShape = slide.getShapes().addAutoShape(aspose.slides.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
var format = aShape.getTextFrame().getTextFrameFormat();
// Define o número de colunas no TextFrame
format.setColumnCount(3);
// Define o espaçamento entre colunas
format.setColumnSpacing(10);
// Salva a apresentação
pres.save("ColumnCount.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
if (pres != null) {
pres.dispose();
}
}
Adicionar Coluna no Quadro de Texto
Aspose.Slides for Node.js via Java fornece o método setColumnCount da classe TextFrameFormat que permite adicionar colunas em quadros de texto. Por meio desta propriedade, você pode especificar o número desejado de colunas em um quadro de texto.
Este código JavaScript mostra como adicionar uma coluna dentro de um quadro de texto:
var outPptxFileName = "ColumnsTest.pptx";
var pres = new aspose.slides.Presentation();
try {
var shape1 = pres.getSlides().get_Item(0).getShapes().addAutoShape(aspose.slides.ShapeType.Rectangle, 100, 100, 300, 300);
var format = 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, aspose.slides.SaveFormat.Pptx);
var test = new aspose.slides.Presentation(outPptxFileName);
try {
var autoShape = test.getSlides().get_Item(0).getShapes().get_Item(0);
java.callStaticMethodSync("Assert", "assertTrue", 2 == autoShape.getTextFrame().getTextFrameFormat().getColumnCount());
java.callStaticMethodSync("Assert", "assertTrue", java.getStaticFieldValue("java.lang.Double", "NaN") == autoShape.getTextFrame().getTextFrameFormat().getColumnSpacing());
} finally {
if (test != null) {
test.dispose();
}
}
format.setColumnSpacing(20);
pres.save(outPptxFileName, aspose.slides.SaveFormat.Pptx);
var test1 = new aspose.slides.Presentation(outPptxFileName);
try {
var autoShape = test1.getSlides().get_Item(0).getShapes().get_Item(0);
java.callStaticMethodSync("Assert", "assertTrue", 2 == autoShape.getTextFrame().getTextFrameFormat().getColumnCount());
java.callStaticMethodSync("Assert", "assertTrue", 20 == autoShape.getTextFrame().getTextFrameFormat().getColumnSpacing());
} finally {
if (test1 != null) {
test1.dispose();
}
}
format.setColumnCount(3);
format.setColumnSpacing(15);
pres.save(outPptxFileName, aspose.slides.SaveFormat.Pptx);
var test2 = new aspose.slides.Presentation(outPptxFileName);
try {
var autoShape = test2.getSlides().get_Item(0).getShapes().get_Item(0);
java.callStaticMethodSync("Assert", "assertTrue", 3 == autoShape.getTextFrame().getTextFrameFormat().getColumnCount());
java.callStaticMethodSync("Assert", "assertTrue", 15 == autoShape.getTextFrame().getTextFrameFormat().getColumnSpacing());
} finally {
if (test2 != null) {
test2.dispose();
}
}
} finally {
if (pres != null) {
pres.dispose();
}
}
Atualizar Texto
Aspose.Slides permite mudar ou atualizar o texto contido em uma caixa de texto ou todos os textos contidos em uma apresentação.
Este código JavaScript demonstra uma operação em que todos os textos de uma apresentação são atualizados ou alterados:
var pres = new aspose.slides.Presentation("text.pptx");
try {
for (let s = 0; s < pres.getSlides().size(); s++) {
let slide = pres.getSlides().get_Item(s);
for (let i = 0; i < slide.getShapes().size(); i++) {
let shape = slide.getShapes().get_Item(i);
// Verifica se a forma suporta quadro de texto (IAutoShape).
if (java.instanceOf(shape, "com.aspose.slides.AutoShape")) {
var autoShape = shape;
// Itera pelos parágrafos no quadro de texto
for (let j = 0; j < autoShape.getTextFrame().getParagraphs().getCount(); j++) {
let paragraph = autoShape.getTextFrame().getParagraphs().get_Item(j);
// Itera por cada porção no parágrafo
for (let k = 0; k < paragraph.getPortions().getCount(); k++) {
let portion = paragraph.getPortions().get_Item(k);
portion.setText(portion.getText().replace("years", "months"));// Altera o texto
portion.getPortionFormat().setFontBold(java.newByte(aspose.slides.NullableBool.True));// Altera a formatação
}
}
}
}
}
// Salva a apresentação modificada
pres.save("text-changed.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
if (pres != null) {
pres.dispose();
}
}
Adicionar Caixa de Texto com Hyperlink
Você pode inserir um link dentro de uma caixa de texto. Quando a caixa de texto for clicada, os usuários serã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 na apresentação recém‑criada.
- Adicione um objeto
AutoShapecomShapeTypedefinido comoRectangleem uma posição especificada no slide e obtenha a referência do objetoAutoShaperecém‑adicionado. - Adicione um
TextFrameao objetoAutoShapeque contém Aspose TextBox como texto padrão. - Instancie a classe
HyperlinkManager. - Atribua o objeto
HyperlinkManagerà propriedade HyperlinkClick associada à sua porção preferida doTextFrame. - Finalmente, grave o arquivo PPTX através do objeto
Presentation.
Este código JavaScript—uma implementação das etapas acima—mostra como adicionar uma caixa de texto com hyperlink a um slide:
// Instancia uma classe Presentation que representa um PPTX
var pres = new aspose.slides.Presentation();
try {
// Obtém o primeiro slide na apresentação
var slide = pres.getSlides().get_Item(0);
// Adiciona um objeto AutoShape com o tipo definido como Rectangle
var shape = slide.getShapes().addAutoShape(aspose.slides.ShapeType.Rectangle, 150, 150, 150, 50);
// Converte a forma para AutoShape
var pptxAutoShape = shape;
// Acessa a propriedade ITextFrame associada ao AutoShape
pptxAutoShape.addTextFrame("");
var textFrame = pptxAutoShape.getTextFrame();
// Adiciona texto ao quadro
textFrame.getParagraphs().get_Item(0).getPortions().get_Item(0).setText("Aspose.Slides");
// Define o Hyperlink para o texto da porção
var 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", aspose.slides.SaveFormat.Pptx);
} finally {
if (pres != null) {
pres.dispose();
}
}
FAQ
Qual é a diferença entre uma caixa de texto e um marcador de texto ao trabalhar com slides mestres?
Um placeholder herda estilo/posição do master e pode ser sobrescrito em layouts, enquanto uma caixa de texto comum é um objeto independente em um slide específico e não muda quando você troca de layout.
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 a auto‑shapes que possuam quadros de texto e exclua objetos incorporados (charts, tables, SmartArt) percorrendo suas coleções separadamente ou ignorando esses tipos de objeto.