Formater le texte d'une présentation en PHP
Aperçu
Cet article montre comment mettre en forme du texte dans les présentations PowerPoint et OpenDocument à l’aide d’Aspose.Slides pour PHP via Java. Il couvre les couleurs d’arrière-plan, la transparence, l’espacement des caractères, les propriétés de police, la rotation, l’espacement des paragraphes, le comportement d’ajustement automatique, l’ancrage du texte, les taquets de tabulation et les paramètres de langue.
Dans les exemples ci‑dessous, nous utiliserons un fichier nommé “sample.pptx”, qui contient une seule zone de texte sur la première diapositive avec le texte suivant :

Pour rechercher et mettre en surbrillance du texte littéral ou des correspondances d’expressions régulières, voir Recherche et remplacement de texte.
Définir la couleur d’arrière-plan du texte
Utilisez ParagraphFormat::getDefaultPortionFormat pour définir la couleur de surbrillance par défaut d’un paragraphe, ou utilisez BasePortionFormat::getHighlightColor pour des portions de texte individuelles.
L’exemple de code suivant montre comment définir la couleur d’arrière-plan pour le paragraphe entier :
$presentation = new Presentation("sample.pptx");
try {
$slide = $presentation->getSlides()->get_Item(0);
$autoShape = $slide->getShapes()->get_Item(0);
$paragraph = $autoShape->getTextFrame()->getParagraphs()->get_Item(0);
$highlightColor = java("java.awt.Color")->LIGHT_GRAY;
// Définir la couleur de surbrillance pour le paragraphe entier.
$paragraph->getParagraphFormat()->getDefaultPortionFormat()->getHighlightColor()->setColor($highlightColor);
$presentation->save("gray_paragraph.pptx", SaveFormat::Pptx);
} finally {
$presentation->dispose();
}
Le résultat :

L’exemple de code ci‑dessous montre comment définir la couleur d’arrière-plan pour les portions de texte en gras :
$presentation = new Presentation("sample.pptx");
try {
$slide = $presentation->getSlides()->get_Item(0);
$autoShape = $slide->getShapes()->get_Item(0);
$paragraph = $autoShape->getTextFrame()->getParagraphs()->get_Item(0);
$highlightColor = java("java.awt.Color")->LIGHT_GRAY;
$portionCount = java_values($paragraph->getPortions()->getCount());
for ($portionIndex = 0; $portionIndex < $portionCount; $portionIndex++) {
$portion = $paragraph->getPortions()->get_Item($portionIndex);
if (java_values($portion->getPortionFormat()->getEffective()->getFontBold()) === NullableBool::True) {
// Définir la couleur de surbrillance pour la portion de texte.
$portion->getPortionFormat()->getHighlightColor()->setColor($highlightColor);
}
}
$presentation->save("gray_text_portions.pptx", SaveFormat::Pptx);
} finally {
$presentation->dispose();
}
Le résultat :

Aligner les paragraphes de texte
Utilisez ParagraphFormat::setAlignment pour définir l’alignement du paragraphe dans une zone de texte. La valeur peut être centrée, alignée à gauche, alignée à droite, justifiée, etc.
L’exemple de code suivant montre comment aligner le paragraphe au centre :
$presentation = new Presentation("sample.pptx");
try {
$slide = $presentation->getSlides()->get_Item(0);
$autoShape = $slide->getShapes()->get_Item(0);
$paragraph = $autoShape->getTextFrame()->getParagraphs()->get_Item(0);
// Définir l'alignement du paragraphe au centre.
$paragraph->getParagraphFormat()->setAlignment(TextAlignment::Center);
$presentation->save("aligned_paragraph.pptx", SaveFormat::Pptx);
} finally {
$presentation->dispose();
}
Le résultat :

Définir la transparence du texte
La transparence du texte est contrôlée via le composant alpha de la couleur assignée à BasePortionFormat::getFillFormat. Dans les exemples ci‑dessous, alpha = 50 est une valeur de canal alpha ARGB sur l’échelle 0‑255, et non un pourcentage de transparence.
L’exemple de code ci‑dessous montre comment appliquer la transparence au paragraphe entier :
$alpha = 50;
$presentation = new Presentation("sample.pptx");
try {
$slide = $presentation->getSlides()->get_Item(0);
$autoShape = $slide->getShapes()->get_Item(0);
$paragraph = $autoShape->getTextFrame()->getParagraphs()->get_Item(0);
$fillFormat = $paragraph->getParagraphFormat()->getDefaultPortionFormat()->getFillFormat();
// Définir la couleur de remplissage du texte à une couleur transparente.
$fillFormat->setFillType(FillType::Solid);
$transparentColor = new Java("java.awt.Color", 0, 0, 0, $alpha);
$fillFormat->getSolidFillColor()->setColor($transparentColor);
$presentation->save("transparent_paragraph.pptx", SaveFormat::Pptx);
} finally {
$presentation->dispose();
}
Le résultat :

