Zarządzanie polami tekstowymi w prezentacjach przy użyciu JavaScript

Wprowadzenie

Teksty na slajdach zazwyczaj znajdują się w polach tekstowych lub kształtach. Dlatego, aby dodać tekst do slajdu, musisz dodać pole tekstowe, a następnie umieścić w nim jakiś tekst. Aspose.Slides for Node.js via Java udostępnia klasę AutoShape, która pozwala dodać kształt zawierający tekst.

Utworzenie pola tekstowego na slajdzie

Aby utworzyć pole tekstowe na slajdzie, wykonaj następujące kroki:

  1. Utwórz instancję klasy Presentation.
  2. Uzyskaj odniesienie do pierwszego slajdu w nowo utworzonej prezentacji.
  3. Dodaj obiekt AutoShape z ShapeType ustawiony jako Rectangle w określonej pozycji na slajdzie i uzyskaj odniesienie do nowo dodanego obiektu AutoShape.
  4. Dodaj właściwość TextFrame do obiektu AutoShape, która będzie zawierać tekst. W poniższym przykładzie dodaliśmy ten tekst: Aspose TextBox
  5. Na koniec zapisz plik PPTX przy użyciu obiektu Presentation.

Ten kod JavaScript — implementacja powyższych kroków — pokazuje, jak dodać tekst do slajdu:

// Tworzy instancję prezentacji
var pres = new aspose.slides.Presentation();
try {
    // Pobiera pierwszy slajd w prezentacji
    var sld = pres.getSlides().get_Item(0);
    // Dodaje AutoShape z typem ustawionym jako Prostokąt
    var ashp = sld.getShapes().addAutoShape(aspose.slides.ShapeType.Rectangle, 150, 75, 150, 50);
    // Dodaje TextFrame do prostokąta
    ashp.addTextFrame(" ");
    // Uzyskuje dostęp do ramki tekstowej
    var txtFrame = ashp.getTextFrame();
    // Tworzy obiekt Paragraph dla ramki tekstowej
    var para = txtFrame.getParagraphs().get_Item(0);
    // Tworzy obiekt Portion dla akapitu
    var portion = para.getPortions().get_Item(0);
    // Ustawia tekst
    portion.setText("Aspose TextBox");
    // Zapisuje prezentację na dysk
    pres.save("TextBox_out.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
    if (pres != null) {
        pres.dispose();
    }
}

Sprawdzenie, czy kształt jest polem tekstowym

Aspose.Slides udostępnia metodę isTextBox z klasy AutoShape, pozwalającą badać kształty i identyfikować pola tekstowe.

Text box and shape

Ten kod JavaScript pokazuje, jak sprawdzić, czy kształt został utworzony jako pole tekstowe:

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

Zauważ, że jeśli po prostu dodasz autokształt przy użyciu metody addAutoShape z klasy ShapeCollection, metoda isTextBox tego autokształtu zwróci false. Jednak po dodaniu tekstu do autokształtu metodą addTextFrame lub setText, właściwość isTextBox zwróci 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() zwraca false
shape1.addTextFrame("shape 1");
// shape1.isTextBox() zwraca true

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

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

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

Dodanie kolumny w polu tekstowym

Aspose.Slides udostępnia metody setColumnCount i setColumnSpacing z klasy TextFrameFormat, które pozwalają dodać kolumny do pól tekstowych. Możesz określić liczbę kolumn w polu tekstowym i ustawić odstęp w punktach pomiędzy kolumnami.

Ten kod w JavaScript demonstruje opisaną operację:

var pres = new aspose.slides.Presentation();
try {
    // Pobiera pierwszy slajd w prezentacji
    var slide = pres.getSlides().get_Item(0);
    // Dodaje AutoShape z typem ustawionym jako Prostokąt
    var aShape = slide.getShapes().addAutoShape(aspose.slides.ShapeType.Rectangle, 100, 100, 300, 300);
    // Dodaje TextFrame do prostokąta
    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!");
    // Pobiera format tekstu z TextFrame
    var format = aShape.getTextFrame().getTextFrameFormat();
    // Określa liczbę kolumn w TextFrame
    format.setColumnCount(3);
    // Określa odstęp między kolumnami
    format.setColumnSpacing(10);
    // Zapisuje prezentację
    pres.save("ColumnCount.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
    if (pres != null) {
        pres.dispose();
    }
}

Dodanie kolumny w ramce tekstowej

Aspose.Slides for Node.js via Java udostępnia metodę setColumnCount z klasy TextFrameFormat, która pozwala dodać kolumny w ramkach tekstowych. Dzięki tej właściwości możesz określić preferowaną liczbę kolumn w ramce tekstowej.

Ten kod JavaScript pokazuje, jak dodać kolumnę wewnątrz ramki tekstowej:

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

Aktualizacja tekstu

Aspose.Slides pozwala zmienić lub zaktualizować tekst zawarty w polu tekstowym lub wszystkie teksty w prezentacji.

Ten kod JavaScript demonstruje operację, w której wszystkie teksty w prezentacji są aktualizowane lub zmieniane:

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);
            // Sprawdza, czy kształt obsługuje ramkę tekstową (IAutoShape).
            if (java.instanceOf(shape, "com.aspose.slides.AutoShape")) {
                var autoShape = shape;
                // Iteruje po akapitach w ramce tekstowej
                for (let j = 0; j < autoShape.getTextFrame().getParagraphs().getCount(); j++) {
                    let paragraph = autoShape.getTextFrame().getParagraphs().get_Item(j);
                    // Iteruje po każdej części w akapicie
                    for (let k = 0; k < paragraph.getPortions().getCount(); k++) {
                        let portion = paragraph.getPortions().get_Item(k);
                        portion.setText(portion.getText().replace("years", "months"));// Zmienia tekst
                        portion.getPortionFormat().setFontBold(java.newByte(aspose.slides.NullableBool.True));// Zmienia formatowanie
                    }
                }
            }
        }
    }
    // Zapisuje zmodyfikowaną prezentację
    pres.save("text-changed.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
    if (pres != null) {
        pres.dispose();
    }
}

