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

Этот Java‑код показывает, как проверить, была ли фигура создана как текстовое поле:
Presentation presentation = new Presentation("sample.pptx");
try {
ForEach.shape(presentation, (shape, slide, index) -> {
if (shape instanceof IAutoShape) {
IAutoShape autoShape = (IAutoShape) shape;
System.out.println(autoShape.isTextBox() ? "shape is a text box" : "shape is not a text box");
}
});
} finally {
presentation.dispose();
}
Обратите внимание, что если вы просто добавляете автофигуру с помощью метода addAutoShape из интерфейса IShapeCollection, метод isTextBox для этой автофигуры вернёт false. Однако после того как вы добавите текст в автофигуру с помощью метода addTextFrame или метода setText, свойство isTextBox вернёт true.
Presentation presentation = new Presentation();
ISlide slide = presentation.getSlides().get_Item(0);
IAutoShape shape1 = slide.getShapes().addAutoShape(ShapeType.Rectangle, 10, 10, 100, 40);
// shape1.isTextBox() возвращает false
shape1.addTextFrame("shape 1");
// shape1.isTextBox() возвращает true
IAutoShape shape2 = slide.getShapes().addAutoShape(ShapeType.Rectangle, 10, 110, 100, 40);
// shape2.isTextBox() возвращает false
shape2.getTextFrame().setText("shape 2");
// shape2.isTextBox() возвращает true
IAutoShape shape3 = slide.getShapes().addAutoShape(ShapeType.Rectangle, 10, 210, 100, 40);
// shape3.isTextBox() возвращает false
shape3.addTextFrame("");
// shape3.isTextBox() возвращает false
IAutoShape shape4 = slide.getShapes().addAutoShape(ShapeType.Rectangle, 10, 310, 100, 40);
// shape4.isTextBox() возвращает false
shape4.getTextFrame().setText("");
// shape4.isTextBox() возвращает false
Добавление колонок в текстовое поле
Aspose.Slides предоставляет свойства ColumnCount и ColumnSpacing (из интерфейса ITextFrameFormat и класса TextFrameFormat), которые позволяют добавлять колонки в текстовые поля. Вы можете указать количество колонок в текстовом поле и задать расстояние между колонками в пунктах.
Этот код на Java демонстрирует описанную операцию:
Presentation pres = new Presentation();
try {
// Получает первый слайд в презентации
ISlide slide = pres.getSlides().get_Item(0);
// Добавляет AutoShape с типом Rectangle
IAutoShape aShape = slide.getShapes().addAutoShape(ShapeType.Rectangle, 100, 100, 300, 300);
// Добавляет TextFrame к Rectangle
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
ITextFrameFormat format = aShape.getTextFrame().getTextFrameFormat();
// Устанавливает количество колонок в TextFrame
format.setColumnCount(3);
// Устанавливает расстояние между колонками
format.setColumnSpacing(10);
// Сохраняет презентацию
pres.save("ColumnCount.pptx", SaveFormat.Pptx);
} finally {
if (pres != null) pres.dispose();
}
Добавление колонок в текстовый фрейм
Aspose.Slides for Android via Java предоставляет свойство ColumnCount (из интерфейса ITextFrameFormat), которое позволяет добавлять колонки в текстовые фреймы. С помощью этого свойства вы можете указать желаемое количество колонок в текстовом фрейме.
Этот Java‑код показывает, как добавить колонку внутри текстового фрейма:
String outPptxFileName = "ColumnsTest.pptx";
Presentation pres = new Presentation();
try {
IAutoShape shape1 = pres.getSlides().get_Item(0).getShapes().addAutoShape(ShapeType.Rectangle, 100, 100, 300, 300);
TextFrameFormat format = (TextFrameFormat)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, SaveFormat.Pptx);
Presentation test = new Presentation(outPptxFileName);
try {
IAutoShape autoShape = ((AutoShape)test.getSlides().get_Item(0).getShapes().get_Item(0));
Assert.assertTrue(2 == autoShape.getTextFrame().getTextFrameFormat().getColumnCount());
Assert.assertTrue(Double.NaN == autoShape.getTextFrame().getTextFrameFormat().getColumnSpacing());
} finally {
if (test != null) test.dispose();
}
format.setColumnSpacing(20);
pres.save(outPptxFileName, SaveFormat.Pptx);
Presentation test1 = new Presentation(outPptxFileName);
try {
IAutoShape autoShape = ((AutoShape)test1.getSlides().get_Item(0).getShapes().get_Item(0));
Assert.assertTrue(2 == autoShape.getTextFrame().getTextFrameFormat().getColumnCount());
Assert.assertTrue(20 == autoShape.getTextFrame().getTextFrameFormat().getColumnSpacing());
} finally {
if (test1 != null) test1.dispose();
}
format.setColumnCount(3);
format.setColumnSpacing(15);
pres.save(outPptxFileName, SaveFormat.Pptx);
Presentation test2 = new Presentation(outPptxFileName);
try {
IAutoShape autoShape = ((AutoShape)test2.getSlides().get_Item(0).getShapes().get_Item(0));
Assert.assertTrue(3 == autoShape.getTextFrame().getTextFrameFormat().getColumnCount());
Assert.assertTrue(15 == autoShape.getTextFrame().getTextFrameFormat().getColumnSpacing());
} finally {
if (test2 != null) test2.dispose();
}
} finally {
if (pres != null) pres.dispose();
}
Обновление текста
Aspose.Slides позволяет изменять или обновлять текст, содержащийся в текстовом поле, либо все тексты в презентации.
Этот Java‑код демонстрирует операцию, при которой обновляются или изменяются все тексты в презентации:
Presentation pres = new Presentation("text.pptx");
try {
for (ISlide slide : pres.getSlides())
{
for (IShape shape : slide.getShapes())
{
if (shape instanceof IAutoShape) // Проверяет, поддерживает ли фигура текстовый фрейм (IAutoShape).
{
IAutoShape autoShape = (IAutoShape)shape;
for (IParagraph paragraph : autoShape.getTextFrame().getParagraphs()) // Перебирает параграфы в текстовом фрейме
{
for (IPortion portion : paragraph.getPortions()) // Перебирает каждую часть в параграфе
{
portion.setText(portion.getText().replace("years", "months")); // Изменяет текст
portion.getPortionFormat().setFontBold(NullableBool.True); // Изменяет форматирование
}
}
}
}
}
// Сохраняет измененную презентацию
pres.save("text-changed.pptx", SaveFormat.Pptx);
} finally {
if (pres != null) pres.dispose();
}
Добавление текстового поля с гиперссылкой
Вы можете вставить ссылку внутри текстового поля. При щелчке по полю пользователи будут перенаправлены к открытию ссылки.
Чтобы добавить текстовое поле, содержащее ссылку, выполните следующие шаги:
- Создайте экземпляр класса
Presentation. - Получите ссылку на первый слайд в только что созданной презентации.
- Добавьте объект
AutoShapeсShapeType, установленным вRectangle, в указанной позиции на слайде и получите ссылку на только что добавленный объект AutoShape. - Добавьте
TextFrameк объектуAutoShape, который содержит Aspose TextBox как текст по умолчанию. - Создайте экземпляр класса
IHyperlinkManager. - Присвойте объект
IHyperlinkManagerсвойству HyperlinkClick у выбранной частиTextFrame. - Наконец, запишите файл PPTX через объект
Presentation.
Этот Java‑код — реализация описанных шагов — показывает, как добавить текстовое поле с гиперссылкой на слайд:
// Создает экземпляр класса Presentation, представляющего PPTX
Presentation pres = new Presentation();
try {
// Получает первый слайд в презентации
ISlide slide = pres.getSlides().get_Item(0);
// Добавляет объект AutoShape с типом Rectangle
IShape shape = slide.getShapes().addAutoShape(ShapeType.Rectangle, 150, 150, 150, 50);
// Приводит форму к типу AutoShape
IAutoShape pptxAutoShape = (IAutoShape)shape;
// Получает свойство ITextFrame, связанное с AutoShape
pptxAutoShape.addTextFrame("");
ITextFrame textFrame = pptxAutoShape.getTextFrame();
// Добавляет текст во фрейм
textFrame.getParagraphs().get_Item(0).getPortions().get_Item(0).setText("Aspose.Slides");
// Устанавливает гиперссылку для текста части
IHyperlinkManager hyperlinkManager = textFrame.getParagraphs().get_Item(0).getPortions().get_Item(0).
getPortionFormat().getHyperlinkManager();
hyperlinkManager.setExternalHyperlinkClick("http://www.aspose.com");
// Сохраняет презентацию PPTX
pres.save("hLink_out.pptx", SaveFormat.Pptx);
} finally {
if (pres != null) pres.dispose();
}
FAQ
В чем разница между текстовым полем и текстовым заполняющим элементом при работе с шаблонными слайдами?
Заполняющий элемент наследует стиль/позицию от шаблона и может быть переопределён на макетах, тогда как обычное текстовое поле — независимый объект на конкретном слайде и не меняется при переключении макетов.
Как выполнить массовую замену текста во всей презентации, не затрагивая текст внутри диаграмм, таблиц и SmartArt?
Ограничьте итерацию автофигурами, имеющими текстовые фреймы, и исключите встроенные объекты (диаграммы, таблицы, SmartArt), проходя их коллекции отдельно или пропуская эти типы объектов.