L’exemple de code suivant montre comment appliquer la transparence aux portions de texte en gras :
$alpha = 50;
$presentation = new Presentation("sample.pptx");
try {
$slide = $presentation->getSlides()->get_Item(0);
$autoShape = $slide->getShapes()->get_Item(0);
$paragraph = $autoShape->getTextFrame()->getParagraphs()->get_Item(0);
$transparentColor = new Java("java.awt.Color", 0, 0, 0, $alpha);
$portionCount = java_values($paragraph->getPortions()->getCount());
for ($portionIndex = 0; $portionIndex < $portionCount; $portionIndex++) {
$portion = $paragraph->getPortions()->get_Item($portionIndex);
if (java_values($portion->getPortionFormat()->getEffective()->getFontBold()) === NullableBool::True) {
// Définir la transparence de la portion de texte.
$fillFormat = $portion->getPortionFormat()->getFillFormat();
$fillFormat->setFillType(FillType::Solid);
$fillFormat->getSolidFillColor()->setColor($transparentColor);
}
}
$presentation->save("transparent_text_portions.pptx", SaveFormat::Pptx);
} finally {
$presentation->dispose();
}
Le résultat :

Définir l’espacement des caractères pour le texte
Utilisez BasePortionFormat::setSpacing pour augmenter ou réduire l’espacement entre les caractères dans une zone de texte.
Le code PHP suivant montre comment augmenter l’espacement des caractères dans le paragraphe entier :
$presentation = new Presentation("sample.pptx");
try {
$slide = $presentation->getSlides()->get_Item(0);
$autoShape = $slide->getShapes()->get_Item(0);
$paragraph = $autoShape->getTextFrame()->getParagraphs()->get_Item(0);
// Remarque : utilisez des valeurs négatives pour comprimer l'espacement des caractères.
$paragraph->getParagraphFormat()->getDefaultPortionFormat()->setSpacing(3); // Agrandir l'espacement des caractères.
$presentation->save("character_spacing_in_paragraph.pptx", SaveFormat::Pptx);
} finally {
$presentation->dispose();
}
Le résultat :

L’exemple de code ci‑dessous montre comment augmenter l’espacement des caractères dans les portions de texte en gras :
$presentation = new Presentation("sample.pptx");
try {
$slide = $presentation->getSlides()->get_Item(0);
$autoShape = $slide->getShapes()->get_Item(0);
$paragraph = $autoShape->getTextFrame()->getParagraphs()->get_Item(0);
$portionCount = java_values($paragraph->getPortions()->getCount());
for ($portionIndex = 0; $portionIndex < $portionCount; $portionIndex++) {
$portion = $paragraph->getPortions()->get_Item($portionIndex);
if (java_values($portion->getPortionFormat()->getEffective()->getFontBold()) === NullableBool::True) {
// Remarque : utilisez des valeurs négatives pour comprimer l'espacement des caractères.
$portion->getPortionFormat()->setSpacing(3); // Agrandir l'espacement des caractères.
}
}
$presentation->save("character_spacing_in_text_portions.pptx", SaveFormat::Pptx);
} finally {
$presentation->dispose();
}
Le résultat :

