Hantera textrutor i presentationer med JavaScript

Introduktion

Text på bildspel finns vanligtvis i textrutor eller former. Därför, för att lägga till text på en bild måste du lägga till en textruta och sedan placera någon text i textrutan. Aspose.Slides för Node.js via Java tillhandahåller klassen AutoShape som låter dig lägga till en form som innehåller text.

Skapa textruta på bild

För att skapa en textruta på en bild, gå igenom dessa steg:

  1. Skapa en instans av klassen Presentation.
  2. Hämta en referens till den första bilden i den nyss skapade presentationen.
  3. Lägg till ett AutoShape‑objekt med ShapeType satt till Rectangle på en specificerad position på bilden och hämta referensen till det nyligen tillagda AutoShape‑objektet.
  4. Lägg till en TextFrame‑egenskap till AutoShape‑objektet som ska innehålla text. I exemplet nedan lade vi till följande text: Aspose TextBox
  5. Slutligen skriv PPTX‑filen via Presentation‑objektet.

Denna JavaScript‑kod – en implementering av stegen ovan – visar hur du lägger till text på en bild:

// Skapar en Presentation
var pres = new aspose.slides.Presentation();
try {
    // Hämtar den första bilden i presentationen
    var sld = pres.getSlides().get_Item(0);
    // Lägger till en AutoShape med typ satt till Rectangle
    var ashp = sld.getShapes().addAutoShape(aspose.slides.ShapeType.Rectangle, 150, 75, 150, 50);
    // Lägger till TextFrame i rektangeln
    ashp.addTextFrame(" ");
    // Åtkommer textramen
    var txtFrame = ashp.getTextFrame();
    // Skapar Paragraph-objektet för textramen
    var para = txtFrame.getParagraphs().get_Item(0);
    // Skapar ett Portion-objekt för paragrafen
    var portion = para.getPortions().get_Item(0);
    // Ställer in texten
    portion.setText("Aspose TextBox");
    // Sparar presentationen till disk
    pres.save("TextBox_out.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
    if (pres != null) {
        pres.dispose();
    }
}

Kontrollera om formen är en textruta

Aspose.Slides tillhandahåller metoden isTextBox från klassen AutoShape som låter dig undersöka former och identifiera textrutor.

Text box and shape

Denna JavaScript‑kod visar hur du kontrollerar om en form skapades som en textruta:

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

Observera att om du bara lägger till en autoshape med metoden addAutoShape från klassen ShapeCollection kommer isTextBox‑metoden för autoshapen att returnera false. Däremot, efter att du lagt till text i autoshapen med metoden addTextFrame eller setText, returnerar isTextBox‑egenskapen 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() returnerar false
shape1.addTextFrame("shape 1");
// shape1.isTextBox() returnerar true

var shape2 = slide.getShapes().addAutoShape(aspose.slides.ShapeType.Rectangle, 10, 110, 100, 40);
// shape2.isTextBox() returnerar false
shape2.getTextFrame().setText("shape 2");
// shape2.isTextBox() returnerar true

var shape3 = slide.getShapes().addAutoShape(aspose.slides.ShapeType.Rectangle, 10, 210, 100, 40);
// shape3.isTextBox() returnerar false
shape3.addTextFrame("");
// shape3.isTextBox() returnerar false

var shape4 = slide.getShapes().addAutoShape(aspose.slides.ShapeType.Rectangle, 10, 310, 100, 40);
// shape4.isTextBox() returnerar false
shape4.getTextFrame().setText("");
// shape4.isTextBox() returnerar false

Lägg till kolumn i textruta

Aspose.Slides tillhandahåller metoderna setColumnCount och setColumnSpacing från klassen TextFrameFormat som låter dig lägga till kolumner i textrutor. Du kan ange antalet kolumner i en textruta och ställa in avståndet i punkter mellan kolumnerna.

Denna kod i JavaScript demonstrerar den beskrivna operationen:

var pres = new aspose.slides.Presentation();
try {
    // Hämtar den första bilden i presentationen
    var slide = pres.getSlides().get_Item(0);
    // Lägg till en AutoShape med typ satt till Rectangle
    var aShape = slide.getShapes().addAutoShape(aspose.slides.ShapeType.Rectangle, 100, 100, 300, 300);
    // Lägg till TextFrame i rektangeln
    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!"));
    // Hämtar textformatet för TextFrame
    var format = aShape.getTextFrame().getTextFrameFormat();
    // Anger antalet kolumner i TextFrame
    format.setColumnCount(3);
    // Anger avståndet mellan kolumnerna
    format.setColumnSpacing(10);
    // Sparar presentationen
    pres.save("ColumnCount.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
    if (pres != null) {
        pres.dispose();
    }
}

Lägg till kolumn i textram

Aspose.Slides för Node.js via Java tillhandahåller metoden setColumnCount från klassen TextFrameFormat som låter dig lägga till kolumner i textramar. Med denna egenskap kan du ange önskat antal kolumner i en textram.

Denna JavaScript‑kod visar hur du lägger till en kolumn i en textram:

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

Uppdatera text

Aspose.Slides låter dig ändra eller uppdatera texten som finns i en textruta eller all text i en presentation.

Denna JavaScript‑kod demonstrerar en operation där all text i en presentation uppdateras eller ändras:

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);
            // Kontrollerar om formen stödjer textram (IAutoShape).
            if (java.instanceOf(shape, "com.aspose.slides.AutoShape")) {
                var autoShape = shape;
                // Itererar genom stycken i textram
                for (let j = 0; j < autoShape.getTextFrame().getParagraphs().getCount(); j++) {
                    let paragraph = autoShape.getTextFrame().getParagraphs().get_Item(j);
                    // Itererar genom varje del i stycket
                    for (let k = 0; k < paragraph.getPortions().getCount(); k++) {
                        let portion = paragraph.getPortions().get_Item(k);
                        portion.setText(portion.getText().replace("years", "months"));// Ändrar text
                        portion.getPortionFormat().setFontBold(java.newByte(aspose.slides.NullableBool.True));// Ändrar formatering
                    }
                }
            }
        }
    }
    // Sparar den ändrade presentationen
    pres.save("text-changed.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
    if (pres != null) {
        pres.dispose();
    }
}

