Управление текстовым полем
Текст на слайдах обычно находится в текстовых полях или фигурах. Поэтому, чтобы добавить текст на слайд, необходимо добавить текстовое поле и затем поместить там текст. Aspose.Slides for Node.js via Java предоставляет класс AutoShape, который позволяет добавить фигуру, содержащую текст.
Info
Aspose.Slides также предоставляет класс Shape, который позволяет добавлять фигуры на слайды. Однако не все фигуры, добавленные через классShape, могут содержать текст. Фигуры, добавленные через класс AutoShape, могут содержать текст.
Note
Поэтому, работая с фигурой, в которую нужно добавить текст, рекомендуется проверить и убедиться, что она была приведена к классуAutoShape. Только тогда вы сможете работать с TextFrame, который является свойством AutoShape. См. раздел Update Text на этой странице.
Создание текстового поля на слайде
Чтобы создать текстовое поле на слайде, выполните следующие действия:
- Создайте экземпляр класса Presentation.
- Получите ссылку на первый слайд в только что созданной презентации.
- Добавьте объект AutoShape с типом
ShapeType, установленным вRectangle, в указанном положении на слайде и получите ссылку на только что добавленный объектAutoShape. - Добавьте свойство
TextFrameк объектуAutoShape, которое будет содержать текст. В примере ниже мы добавили такой текст: Aspose TextBox. - Наконец, запишите файл PPTX через объект
Presentation.
Этот JavaScript‑код, реализующий описанные шаги, показывает, как добавить текст на слайд:
// Создаёт объект Presentation
var pres = new aspose.slides.Presentation();
try {
// Получает первый слайд в презентации
var sld = pres.getSlides().get_Item(0);
// Добавляет AutoShape с типом Rectangle
var ashp = sld.getShapes().addAutoShape(aspose.slides.ShapeType.Rectangle, 150, 75, 150, 50);
// Добавляет TextFrame в прямоугольник
ashp.addTextFrame(" ");
// Получает доступ к текстовому кадру
var txtFrame = ashp.getTextFrame();
// Создаёт объект Paragraph для текстового кадра
var para = txtFrame.getParagraphs().get_Item(0);
// Создаёт объект Portion для абзаца
var portion = para.getPortions().get_Item(0);
// Устанавливает текст
portion.setText("Aspose TextBox");
// Сохраняет презентацию на диск
pres.save("TextBox_out.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
if (pres != null) {
pres.dispose();
}
}
Проверка формы текстового поля
Aspose.Slides предоставляет метод isTextBox класса AutoShape, позволяющий проверять фигуры и определять, являются ли они текстовыми полями.

Этот JavaScript‑код показывает, как проверить, создана ли фигура как текстовое поле:
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();
}
Обратите внимание, что если вы просто добавите автогенерируемую фигуру с помощью метода addAutoShape класса ShapeCollection, метод isTextBox у такой фигуры вернёт false. Однако после того, как вы добавите текст в автогенерируемую фигуру с помощью метода addTextFrame или setText, свойство isTextBox вернёт 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() возвращает false
shape1.addTextFrame("shape 1");
// shape1.isTextBox() возвращает true
var shape2 = slide.getShapes().addAutoShape(aspose.slides.ShapeType.Rectangle, 10, 110, 100, 40);
// shape2.isTextBox() возвращает false
shape2.getTextFrame().setText("shape 2");
// shape2.isTextBox() возвращает true
var shape3 = slide.getShapes().addAutoShape(aspose.slides.ShapeType.Rectangle, 10, 210, 100, 40);
// shape3.isTextBox() возвращает false
shape3.addTextFrame("");
// shape3.isTextBox() возвращает false
var shape4 = slide.getShapes().addAutoShape(aspose.slides.ShapeType.Rectangle, 10, 310, 100, 40);
// shape4.isTextBox() возвращает false
shape4.getTextFrame().setText("");
// shape4.isTextBox() возвращает false
Добавление колонок в текстовое поле
Aspose.Slides предоставляет методы setColumnCount и setColumnSpacing класса TextFrameFormat, которые позволяют добавлять колонки в текстовые поля. Вы можете задать количество колонок в текстовом поле и установить промежуток в пунктах между колонками.
Этот код на JavaScript демонстрирует описанную операцию:
var pres = new aspose.slides.Presentation();
try {
// Получает первый слайд в презентации
var slide = pres.getSlides().get_Item(0);
// Добавляет AutoShape с типом Rectangle
var aShape = slide.getShapes().addAutoShape(aspose.slides.ShapeType.Rectangle, 100, 100, 300, 300);
// Добавляет TextFrame к прямоугольнику
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!");
// Получает формат текста TextFrame
var format = aShape.getTextFrame().getTextFrameFormat();
// Задаёт количество колонок в TextFrame
format.setColumnCount(3);
// Задаёт расстояние между колонками
format.setColumnSpacing(10);
// Сохраняет презентацию
pres.save("ColumnCount.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
if (pres != null) {
pres.dispose();
}
}
Добавление колонки в текстовый кадр
Aspose.Slides for Node.js via Java предоставляет метод setColumnCount класса TextFrameFormat, который позволяет добавлять колонки в текстовые кадры. С помощью этого свойства вы можете указать желаемое количество колонок в текстовом кадре.
Этот JavaScript‑код показывает, как добавить колонку внутри текстового кадра:
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();
}
}
Обновление текста
Aspose.Slides позволяет изменять или обновлять текст, содержащийся в текстовом поле, либо все тексты, содержащиеся в презентации.
Этот JavaScript‑код демонстрирует операцию, при которой все тексты в презентации обновляются или изменяются:
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);
// Проверяет, поддерживает ли фигура текстовый кадр (IAutoShape).
if (java.instanceOf(shape, "com.aspose.slides.AutoShape")) {
var autoShape = shape;
// Проходит по абзацам в текстовом кадре
for (let j = 0; j < autoShape.getTextFrame().getParagraphs().getCount(); j++) {
let paragraph = autoShape.getTextFrame().getParagraphs().get_Item(j);
// Проходит по каждому сегменту в абзаце
for (let k = 0; k < paragraph.getPortions().getCount(); k++) {
let portion = paragraph.getPortions().get_Item(k);
portion.setText(portion.getText().replace("years", "months"));// Изменяет текст
portion.getPortionFormat().setFontBold(java.newByte(aspose.slides.NullableBool.True));// Изменяет форматирование
}
}
}
}
}
// Сохраняет изменённую презентацию
pres.save("text-changed.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
if (pres != null) {
pres.dispose();
}
}
Добавление текстового поля с гиперссылкой
Вы можете вставить ссылку внутрь текстового поля. При щелчке по полю пользователи будут перенаправлены к открытию ссылки.
Чтобы добавить текстовое поле, содержащее ссылку, выполните следующие шаги:
- Создайте экземпляр класса
Presentation. - Получите ссылку на первый слайд в только что созданной презентации.
- Добавьте объект
AutoShapeс типомShapeType, установленным вRectangle, в заданном положении на слайде и получите ссылку на только что добавленный объектAutoShape. - Добавьте
TextFrameк объектуAutoShape, который содержит Aspose TextBox в качестве текста по умолчанию. - Создайте экземпляр класса
HyperlinkManager. - Свяжите объект
HyperlinkManagerсо свойством HyperlinkClick вашего выбранного фрагментаTextFrame. - Наконец, запишите файл PPTX через объект
Presentation.
Этот JavaScript‑код, реализующий описанные шаги, показывает, как добавить текстовое поле с гиперссылкой на слайд:
// Создает объект класса Presentation, представляющий PPTX
var pres = new aspose.slides.Presentation();
try {
// Получает первый слайд в презентации
var slide = pres.getSlides().get_Item(0);
// Добавляет объект AutoShape с типом Rectangle
var shape = slide.getShapes().addAutoShape(aspose.slides.ShapeType.Rectangle, 150, 150, 150, 50);
// Преобразует форму к AutoShape
var pptxAutoShape = shape;
// Получает свойство ITextFrame, связанное с AutoShape
pptxAutoShape.addTextFrame("");
var textFrame = pptxAutoShape.getTextFrame();
// Добавляет некоторый текст в кадр
textFrame.getParagraphs().get_Item(0).getPortions().get_Item(0).setText("Aspose.Slides");
// Устанавливает гиперссылку для текста сегмента
var hyperlinkManager = textFrame.getParagraphs().get_Item(0).getPortions().get_Item(0).getPortionFormat().getHyperlinkManager();
hyperlinkManager.setExternalHyperlinkClick("http://www.aspose.com");
// Сохраняет презентацию PPTX
pres.save("hLink_out.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
if (pres != null) {
pres.dispose();
}
}
FAQ
В чём разница между текстовым полем и заполнителем текста при работе с слайдами‑шаблонами?
Заполнитель наследует стиль/позицию от главного шаблона и может быть переопределён на макетах, тогда как обычное текстовое поле является независимым объектом на конкретном слайде и не меняется при переключении макетов.
Как выполнить массовую замену текста во всей презентации, не затрагивая текст внутри диаграмм, таблиц и SmartArt?
Ограничьте итерацию только автогенерируемыми фигурами, имеющими текстовые кадры, и исключите встроенные объекты (диаграммы, таблицы, SmartArt), обходя их коллекции отдельно или пропуская такие типы объектов.