Správa textových polí v prezentacích pomocí JavaScriptu

Úvod

Texty na snímcích jsou obvykle umístěny v textových polích nebo tvarech. Proto musíte pro přidání textu na snímek nejprve přidat textové pole a poté vložit text do tohoto pole. Aspose.Slides pro Node.js přes Java poskytuje třídu AutoShape, která umožňuje přidat tvar obsahující text.

Vytvoření textového pole na snímku

Pro vytvoření textového pole na snímku postupujte podle těchto kroků:

  1. Vytvořte instanci třídy Presentation.
  2. Získejte odkaz na první snímek v nově vytvořené prezentaci.
  3. Přidejte objekt AutoShape s ShapeType nastaveným na Rectangle na zadané pozici na snímku a získejte odkaz na nově přidaný objekt AutoShape.
  4. Přidejte vlastnost TextFrame k objektu AutoShape, která bude obsahovat text. V níže uvedeném příkladu jsme přidali tento text: Aspose TextBox
  5. Nakonec zapište soubor PPTX pomocí objektu Presentation.

Tento JavaScriptový kód – implementace výše uvedených kroků – ukazuje, jak přidat text na snímek:

// Vytvoří instanci Presentation
var pres = new aspose.slides.Presentation();
try {
    // Získá první snímek v prezentaci
    var sld = pres.getSlides().get_Item(0);
    // Přidá AutoShape s typem nastaveným na Rectangle
    var ashp = sld.getShapes().addAutoShape(aspose.slides.ShapeType.Rectangle, 150, 75, 150, 50);
    // Přidá TextFrame do obdélníku
    ashp.addTextFrame(" ");
    // Přistupuje k textovému rámci
    var txtFrame = ashp.getTextFrame();
    // Vytvoří objekt Paragraph pro textový rámec
    var para = txtFrame.getParagraphs().get_Item(0);
    // Vytvoří objekt Portion pro odstavec
    var portion = para.getPortions().get_Item(0);
    // Nastaví text
    portion.setText("Aspose TextBox");
    // Uloží prezentaci na disk
    pres.save("TextBox_out.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
    if (pres != null) {
        pres.dispose();
    }
}

Kontrola, zda je tvar textovým polem

Aspose.Slides poskytuje metodu isTextBox ze třídy AutoShape, která vám umožní prozkoumat tvary a identifikovat textová pole.

Text box and shape

Tento JavaScriptový kód ukazuje, jak zkontrolovat, zda byl tvar vytvořen jako textové pole:

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

Všimněte si, že pokud jednoduše přidáte autoshape pomocí metody addAutoShape ze třídy ShapeCollection, metoda isTextBox této autoshape vrátí false. Nicméně po přidání textu do autoshape pomocí metody addTextFrame nebo setText vrátí vlastnost isTextBox hodnotu 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() vrací false
shape1.addTextFrame("shape 1");
// shape1.isTextBox() vrací true

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

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

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

Přidání sloupce do textového pole

Aspose.Slides poskytuje metody setColumnCount a setColumnSpacing ze třídy TextFrameFormat, které vám umožní přidávat sloupce do textových polí. Můžete určit počet sloupců v textovém poli a nastavit mezeru v bodech mezi sloupci.

Tento kód v JavaScriptu ukazuje popsanou operaci:

var pres = new aspose.slides.Presentation();
try {
    // Získá první snímek v prezentaci
    var slide = pres.getSlides().get_Item(0);
    // Přidá AutoShape s typem nastaveným na Rectangle
    var aShape = slide.getShapes().addAutoShape(aspose.slides.ShapeType.Rectangle, 100, 100, 300, 300);
    // Přidá TextFrame do obdélníku
    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!");
    // Získá formát textu TextFrame
    var format = aShape.getTextFrame().getTextFrameFormat();
    // Určuje počet sloupců v TextFrame
    format.setColumnCount(3);
    // Určuje mezery mezi sloupci
    format.setColumnSpacing(10);
    // Uloží prezentaci
    pres.save("ColumnCount.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
    if (pres != null) {
        pres.dispose();
    }
}

Přidání sloupce do textového rámce

Aspose.Slides pro Node.js přes Java poskytuje metodu setColumnCount ze třídy TextFrameFormat, která umožňuje přidávat sloupce do textových rámců. Prostřednictvím této vlastnosti můžete zadat požadovaný počet sloupců v textovém rámci.

Tento JavaScriptový kód ukazuje, jak přidat sloupec do textového rámce:

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

Aktualizace textu

Aspose.Slides vám umožňuje změnit nebo aktualizovat text obsažený v textovém poli nebo veškerý text v prezentaci.

Tento JavaScriptový kód ukazuje operaci, při které je aktualizován nebo změněn veškerý text v prezentaci:

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);
            // Kontroluje, zda tvar podporuje textový rámec (IAutoShape).
            if (java.instanceOf(shape, "com.aspose.slides.AutoShape")) {
                var autoShape = shape;
                // Prochází odstavce v textovém rámci
                for (let j = 0; j < autoShape.getTextFrame().getParagraphs().getCount(); j++) {
                    let paragraph = autoShape.getTextFrame().getParagraphs().get_Item(j);
                    // Prochází každou část v odstavci
                    for (let k = 0; k < paragraph.getPortions().getCount(); k++) {
                        let portion = paragraph.getPortions().get_Item(k);
                        portion.setText(portion.getText().replace("years", "months"));// Mění text
                        portion.getPortionFormat().setFontBold(java.newByte(aspose.slides.NullableBool.True));// Mění formátování
                    }
                }
            }
        }
    }
    // Uloží upravenou prezentaci
    pres.save("text-changed.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
    if (pres != null) {
        pres.dispose();
    }
}