Désactiver le crénage pour des polices spécifiques
Dans certains cas, le texte rendu par Aspose.Slides peut sembler légèrement plus serré que le même texte affiché dans PowerPoint. Cela peut se produire parce que PowerPoint peut ignorer les données de crénage pour certaines polices, même lorsque la police contient des informations de crénage valides et que le crénage est activé dans les paramètres de PowerPoint.
Pour rendre la sortie rendue plus proche de PowerPoint dans ces cas, vous pouvez désactiver le crénage pour les portions de texte qui utilisent la police concernée. Définissez BasePortionFormat::setKerningMinimalSize à une valeur nettement supérieure à la taille réelle de la police :
$presentation = new Presentation("presentation.pptx");
try {
$slide = $presentation->getSlides()->get_Item(0);
$autoShape = $slide->getShapes()->get_Item(0);
$targetFont = "Roboto";
$paragraphCount = java_values($autoShape->getTextFrame()->getParagraphs()->getCount());
for ($paragraphIndex = 0; $paragraphIndex < $paragraphCount; $paragraphIndex++) {
$paragraph = $autoShape->getTextFrame()->getParagraphs()->get_Item($paragraphIndex);
$portionCount = java_values($paragraph->getPortions()->getCount());
for ($portionIndex = 0; $portionIndex < $portionCount; $portionIndex++) {
$portion = $paragraph->getPortions()->get_Item($portionIndex);
$portionFormat = $portion->getPortionFormat();
$latinFont = $portionFormat->getLatinFont();
$eastAsianFont = $portionFormat->getEastAsianFont();
$complexScriptFont = $portionFormat->getComplexScriptFont();
if ((!java_is_null($latinFont) && $latinFont->getFontName() == $targetFont) ||
(!java_is_null($eastAsianFont) && $eastAsianFont->getFontName() == $targetFont) ||
(!java_is_null($complexScriptFont) && $complexScriptFont->getFontName() == $targetFont)) {
$portionFormat->setKerningMinimalSize(100);
}
}
}
$presentation->save("output.pptx", SaveFormat::Pptx);
} finally {
$presentation->dispose();
}
Ce paramètre empêche l’application du crénage aux portions de texte correspondantes et peut aider à aligner le rendu d’Aspose.Slides avec la sortie visuelle de PowerPoint pour les polices affectées par ce comportement spécifique à PowerPoint.
Gérer les propriétés de police du texte
Les propriétés de police peuvent être définies au niveau du paragraphe via ParagraphFormat::getDefaultPortionFormat ou sur des portions individuelles via PortionFormat.
Le code suivant définit la police et le style du texte pour l’ensemble du paragraphe : il applique la taille de police, le gras, l’italique, le soulignement pointillé et la police Times New Roman à toutes les portions du paragraphe.
$presentation = new Presentation("sample.pptx");
try {
$slide = $presentation->getSlides()->get_Item(0);
$autoShape = $slide->getShapes()->get_Item(0);
$paragraph = $autoShape->getTextFrame()->getParagraphs()->get_Item(0);
$defaultPortionFormat = $paragraph->getParagraphFormat()->getDefaultPortionFormat();
$font = new FontData("Times New Roman");
// Définir les propriétés de police pour le paragraphe.
$defaultPortionFormat->setFontHeight(12);
$defaultPortionFormat->setFontBold(NullableBool::True);
$defaultPortionFormat->setFontItalic(NullableBool::True);
$defaultPortionFormat->setFontUnderline(TextUnderlineType::Dotted);
$defaultPortionFormat->setLatinFont($font);
$presentation->save("font_properties_for_paragraph.pptx", SaveFormat::Pptx);
} finally {
$presentation->dispose();
}
Le résultat :

L’exemple de code ci‑dessous applique des propriétés similaires aux portions de texte en gras :
$presentation = new Presentation("sample.pptx");
try {
$slide = $presentation->getSlides()->get_Item(0);
$autoShape = $slide->getShapes()->get_Item(0);
$paragraph = $autoShape->getTextFrame()->getParagraphs()->get_Item(0);
$font = new FontData("Times New Roman");
$portionCount = java_values($paragraph->getPortions()->getCount());
for ($portionIndex = 0; $portionIndex < $portionCount; $portionIndex++) {
$portion = $paragraph->getPortions()->get_Item($portionIndex);
if (java_values($portion->getPortionFormat()->getEffective()->getFontBold()) === NullableBool::True) {
// Définir les propriétés de police pour la portion de texte.
$portionFormat = $portion->getPortionFormat();
$portionFormat->setFontHeight(13);
$portionFormat->setFontItalic(NullableBool::True);
$portionFormat->setFontUnderline(TextUnderlineType::Dotted);
$portionFormat->setLatinFont($font);
}
}
$presentation->save("font_properties_for_text_portions.pptx", SaveFormat::Pptx);
} finally {
$presentation->dispose();
}
Le résultat :

Définir la rotation du texte
Utilisez TextFrameFormat::setTextVerticalType pour définir une orientation de texte prédéfinie à l’intérieur d’une forme.
L’exemple de code suivant définit l’orientation du texte dans la forme à Vertical270, ce qui fait pivoter le texte de 90 degrés dans le sens inverse des aiguilles d’une montre :
$presentation = new Presentation("sample.pptx");
try {
$slide = $presentation->getSlides()->get_Item(0);
$autoShape = $slide->getShapes()->get_Item(0);
$autoShape->getTextFrame()->getTextFrameFormat()->setTextVerticalType(TextVerticalType::Vertical270);
$presentation->save("text_rotation.pptx", SaveFormat::Pptx);
} finally {
$presentation->dispose();
}
Le résultat :

