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.
Info
Aspose.Slides udostępnia również klasę Shape, która pozwala dodawać kształty do slajdów. Jednak nie wszystkie kształty dodane przy użyciu klasyShape mogą zawierać tekst. Natomiast kształty dodane przy pomocy klasy AutoShape mogą zawierać tekst.
Note
Dlatego, gdy pracujesz z kształtem, do którego chcesz dodać tekst, warto sprawdzić i potwierdzić, że został rzutowany jako klasaAutoShape. Dopiero wtedy będziesz mógł pracować z TextFrame, który jest właściwością klasy AutoShape. Zobacz sekcję Update Text na tej stronie.
Utworzenie pola tekstowego na slajdzie
Aby utworzyć pole tekstowe na slajdzie, wykonaj następujące kroki:
- Utwórz instancję klasy Presentation.
- Uzyskaj odniesienie do pierwszego slajdu w nowo utworzonej prezentacji.
- Dodaj obiekt AutoShape z ShapeType ustawiony jako
Rectanglew określonej pozycji na slajdzie i uzyskaj odniesienie do nowo dodanego obiektuAutoShape. - Dodaj właściwość
TextFramedo obiektuAutoShape, która będzie zawierać tekst. W poniższym przykładzie dodaliśmy ten tekst: Aspose TextBox - 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.

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:
- Utwórz instancję klasy
Presentation. - Uzyskaj odniesienie do pierwszego slajdu w nowo utworzonej prezentacji.
- Dodaj obiekt
AutoShapezShapeTypeustawionym jakoRectanglew określonej pozycji na slajdzie i uzyskaj odniesienie do nowo dodanego obiektu AutoShape. - Dodaj
TextFramedo obiektuAutoShape, który zawiera Aspose TextBox jako domyślny tekst. - Zainstancjuj klasę
HyperlinkManager. - Przypisz obiekt
HyperlinkManagerdo właściwości HyperlinkClick powiązanej z wybraną częściąTextFrame. - 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.