Gérer 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 et ensuite mettre du texte à l’intérieur de cette zone de texte. Aspose.Slides for PHP via Java fournit l’interface IAutoShape qui vous permet d’ajouter une forme contenant du texte.
Info
Aspose.Slides fournit également l’interface IShape qui vous 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 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’à ce moment-là que vous pourrez travailler avec TextFrame, qui est une propriété sous IAutoShape
. Consultez la section Mettre à jour le texte sur cette page.
Créer une zone de texte sur une 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 commeRectangle
à une position spécifiée sur la diapositive et obtenez la référence pour 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 PHP—une implémentation des étapes ci-dessus—vous montre comment ajouter du texte à une diapositive :
# Instancie la présentation
$pres = new Presentation();
try {
# Obtient la première diapositive dans la présentation
$sld = $pres->getSlides()->get_Item(0);
# Ajoute une AutoShape avec le type défini comme Rectangle
$ashp = $sld->getShapes()->addAutoShape(ShapeType::Rectangle, 150, 75, 150, 50);
# Ajoute un TextFrame au Rectangle
$ashp->addTextFrame(" ");
# Accède au cadre de texte
$txtFrame = $ashp->getTextFrame();
# Crée l'objet Paragraph pour le cadre de texte
$para = $txtFrame->getParagraphs()->get_Item(0);
# Crée un objet Portion pour le paragraphe
$portion = $para->getPortions()->get_Item(0);
# Définit le texte
$portion->setText("Aspose TextBox");
# Sauvegarde la présentation sur le disque
$pres->save("TextBox_out.pptx", SaveFormat::Pptx);
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
Vérifier la forme de la zone de texte
Aspose.Slides fournit la propriété isTextBox() (de la classe AutoShape) pour vous permettre d’examiner les formes et de trouver des zones de texte.
Ce code PHP vous montre comment vérifier si une forme a été créée en tant que zone de texte :
class ShapeCallback {
function invoke($shape, $slide, $index){
if (java_instanceof($shape, new JavaClass("com.aspose.slides.AutoShape")))
$autoShape = $shape;
echo(java_is_true($autoShape->isTextBox()) ? "la forme est une zone de texte" : "la forme est un texte, pas une zone");
}
}
$pres = new Presentation("pres.pptx");
try {
$forEachShapeCallback = java_closure(new ShapeCallback(), null, java("com.aspose.slides.ForEachSlideCallback"));
ForEach::shape($pres, $forEachShapeCallback);
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
Ajouter une colonne dans la zone de texte
Aspose.Slides fournit les propriétés ColumnCount et 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 l’espacement entre les colonnes en points.
Ce code démontre l’opération décrite :
$pres = new Presentation();
try {
# Obtient la première diapositive dans la présentation
$slide = $pres->getSlides()->get_Item(0);
# Ajoute une AutoShape avec le type défini comme Rectangle
$aShape = $slide->getShapes()->addAutoShape(ShapeType::Rectangle, 100, 100, 300, 300);
# Ajoute un TextFrame au Rectangle
$aShape->addTextFrame("Toutes ces colonnes sont limitées à rester dans un seul conteneur de texte -- " . "vous pouvez ajouter ou supprimer du texte et le texte nouveau ou restant s'ajuste automatiquement " . "pour s'écouler dans le conteneur. Vous ne pouvez pas faire couler du texte d'un conteneur " . "à un autre cependant -- nous vous avons dit que les options de colonnes de PowerPoint pour le texte sont limitées !");
# Obtient le format du texte du TextFrame
$format = $aShape->getTextFrame()->getTextFrameFormat();
# Spécifie le nombre de colonnes dans le TextFrame
$format->setColumnCount(3);
# Spécifie l'espacement entre les colonnes
$format->setColumnSpacing(10);
# Sauvegarde la présentation
$pres->save("ColumnCount.pptx", SaveFormat::Pptx);
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
Ajouter une colonne dans le cadre de texte
Aspose.Slides for PHP via Java fournit la propriété ColumnCount (de l’interface ITextFrameFormat) qui vous permet d’ajouter des colonnes dans les cadres de texte. Grâce à cette propriété, vous pouvez spécifier votre nombre préféré de colonnes dans un cadre de texte.
Ce code PHP vous montre comment ajouter une colonne à l’intérieur d’un cadre de texte :
$outPptxFileName = "ColumnsTest.pptx";
$pres = new Presentation();
try {
$shape1 = $pres->getSlides()->get_Item(0)->getShapes()->addAutoShape(ShapeType::Rectangle, 100, 100, 300, 300);
$format = $shape1->getTextFrame()->getTextFrameFormat();
$format->setColumnCount(2);
$shape1->getTextFrame()->setText("Toutes ces colonnes sont forcées de rester dans un seul conteneur de texte -- " . "vous pouvez ajouter ou supprimer du texte - et le nouveau texte ou le texte restant s'ajuste automatiquement " . "pour rester dans le conteneur. Vous ne pouvez pas faire déborder le texte d'un conteneur " . "à un autre, cependant -- car les options de colonnes de PowerPoint pour le texte sont limitées !");
$pres->save($outPptxFileName, SaveFormat::Pptx);
$test = new Presentation($outPptxFileName);
try {
$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 (!java_is_null($test)) {
$test->dispose();
}
}
$format->setColumnSpacing(20);
$pres->save($outPptxFileName, SaveFormat::Pptx);
$test1 = new Presentation($outPptxFileName);
try {
$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 (!java_is_null($test1)) {
$test1->dispose();
}
}
$format->setColumnCount(3);
$format->setColumnSpacing(15);
$pres->save($outPptxFileName, SaveFormat::Pptx);
$test2 = new Presentation($outPptxFileName);
try {
$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 (!java_is_null($test2)) {
$test2->dispose();
}
}
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
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 PHP démontre une opération où tous les textes d’une présentation sont mis à jour ou changés :
$pres = new Presentation("text.pptx");
try {
foreach($pres->getSlides() as $slide) {
foreach($slide->getShapes() as $shape) {
# Vérifie si la forme prend en charge le cadre de texte (IAutoShape).
if (java_instanceof($shape, new JavaClass("com.aspose.slides.AutoShape"))) {
$autoShape = $shape;
# Itère à travers les paragraphes dans le cadre de texte
foreach($autoShape->getTextFrame()->getParagraphs() as $paragraph) {
# Itère à travers chaque portion dans le paragraphe
foreach($paragraph->getPortions() as $portion) {
$portion->setText($portion->getText()->replace("years", "months"));// Change le texte
$portion->getPortionFormat()->setFontBold(NullableBool::True);// Change le format
}
}
}
}
}
# Sauvegarde la présentation modifiée
$pres->save("text-changed.pptx", SaveFormat::Pptx);
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
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 dirigé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 propriété HyperlinkClick associée à votre portion préférée duTextFrame
. - Enfin, écrivez le fichier PPTX via l’objet
Presentation
.
Ce code PHP—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
$pres = new Presentation();
try {
# Obtient la première diapositive dans la présentation
$slide = $pres->getSlides()->get_Item(0);
# Ajoute un objet AutoShape avec le type défini comme Rectangle
$shape = $slide->getShapes()->addAutoShape(ShapeType::Rectangle, 150, 150, 150, 50);
# Cast la forme en AutoShape
$pptxAutoShape = $shape;
# Accède à la propriété ITextFrame associée à l'AutoShape
$pptxAutoShape->addTextFrame("");
$textFrame = $pptxAutoShape->getTextFrame();
# Ajoute du texte au cadre
$textFrame->getParagraphs()->get_Item(0)->getPortions()->get_Item(0)->setText("Aspose.Slides");
# Définit le lien hypertexte pour le texte de la portion
$hyperlinkManager = $textFrame->getParagraphs()->get_Item(0)->getPortions()->get_Item(0)->getPortionFormat()->getHyperlinkManager();
$hyperlinkManager->setExternalHyperlinkClick("http://www.aspose.com");
# Sauvegarde la présentation PPTX
$pres->save("hLink_out.pptx", SaveFormat::Pptx);
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}