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.
Info
Aspose.Slides tillhandahåller också klassen Shape som låter dig lägga till former på bilder. Dock kan inte alla former som läggs till via klassenShape innehålla text. Men former som läggs till via klassen AutoShape kan innehålla text.
Note
Därför, när du hanterar en form som du vill lägga till text i, kan du vilja kontrollera och bekräfta att den har kastats via klassenAutoShape. Endast då kan du arbeta med TextFrame, som är en egenskap under AutoShape. Se sektionen Update Text på den här sidan.
Skapa textruta på bild
För att skapa en textruta på en bild, gå igenom dessa steg:
- Skapa en instans av klassen Presentation.
- Hämta en referens till den första bilden i den nyss skapade presentationen.
- Lägg till ett AutoShape‑objekt med ShapeType satt till
Rectanglepå en specificerad position på bilden och hämta referensen till det nyligen tillagdaAutoShape‑objektet. - Lägg till en
TextFrame‑egenskap tillAutoShape‑objektet som ska innehålla text. I exemplet nedan lade vi till följande text: Aspose TextBox - 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.

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:
- Skapa en instans av klassen
Presentation. - Hämta en referens till den första bilden i den nyss skapade presentationen.
- Lägg till ett
AutoShape‑objekt medShapeTypesatt tillRectanglepå en specificerad position på bilden och hämta referensen till det nyligen tillagda AutoShape‑objektet. - Lägg till en
TextFrameiAutoShape‑objektet som innehåller Aspose TextBox som standardtext. - Instansiera klassen
HyperlinkManager. - Tilldela
HyperlinkManager‑objektet till egenskapen HyperlinkClick som är knuten till den önskade delen avTextFrame. - 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.