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.
Info
Aspose.Slides také poskytuje třídu Shape, která umožňuje přidávat tvary na snímky. Nicméně ne všechny tvary přidané pomocí třídyShape mohou obsahovat text. Tvary přidané pomocí třídy AutoShape však mohou text obsahovat.
Note
Proto při práci s tvarem, ke kterému chcete přidat text, může být vhodné zkontrolovat a potvrdit, že byl přetypován na tříduAutoShape. Teprve poté budete moci pracovat s TextFrame, což je vlastnost třídy AutoShape. Viz část Update Text na této stránce.
Vytvoření textového pole na snímku
Pro vytvoření textového pole na snímku postupujte podle těchto kroků:
- Vytvořte instanci třídy Presentation.
- Získejte odkaz na první snímek v nově vytvořené prezentaci.
- Přidejte objekt AutoShape s ShapeType nastaveným na
Rectanglena zadané pozici na snímku a získejte odkaz na nově přidaný objektAutoShape. - Přidejte vlastnost
TextFramek objektuAutoShape, která bude obsahovat text. V níže uvedeném příkladu jsme přidali tento text: Aspose TextBox - 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.

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ů:
- Vytvořte instanci třídy
Presentation. - Získejte odkaz na první snímek v nově vytvořené prezentaci.
- Přidejte objekt
AutoShapesShapeTypenastaveným naRectanglena zadané pozici na snímku a získejte odkaz na nově přidaný objekt AutoShape. - Přidejte
TextFramek objektuAutoShape, který bude obsahovat Aspose TextBox jako výchozí text. - Vytvořte instanci třídy
HyperlinkManager. - Přiřaďte objekt
HyperlinkManagerk vlastnosti HyperlinkClick spojené s požadovanou částíTextFrame. - 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ů.