Définir une rotation personnalisée pour les cadres de texte
Utilisez TextFrameFormat::setRotationAngle pour définir un angle de rotation personnalisé pour un TextFrame.
L’exemple de code ci‑dessus fait pivoter le cadre de texte de 3 degrés dans le sens des aiguilles d’une montre à l’intérieur de la forme :
$presentation = new Presentation("sample.pptx");
try {
$slide = $presentation->getSlides()->get_Item(0);
$autoShape = $slide->getShapes()->get_Item(0);
$autoShape->getTextFrame()->getTextFrameFormat()->setRotationAngle(3);
$presentation->save("custom_text_rotation.pptx", SaveFormat::Pptx);
} finally {
$presentation->dispose();
}
Le résultat :

Définir l’interligne des paragraphes
Aspose.Slides fournit ParagraphFormat::setSpaceAfter, ParagraphFormat::setSpaceBefore et ParagraphFormat::setSpaceWithin pour contrôler l’espacement des paragraphes. Ces propriétés sont utilisées comme suit :
- Utilisez une valeur positive pour spécifier l’interligne en pourcentage de la hauteur de ligne.
- Utilisez une valeur négative pour spécifier l’interligne en points.
L’exemple de code suivant montre comment spécifier l’interligne à l’intérieur du paragraphe :
$presentation = new Presentation("sample.pptx");
try {
$slide = $presentation->getSlides()->get_Item(0);
$autoShape = $slide->getShapes()->get_Item(0);
$paragraph = $autoShape->getTextFrame()->getParagraphs()->get_Item(0);
$paragraph->getParagraphFormat()->setSpaceWithin(200);
$presentation->save("line_spacing.pptx", SaveFormat::Pptx);
} finally {
$presentation->dispose();
}
Le résultat :

Définir le type d’ajustement automatique pour les cadres de texte
TextFrameFormat::setAutofitType détermine le comportement du texte lorsqu’il dépasse les limites de son conteneur. Utilisez-le pour contrôler si le texte se rétrécit, déborde ou redimensionne automatiquement la forme.
$presentation = new Presentation("sample.pptx");
try {
$slide = $presentation->getSlides()->get_Item(0);
$autoShape = $slide->getShapes()->get_Item(0);
$autoShape->getTextFrame()->getTextFrameFormat()->setAutofitType(TextAutofitType::Shape);
$presentation->save("autofit_type.pptx", SaveFormat::Pptx);
} finally {
$presentation->dispose();
}
Définir l’ancrage des cadres de texte
TextFrameFormat::setAnchoringType définit comment le texte est positionné verticalement à l’intérieur d’une forme, par exemple en haut, au centre ou en bas.
$presentation = new Presentation("sample.pptx");
try {
$slide = $presentation->getSlides()->get_Item(0);
$autoShape = $slide->getShapes()->get_Item(0);
$autoShape->getTextFrame()->getTextFrameFormat()->setAnchoringType(TextAnchorType::Bottom);
$presentation->save("text_anchor.pptx", SaveFormat::Pptx);
} finally {
$presentation->dispose();
}
Définir la tabulation du texte
Utilisez ParagraphFormat::setDefaultTabSize et ParagraphFormat::getTabs pour configurer les taquets de tabulation dans un paragraphe.
$presentation = new Presentation("sample.pptx");
try {
$slide = $presentation->getSlides()->get_Item(0);
$autoShape = $slide->getShapes()->get_Item(0);
$paragraph = $autoShape->getTextFrame()->getParagraphs()->get_Item(0);
$paragraph->getParagraphFormat()->setDefaultTabSize(100);
$paragraph->getParagraphFormat()->getTabs()->add(30, TabAlignment::Left);
$presentation->save("paragraph_tabs.pptx", SaveFormat::Pptx);
} finally {
$presentation->dispose();
}
Le résultat :

