Управление текстовым полем
Тексты на слайдах обычно содержатся в текстовых полях или фигурах. Поэтому, чтобы добавить текст на слайд, вам нужно добавить текстовое поле и затем поместить текст внутрь текстового поля. Aspose.Slides для C++ предоставляет интерфейс IAutoShape, который позволяет добавлять фигуры, содержащие текст.
Информация
Aspose.Slides также предоставляет интерфейс IShape, который позволяет добавлять фигуры на слайды. Однако не все фигуры, добавленные через интерфейсIShape
, могут содержать текст. Но фигуры, добавленные через интерфейс IAutoShape, могут содержать текст.
Примечание
Поэтому, когда вы работаете с фигурой, к которой вы хотите добавить текст, вам может понадобиться проверить и подтвердить, что она была приведена к интерфейсуIAutoShape
. Только тогда вы сможете работать с TextFrame, который является свойством интерфейса IAutoShape
. Смотрите раздел Обновление текста на этой странице.
Создать текстовое поле на слайде
Чтобы создать текстовое поле на слайде, выполните следующие шаги:
- Создайте экземпляр класса Presentation.
- Получите ссылку на первый слайд в только что созданной презентации.
- Добавьте объект IAutoShape с заданным ShapeType как
Rectangle
в указанной позиции на слайде и получите ссылку на только что добавленный объектIAutoShape
. - Добавьте свойство
TextFrame
к объектуIAutoShape
, которое будет содержать текст. В приведенном ниже примере мы добавили следующий текст: Aspose TextBox - Наконец, сохраните файл PPTX через объект
Presentation
.
Этот код на C++— реализация описанных шагов—показывает, как добавить текст на слайд:
// Создает экземпляр Presentation
auto pres = System::MakeObject<Presentation>();
// Получает первый слайд в презентации
auto sld = pres->get_Slides()->idx_get(0);
// Добавляет AutoShape с типом, установленным как Rectangle
auto ashp = sld->get_Shapes()->AddAutoShape(ShapeType::Rectangle, 150.0f, 75.0f, 150.0f, 50.0f);
// Добавляет TextFrame к Rectangle
ashp->AddTextFrame(u" ");
// Получает текстовый фрейм
auto txtFrame = ashp->get_TextFrame();
// Создает объект Paragraph для текстового фрейма
auto para = txtFrame->get_Paragraphs()->idx_get(0);
// Создает объект Portion для абзаца
auto portion = para->get_Portions()->idx_get(0);
// Устанавливает текст
portion->set_Text(u"Aspose TextBox");
// Сохраняет презентацию на диск
pres->Save(u"TextBox_out.pptx", SaveFormat::Pptx);
Проверка фигуры текстового поля
Aspose.Slides предоставляет метод get_IsTextBox() (из класса AutoShape), который позволяет вам исследовать фигуры и находить текстовые поля.
Этот код на C++ показывает, как проверить, была ли фигура создана как текстовое поле:
auto pres = System::MakeObject<Presentation>(u"pres.pptx");
for (auto&& slide : pres->get_Slides())
{
for (auto&& shape : slide->get_Shapes())
{
auto autoShape = System::DynamicCast_noexcept<Aspose::Slides::AutoShape>(shape);
if (autoShape != nullptr)
{
System::Console::WriteLine(autoShape->get_IsTextBox() ? System::String(u"фигура является текстовым полем") : System::String(u"фигура не является текстовым полем"));
}
}
}
Добавление колонок в текстовое поле
Aspose.Slides предоставляет методы set_ColumnCount и set_ColumnSpacing (из интерфейса ITextFrameFormat и класса TextFrameFormat), которые позволяют добавлять колонки в текстовые поля. Вы можете указать количество колонок в текстовом поле и установить расстояние в пунктах между колонками.
Этот код на C++ демонстрирует описанную операцию:
auto presentation = System::MakeObject<Presentation>();
// Получает первый слайд в презентации
auto slide = presentation->get_Slides()->idx_get(0);
// Добавляет AutoShape с типом, установленным как Rectangle
auto aShape = slide->get_Shapes()->AddAutoShape(ShapeType::Rectangle, 100.0f, 100.0f, 300.0f, 300.0f);
// Добавляет TextFrame к Rectangle
aShape->AddTextFrame(String(u"Все эти колонки ограничены быть внутри одного текстового контейнера -- ")
+ u"вы можете добавлять или удалять текст, и новый или оставшийся текст автоматически подстраивается "
+ u"подходит к контейнеру. Текст не может переходить из одного контейнера "
+ u"в другой, однако -- мы говорим вам, что опции колонок для текста в PowerPoint ограничены!");
// Получает текстовый формат TextFrame
auto format = aShape->get_TextFrame()->get_TextFrameFormat();
// Указывает количество колонок в TextFrame
format->set_ColumnCount(3);
// Указывает расстояние между колонками
format->set_ColumnSpacing(10);
// Сохраняет презентацию
presentation->Save(u"ColumnCount.pptx", SaveFormat::Pptx);
Добавление колонок в текстовый фрейм
Aspose.Slides для C++ предоставляет метод set_ColumnCount (из интерфейса ITextFrameFormat), который позволяет добавлять колонки в текстовые фреймы. С помощью этого метода вы можете указать предпочтительное количество колонок в текстовом фрейме.
Этот код на C++ показывает, как добавить колонку внутри текстового фрейма:
String outPptxFileName = u"ColumnsTest.pptx";
auto pres = System::MakeObject<Presentation>();
auto shape = pres->get_Slides()->idx_get(0)->get_Shapes()->AddAutoShape(ShapeType::Rectangle, 100.0f, 100.0f, 300.0f, 300.0f);
auto format = System::ExplicitCast<TextFrameFormat>(shape->get_TextFrame()->get_TextFrameFormat());
format->set_ColumnCount(2);
shape->get_TextFrame()->set_Text(String(u"Все эти колонки вынуждены оставаться внутри одного текстового контейнера -- ")
+ u"вы можете добавлять или удалять текст - и новый или оставшийся текст автоматически подстраивается "
+ u"подходит к контейнеру. Текст не может выливаться из одного контейнера "
+ u"в другой, однако -- потому что опции колонок PowerPoint для текста ограничены!");
pres->Save(outPptxFileName, SaveFormat::Pptx);
{
auto test = System::MakeObject<Presentation>(outPptxFileName);
auto format1 = System::ExplicitCast<AutoShape>(test->get_Slides()->idx_get(0)->get_Shapes()->idx_get(0))->get_TextFrame()->get_TextFrameFormat();
CODEPORTING_DEBUG_ASSERT1(2 == format1->get_ColumnCount());
CODEPORTING_DEBUG_ASSERT1(std::numeric_limits<double>::quiet_NaN() == format1->get_ColumnSpacing());
}
format->set_ColumnSpacing(20);
pres->Save(outPptxFileName, SaveFormat::Pptx);
{
auto test = System::MakeObject<Presentation>(outPptxFileName);
auto format2 = System::ExplicitCast<AutoShape>(test->get_Slides()->idx_get(0)->get_Shapes()->idx_get(0))->get_TextFrame()->get_TextFrameFormat();
CODEPORTING_DEBUG_ASSERT1(2 == format2->get_ColumnCount());
CODEPORTING_DEBUG_ASSERT1(20 == format2->get_ColumnSpacing());
}
format->set_ColumnCount(3);
format->set_ColumnSpacing(15);
pres->Save(outPptxFileName, SaveFormat::Pptx);
{
auto test = System::MakeObject<Presentation>(outPptxFileName);
auto format3 = System::ExplicitCast<AutoShape>(test->get_Slides()->idx_get(0)->get_Shapes()->idx_get(0))->get_TextFrame()->get_TextFrameFormat();
CODEPORTING_DEBUG_ASSERT1(3 == format3->get_ColumnCount());
CODEPORTING_DEBUG_ASSERT1(15 == format3->get_ColumnSpacing());
}
Обновить текст
Aspose.Slides позволяет изменять или обновлять текст, содержащийся в текстовом поле или все тексты, содержащиеся в презентации.
Этот код на C++ демонстрирует операцию, при которой все тексты в презентации обновляются или изменяются:
auto pres = System::MakeObject<Presentation>(u"text.pptx");
for (const auto& slide : pres->get_Slides())
{
for (const auto& shape : slide->get_Shapes())
{
if (ObjectExt::Is<IAutoShape>(shape))
{
auto autoShape = System::AsCast<IAutoShape>(shape);
for (const auto& paragraph : autoShape->get_TextFrame()->get_Paragraphs())
{
for (const auto& portion : paragraph->get_Portions())
{
// Изменяет текст
portion->set_Text(portion->get_Text().Replace(u"years", u"months"));
// Изменяет форматирование
portion->get_PortionFormat()->set_FontBold(NullableBool::True);
}
}
}
}
}
// Сохраняет измененную презентацию
pres->Save(u"text-changed.pptx", SaveFormat::Pptx);
Добавить текстовое поле с гиперссылкой
Вы можете вставить ссылку внутри текстового поля. Когда текстовое поле будет нажато, пользователи будут направлены на открытие ссылки.
Чтобы добавить текстовое поле, содержащее ссылку, выполните следующие шаги:
- Создайте экземпляр класса
Presentation
. - Получите ссылку на первый слайд в только что созданной презентации.
- Добавьте объект
AutoShape
с заданнымShapeType
какRectangle
в указанной позиции на слайде и получите ссылку на только что добавленный объект AutoShape. - Добавьте
TextFrame
к объектуAutoShape
, который содержит Aspose TextBox в качестве текста по умолчанию. - Создайте экземпляр класса
IHyperlinkManager
. - Назначьте объект
IHyperlinkManager
методу set_HyperlinkClick, связанному с предпочтительной частьюTextFrame
. - Наконец, сохраните файл PPTX через объект
Presentation
.
Этот код на C++— реализация описанных шагов—показывает, как добавить текстовое поле с гиперссылкой на слайд:
// Создает экземпляр класса Presentation, который представляет PPTX
auto presentation = System::MakeObject<Presentation>();
// Получает первый слайд в презентации
auto slide = presentation->get_Slides()->idx_get(0);
// Добавляет объект AutoShape с типом, установленным как Rectangle
auto shape = slide->get_Shapes()->AddAutoShape(ShapeType::Rectangle, 150.0f, 150.0f, 150.0f, 50.0f);
// Приводит фигуру к AutoShape
auto autoShape = System::ExplicitCast<IAutoShape>(shape);
// Получает свойство ITextFrame, связанное с AutoShape
autoShape->AddTextFrame(u"");
auto textFrame = autoShape->get_TextFrame();
// Добавляет текст в фрейм
textFrame->get_Paragraphs()->idx_get(0)->get_Portions()->idx_get(0)->set_Text(u"Aspose.Slides");
// Устанавливает гиперссылку для текста части
auto linkManager = textFrame->get_Paragraphs()->idx_get(0)->get_Portions()->idx_get(0)->get_PortionFormat()->get_HyperlinkManager();
linkManager->SetExternalHyperlinkClick(u"http://www.aspose.com");
// Сохраняет PPTX-презентацию
presentation->Save(u"hLinkPPTX_out.pptx", SaveFormat::Pptx);