Dodanie pola tekstowego z hiperłączem

Możesz wstawić link wewnątrz pola tekstowego. Po kliknięciu pola tekstowego użytkownicy zostaną przekierowani do otwarcia linku.

Aby dodać pole tekstowe zawierające link, wykonaj następujące kroki:

  1. Utwórz instancję klasy Presentation.
  2. Uzyskaj odniesienie do pierwszego slajdu w nowo utworzonej prezentacji.
  3. Dodaj obiekt AutoShape z ShapeType ustawionym jako Rectangle w określonej pozycji na slajdzie i uzyskaj odniesienie do nowo dodanego obiektu AutoShape.
  4. Dodaj TextFrame do obiektu AutoShape, który zawiera Aspose TextBox jako domyślny tekst.
  5. Zainstancjuj klasę HyperlinkManager.
  6. Przypisz obiekt HyperlinkManager do właściwości HyperlinkClick powiązanej z wybraną częścią TextFrame.
  7. Na koniec zapisz plik PPTX przy użyciu obiektu Presentation.

Ten kod JavaScript — implementacja powyższych kroków — pokazuje, jak dodać pole tekstowe z hiperłączem do slajdu:

// Tworzy instancję klasy Presentation reprezentującej plik PPTX
var pres = new aspose.slides.Presentation();
try {
    // Pobiera pierwszy slajd w prezentacji
    var slide = pres.getSlides().get_Item(0);
    // Dodaje obiekt AutoShape z typem ustawionym jako Rectangle
    var shape = slide.getShapes().addAutoShape(aspose.slides.ShapeType.Rectangle, 150, 150, 150, 50);
    // Rzutuje kształt na AutoShape
    var pptxAutoShape = shape;
    // Uzyskuje dostęp do właściwości ITextFrame powiązanej z AutoShape
    pptxAutoShape.addTextFrame("");
    var textFrame = pptxAutoShape.getTextFrame();
    // Dodaje tekst do ramki
    textFrame.getParagraphs().get_Item(0).getPortions().get_Item(0).setText("Aspose.Slides");
    // Ustawia hiperłącze dla tekstu w części
    var hyperlinkManager = textFrame.getParagraphs().get_Item(0).getPortions().get_Item(0).getPortionFormat().getHyperlinkManager();
    hyperlinkManager.setExternalHyperlinkClick("http://www.aspose.com");
    // Zapisuje prezentację PPTX
    pres.save("hLink_out.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
    if (pres != null) {
        pres.dispose();
    }
}

FAQ

Jaka jest różnica między polem tekstowym a placeholderem tekstu podczas pracy z master slajdami?

A placeholder dziedziczy styl/pozycję z master i może być nadpisany na layouts, podczas gdy zwykłe pole tekstowe jest niezależnym obiektem na konkretnym slajdzie i nie zmienia się przy przełączaniu układów.

Jak mogę wykonać masową zamianę tekstu w całej prezentacji, nie dotykając tekstu w wykresach, tabelach i SmartArt?

Ogranicz iterację do autokształtów, które mają ramki tekstowe, i wyklucz osadzone obiekty (charts, tables, SmartArt) poprzez przeglądanie ich kolekcji osobno lub pomijanie tych typów obiektów.