Lägg till textruta med hyperlänk

Du kan infoga en länk i en textruta. När textrutan klickas på, öppnas länken för användaren.

För att lägga till en textruta som innehåller en länk, gå igenom dessa steg:

  1. Skapa en instans av klassen Presentation.
  2. Hämta en referens till den första bilden i den nyss skapade presentationen.
  3. Lägg till ett AutoShape‑objekt med ShapeType satt till Rectangle på en specificerad position på bilden och hämta referensen till det nyligen tillagda AutoShape‑objektet.
  4. Lägg till en TextFrame i AutoShape‑objektet som innehåller Aspose TextBox som standardtext.
  5. Instansiera klassen HyperlinkManager.
  6. Tilldela HyperlinkManager‑objektet till egenskapen HyperlinkClick som är knuten till den önskade delen av TextFrame.
  7. Slutligen skriv PPTX‑filen via Presentation‑objektet.

Denna JavaScript‑kod – en implementering av stegen ovan – visar hur du lägger till en textruta med en hyperlänk på en bild:

// Skapar en Presentation-klass som representerar en PPTX
var pres = new aspose.slides.Presentation();
try {
    // Hämtar den första bilden i presentationen
    var slide = pres.getSlides().get_Item(0);
    // Lägger till ett AutoShape-objekt med typen satt till Rectangle
    var shape = slide.getShapes().addAutoShape(aspose.slides.ShapeType.Rectangle, 150, 150, 150, 50);
    // Omvandlar formen till AutoShape
    var pptxAutoShape = shape;
    // Åtkommer ITextFrame-egenskapen som är associerad med AutoShape
    pptxAutoShape.addTextFrame("");
    var textFrame = pptxAutoShape.getTextFrame();
    // Lägger till lite text i ramen
    textFrame.getParagraphs().get_Item(0).getPortions().get_Item(0).setText("Aspose.Slides");
    // Ställer in hyperlänken för deltexten
    var hyperlinkManager = textFrame.getParagraphs().get_Item(0).getPortions().get_Item(0).getPortionFormat().getHyperlinkManager();
    hyperlinkManager.setExternalHyperlinkClick("http://www.aspose.com");
    // Sparar PPTX-presentationen
    pres.save("hLink_out.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
    if (pres != null) {
        pres.dispose();
    }
}

FAQ

Vad är skillnaden mellan en textruta och en textplatshållare när du arbetar med masterslides?

En placeholder ärver stil/position från master och kan åsidosättas på layouts, medan en vanlig textruta är ett oberoende objekt på en specifik bild och förändras inte när du byter layout.

Hur kan jag utföra en massersättning av text i hela presentationen utan att påverka text i diagram, tabeller och SmartArt?

Begränsa din iteration till autoshapes som har textramar och uteslut inbäddade objekt (charts, tables, SmartArt) genom att traversera deras samlingar separat eller hoppa över dessa objekttyper.