Définir la langue de relecture
Aspose.Slides fournit BasePortionFormat::setLanguageId, qui vous permet de définir la langue de relecture pour une portion de texte. La langue de relecture détermine la langue utilisée pour la vérification orthographique et grammaticale dans PowerPoint.
L’exemple de code suivant montre comment définir la langue de relecture pour une portion de texte :
$presentation = new Presentation("presentation.pptx");
try {
$slide = $presentation->getSlides()->get_Item(0);
$autoShape = $slide->getShapes()->get_Item(0);
$paragraph = $autoShape->getTextFrame()->getParagraphs()->get_Item(0);
$paragraph->getPortions()->clear();
$font = new FontData("SimSun");
$textPortion = new Portion();
$textPortion->getPortionFormat()->setComplexScriptFont($font);
$textPortion->getPortionFormat()->setEastAsianFont($font);
$textPortion->getPortionFormat()->setLatinFont($font);
// Définir l'Id d'une langue de relecture.
$textPortion->getPortionFormat()->setLanguageId("zh-CN");
$textPortion->setText("1。");
$paragraph->getPortions()->add($textPortion);
$presentation->save("proofing_language.pptx", SaveFormat::Pptx);
} finally {
$presentation->dispose();
}
Définir la langue par défaut
Utilisez LoadOptions::setDefaultTextLanguage pour définir la langue par défaut du texte créé lors du chargement ou de la création d’une présentation.
$loadOptions = new LoadOptions();
$loadOptions->setDefaultTextLanguage("en-US");
$presentation = new Presentation($loadOptions);
try {
$slide = $presentation->getSlides()->get_Item(0);
// Ajouter une nouvelle forme rectangulaire avec du texte.
$shape = $slide->getShapes()->addAutoShape(ShapeType::Rectangle, 20, 20, 150, 50);
$shape->getTextFrame()->setText("Sample text");
// Vérifier la langue de la première portion.
$portion = $shape->getTextFrame()->getParagraphs()->get_Item(0)->getPortions()->get_Item(0);
echo $portion->getPortionFormat()->getLanguageId();
} finally {
$presentation->dispose();
}
Définir le style de texte par défaut
Pour appliquer le formatage de texte par défaut au niveau de la présentation, utilisez Presentation::getDefaultTextStyle.
L’exemple de code suivant montre comment définir une police par défaut en gras avec une taille de 14 pt pour tout le texte de toutes les diapositives dans une nouvelle présentation.
$presentation = new Presentation();
try {
// Récupérer le format de paragraphe de niveau supérieur.
$paragraphFormat = $presentation->getDefaultTextStyle()->getLevel(0);
if (!java_is_null($paragraphFormat)) {
$paragraphFormat->getDefaultPortionFormat()->setFontHeight(14);
$paragraphFormat->getDefaultPortionFormat()->setFontBold(NullableBool::True);
}
$presentation->save("default_text_style.pptx", SaveFormat::Pptx);
} finally {
$presentation->dispose();
}
Extraire le texte avec l’effet Tout en majuscules
Dans PowerPoint, appliquer l’effet de police All Caps fait apparaître le texte en majuscules sur la diapositive même s’il a été saisi initialement en minuscules. Lorsque vous récupérez une telle portion de texte avec Aspose.Slides, la bibliothèque renvoie le texte exactement tel qu’il a été entré. Pour correspondre au texte affiché, vérifiez TextCapType et convertissez la chaîne renvoyée en majuscules lorsque la valeur est All.
Supposons que nous ayons la zone de texte suivante sur la première diapositive du fichier sample2.pptx.

L’exemple de code ci‑dessus montre comment extraire le texte avec l’effet All Caps appliqué :
$presentation = new Presentation("sample2.pptx");
try {
$slide = $presentation->getSlides()->get_Item(0);
$autoShape = $slide->getShapes()->get_Item(0);
$textPortion = $autoShape->getTextFrame()->getParagraphs()->get_Item(0)->getPortions()->get_Item(0);
$originalText = $textPortion->getText();
echo "Original text: ", $originalText, "\n";
$textFormat = $textPortion->getPortionFormat()->getEffective();
if (java_values($textFormat->getTextCapType()) === TextCapType::All) {
$text = strtoupper($originalText);
echo "All-Caps effect: ", $text, "\n";
}
} finally {
$presentation->dispose();
}
Sortie :
Original text: Hello, Aspose!
All-Caps effect: HELLO, ASPOSE!
FAQ
Comment modifier le texte dans un tableau sur une diapositive ?
Pour modifier le texte dans un tableau sur une diapositive, utilisez Table. Parcourez les cellules et mettez à jour chaque cellule via Cell::getTextFrame et le formatage des paragraphes via Paragraph::getParagraphFormat.
Comment appliquer une couleur dégradée au texte dans une diapositive PowerPoint ?
Pour appliquer une couleur dégradée au texte, utilisez BasePortionFormat::getFillFormat. Définissez FillFormat::setFillType sur FillType::Gradient et configurez les arrêts du dégradé, la direction et la transparence.