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.

Criar Caixa de Texto no Slide

Para criar uma caixa de texto em um slide, siga estas etapas:

  1. Crie uma instância da classe Presentation.
  2. Obtenha uma referência para o primeiro slide na apresentação recém‑criada.
  3. Adicione um objeto AutoShape com ShapeType definido como Rectangle em uma posição especificada no slide e obtenha a referência para o objeto AutoShape recém‑adicionado.
  4. Adicione a propriedade TextFrame ao objeto AutoShape que conterá um texto. No exemplo abaixo, adicionamos este texto: Aspose TextBox
  5. 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.

Caixa de texto e forma

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();
    }
}

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:

  1. Crie uma instância da classe Presentation.
  2. Obtenha uma referência para o primeiro slide na apresentação recém‑criada.
  3. Adicione um objeto AutoShape com ShapeType definido como Rectangle em uma posição especificada no slide e obtenha a referência do objeto AutoShape recém‑adicionado.
  4. Adicione um TextFrame ao objeto AutoShape que contém Aspose TextBox como texto padrão.
  5. Instancie a classe HyperlinkManager.
  6. Atribua o objeto HyperlinkManager à propriedade HyperlinkClick associada à sua porção preferida do TextFrame.
  7. 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.