Gérer les TextBox
Les textes sur les diapositives existent généralement dans des zones de texte ou des formes. Par conséquent, pour ajouter un texte à une diapositive, vous devez ajouter une zone de texte puis y insérer du texte. Aspose.Slides pour C++ fournit l’interface IAutoShape qui vous permet d’ajouter une forme contenant du texte.
Info
Aspose.Slides fournit également l’interface IShape qui permet d’ajouter des formes aux diapositives. Cependant, toutes les formes ajoutées via l’interfaceIShape
ne peuvent pas contenir de texte. Mais les formes ajoutées via l’interface IAutoShape peuvent contenir du texte.
Note
Par conséquent, lorsque vous traitez avec une forme à laquelle vous souhaitez ajouter du texte, vous voudrez peut-être vérifier et confirmer qu’elle a été castée via l’interfaceIAutoShape
. Ce n’est qu’alors que vous pourrez travailler avec TextFrame, qui est une propriété de IAutoShape
. Voir la section Mettre à jour le texte sur cette page.
Créer une zone de texte sur la diapositive
Pour créer une zone de texte sur une diapositive, suivez ces étapes :
- Créez une instance de la classe Presentation.
- Obtenez une référence pour la première diapositive dans la présentation nouvellement créée.
- Ajoutez un objet IAutoShape avec ShapeType défini comme
Rectangle
à une position spécifiée sur la diapositive et obtenez la référence de l’objetIAutoShape
nouvellement ajouté. - Ajoutez une propriété
TextFrame
à l’objetIAutoShape
qui contiendra un texte. Dans l’exemple ci-dessous, nous avons ajouté ce texte : Aspose TextBox - Enfin, écrivez le fichier PPTX via l’objet
Presentation
.
Ce code C++—une implémentation des étapes ci-dessus—vous montre comment ajouter du texte à une diapositive :
// Instancie Presentation
auto pres = System::MakeObject<Presentation>();
// Obtient la première diapositive dans la présentation
auto sld = pres->get_Slides()->idx_get(0);
// Ajoute une AutoShape avec le type défini comme Rectangle
auto ashp = sld->get_Shapes()->AddAutoShape(ShapeType::Rectangle, 150.0f, 75.0f, 150.0f, 50.0f);
// Ajoute TextFrame au Rectangle
ashp->AddTextFrame(u" ");
// Accède au cadre texte
auto txtFrame = ashp->get_TextFrame();
// Crée l'objet Paragraphe pour le cadre de texte
auto para = txtFrame->get_Paragraphs()->idx_get(0);
// Crée un objet Portion pour le paragraphe
auto portion = para->get_Portions()->idx_get(0);
// Définit le texte
portion->set_Text(u"Aspose TextBox");
// Enregistre la présentation sur le disque
pres->Save(u"TextBox_out.pptx", SaveFormat::Pptx);
Vérifier si une forme est une zone de texte
Aspose.Slides fournit la méthode get_IsTextBox() (de la classe AutoShape) pour vous permettre d’examiner les formes et de trouver des zones de texte.
Ce code C++ vous montre comment vérifier si une forme a été créée comme une zone de texte :
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"la forme est une zone de texte") : System::String(u"la forme n'est pas une zone de texte"));
}
}
}
Ajouter une colonne dans une zone de texte
Aspose.Slides fournit les méthodes set_ColumnCount et set_ColumnSpacing (de l’interface ITextFrameFormat et de la classe TextFrameFormat) qui vous permettent d’ajouter des colonnes aux zones de texte. Vous pouvez spécifier le nombre de colonnes dans une zone de texte et définir la quantité d’espacement en points entre les colonnes.
Ce code en C++ démontre l’opération décrite :
auto presentation = System::MakeObject<Presentation>();
// Obtient la première diapositive dans la présentation
auto slide = presentation->get_Slides()->idx_get(0);
// Ajoute une AutoShape avec le type défini comme Rectangle
auto aShape = slide->get_Shapes()->AddAutoShape(ShapeType::Rectangle, 100.0f, 100.0f, 300.0f, 300.0f);
// Ajoute TextFrame au Rectangle
aShape->AddTextFrame(String(u"Tous ces colonnes sont limitées à être dans un seul conteneur de texte -- ")
+ u"vous pouvez ajouter ou supprimer du texte et le nouveau texte ou le texte restant s'ajuste automatiquement "
+ u"pour s'écouler dans le conteneur. Vous ne pouvez pas faire s'écouler le texte d'un conteneur "
+ u"à un autre cependant -- nous vous avons dit que les options de colonnes de PowerPoint pour le texte sont limitées !");
// Obtient le format texte de TextFrame
auto format = aShape->get_TextFrame()->get_TextFrameFormat();
// Spécifie le nombre de colonnes dans TextFrame
format->set_ColumnCount(3);
// Spécifie l'espacement entre les colonnes
format->set_ColumnSpacing(10);
// Enregistre la présentation
presentation->Save(u"ColumnCount.pptx", SaveFormat::Pptx);
Ajouter une colonne dans un cadre de texte
Aspose.Slides pour C++ fournit la méthode set_ColumnCount (de l’interface ITextFrameFormat) qui vous permet d’ajouter des colonnes dans des cadres de texte. Grâce à cette méthode, vous pouvez spécifier votre nombre de colonnes préféré dans un cadre de texte.
Ce code C++ vous montre comment ajouter une colonne à l’intérieur d’un cadre de texte :
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"Tous ces colonnes sont forcées de rester à l'intérieur d'un seul conteneur de texte -- ")
+ u"vous pouvez ajouter ou supprimer du texte - et le nouveau texte ou le texte restant s'ajuste automatiquement "
+ u"pour rester à l'intérieur du conteneur. Vous ne pouvez pas avoir du texte qui déborde d'un conteneur "
+ u"à un autre, cependant -- car les options de colonnes de PowerPoint pour le texte sont limitées !");
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());
}
Mettre à jour le texte
Aspose.Slides vous permet de changer ou de mettre à jour le texte contenu dans une zone de texte ou tous les textes contenus dans une présentation.
Ce code C++ démontre une opération où tous les textes dans une présentation sont mis à jour ou changés :
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())
{
//Change le texte
portion->set_Text(portion->get_Text().Replace(u"years", u"months"));
//Change le formatage
portion->get_PortionFormat()->set_FontBold(NullableBool::True);
}
}
}
}
}
//Enregistre la présentation modifiée
pres->Save(u"text-changed.pptx", SaveFormat::Pptx);
Ajouter une zone de texte avec un lien hypertexte
Vous pouvez insérer un lien à l’intérieur d’une zone de texte. Lorsque la zone de texte est cliquée, les utilisateurs sont redirigés pour ouvrir le lien.
Pour ajouter une zone de texte contenant un lien, suivez ces étapes :
- Créez une instance de la classe
Presentation
. - Obtenez une référence pour la première diapositive dans la présentation nouvellement créée.
- Ajoutez un objet
AutoShape
avecShapeType
défini commeRectangle
à une position spécifiée sur la diapositive et obtenez une référence de l’objet AutoShape nouvellement ajouté. - Ajoutez un
TextFrame
à l’objetAutoShape
qui contient Aspose TextBox comme texte par défaut. - Instanciez la classe
IHyperlinkManager
. - Assignez l’objet
IHyperlinkManager
à la méthode set_HyperlinkClick associée à votre portion préférée duTextFrame
. - Enfin, écrivez le fichier PPTX via l’objet
Presentation
.
Ce code C++—une implémentation des étapes ci-dessus—vous montre comment ajouter une zone de texte avec un lien hypertexte à une diapositive :
// Instancie une classe Presentation qui représente un PPTX
auto presentation = System::MakeObject<Presentation>();
// Obtient la première diapositive dans la présentation
auto slide = presentation->get_Slides()->idx_get(0);
// Ajoute un objet AutoShape avec le type défini comme Rectangle
auto shape = slide->get_Shapes()->AddAutoShape(ShapeType::Rectangle, 150.0f, 150.0f, 150.0f, 50.0f);
// Cast la forme en AutoShape
auto autoShape = System::ExplicitCast<IAutoShape>(shape);
// Accède à la propriété ITextFrame associée à l'AutoShape
autoShape->AddTextFrame(u"");
auto textFrame = autoShape->get_TextFrame();
// Ajoute du texte au cadre
textFrame->get_Paragraphs()->idx_get(0)->get_Portions()->idx_get(0)->set_Text(u"Aspose.Slides");
// Définit le lien hypertexte pour le texte de la portion
auto linkManager = textFrame->get_Paragraphs()->idx_get(0)->get_Portions()->idx_get(0)->get_PortionFormat()->get_HyperlinkManager();
linkManager->SetExternalHyperlinkClick(u"http://www.aspose.com");
// Enregistre la présentation PPTX
presentation->Save(u"hLinkPPTX_out.pptx", SaveFormat::Pptx);