Přidání textového pole s hyperodkazem

Můžete vložit odkaz do textového pole. Když je textové pole kliknuto, uživatelé jsou přesměrováni na otevření odkazu.

Pro přidání textového pole obsahujícího odkaz postupujte podle těchto kroků:

  1. Vytvořte instanci třídy Presentation.
  2. Získejte odkaz na první snímek v nově vytvořené prezentaci.
  3. Přidejte objekt AutoShape s ShapeType nastaveným na Rectangle na zadané pozici na snímku a získejte odkaz na nově přidaný objekt AutoShape.
  4. Přidejte TextFrame k objektu AutoShape, který bude obsahovat Aspose TextBox jako výchozí text.
  5. Vytvořte instanci třídy HyperlinkManager.
  6. Přiřaďte objekt HyperlinkManager k vlastnosti HyperlinkClick spojené s požadovanou částí TextFrame.
  7. Nakonec zapište soubor PPTX pomocí objektu Presentation.

Tento JavaScriptový kód – implementace výše uvedených kroků – ukazuje, jak přidat textové pole s hyperodkazem na snímek:

// Vytvoří instanci třídy Presentation, která představuje PPTX
var pres = new aspose.slides.Presentation();
try {
    // Získá první snímek v prezentaci
    var slide = pres.getSlides().get_Item(0);
    // Přidá objekt AutoShape s typem nastaveným na Rectangle
    var shape = slide.getShapes().addAutoShape(aspose.slides.ShapeType.Rectangle, 150, 150, 150, 50);
    // Přetypuje tvar na AutoShape
    var pptxAutoShape = shape;
    // Přistupuje k vlastnosti ITextFrame spojené s AutoShape
    pptxAutoShape.addTextFrame("");
    var textFrame = pptxAutoShape.getTextFrame();
    // Přidá text do rámce
    textFrame.getParagraphs().get_Item(0).getPortions().get_Item(0).setText("Aspose.Slides");
    // Nastaví hyperodkaz pro text části
    var hyperlinkManager = textFrame.getParagraphs().get_Item(0).getPortions().get_Item(0).getPortionFormat().getHyperlinkManager();
    hyperlinkManager.setExternalHyperlinkClick("http://www.aspose.com");
    // Uloží PPTX prezentaci
    pres.save("hLink_out.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
    if (pres != null) {
        pres.dispose();
    }
}

Často kladené otázky

Jaký je rozdíl mezi textovým polem a textovým zástupcem při práci s hlavními snímky?

Zástupce placeholder dědí styl/pozici z masteru a může být přepsán na rozvrzích, zatímco běžné textové pole je nezávislý objekt na konkrétním snímku a nemění se při změně rozvržení.

Jak mohu provést hromadnou náhradu textu v celé prezentaci, aniž bych zasahoval do textu v grafech, tabulkách a SmartArt?

Omezte iteraci pouze na auto-tvary, které mají textové rámce, a vyloučte vložené objekty (grafy, tabulky, SmartArt) tím, že projdete jejich kolekce odděleně nebo přeskočíte tyto typy objektů.