Gérer les tableaux de présentation en PHP
Introduction
Un tableau dans PowerPoint est un moyen efficace d’afficher et de présenter des informations. Les informations disposées dans une grille de cellules (organisées en lignes et colonnes) sont simples et faciles à comprendre.
Aspose.Slides fournit la classe Table, la classe Cell et d’autres types pour vous permettre de créer, mettre à jour et gérer des tables dans tous types de présentations.
Create a Table from Scratch
- Créer une instance de la classe Presentation.
- Obtenir la référence d’une diapositive via son index.
- Définir un tableau de
columnWidth. - Définir un tableau de
rowHeight. - Ajouter un objet Table à la diapositive via la méthode addTable.
- Parcourir chaque Cell pour appliquer le formatage aux bordures supérieure, inférieure, droite et gauche.
- Fusionner les deux premières cellules de la première ligne du tableau.
- Accéder au TextFrame d’une Cell.
- Ajouter du texte au TextFrame.
- Enregistrer la présentation modifiée.
# Crée une instance de la classe Presentation qui représente un fichier PPTX
$pres = new Presentation();
try {
# Accède à la première diapositive
$sld = $pres->getSlides()->get_Item(0);
# Définit les colonnes avec leurs largeurs et les lignes avec leurs hauteurs
$dblCols = array(50, 50, 50 );
$dblRows = array(50, 30, 30, 30, 30 );
# Ajoute une forme de tableau à la diapositive
$tbl = $sld->getShapes()->addTable(100, 50, $dblCols, $dblRows);
# Définit le format de bordure pour chaque cellule
for($row = 0; $row < java_values($tbl->getRows()->size()) ; $row++) {
for($cell = 0; $cell < java_values($tbl->getRows()->get_Item($row)->size()) ; $cell++) {
$cellFormat = $tbl->getRows()->get_Item($row)->get_Item($cell)->getCellFormat();
$cellFormat::getBorderTop()->getFillFormat()->setFillType(FillType::Solid);
$cellFormat::getBorderTop()->getFillFormat()->getSolidFillColor()->setColor(java("java.awt.Color")->RED);
$cellFormat::getBorderTop()->setWidth(5);
$cellFormat::getBorderBottom()->getFillFormat()->setFillType(FillType::Solid);
$cellFormat::getBorderBottom()->getFillFormat()->getSolidFillColor()->setColor(java("java.awt.Color")->RED);
$cellFormat::getBorderBottom()->setWidth(5);
$cellFormat::getBorderLeft()->getFillFormat()->setFillType(FillType::Solid);
$cellFormat::getBorderLeft()->getFillFormat()->getSolidFillColor()->setColor(java("java.awt.Color")->RED);
$cellFormat::getBorderLeft()->setWidth(5);
$cellFormat::getBorderRight()->getFillFormat()->setFillType(FillType::Solid);
$cellFormat::getBorderRight()->getFillFormat()->getSolidFillColor()->setColor(java("java.awt.Color")->RED);
$cellFormat::getBorderRight()->setWidth(5);
}
}
# Fusionne les cellules 1 et 2 de la ligne 1
$tbl->mergeCells($tbl->getRows()->get_Item(0)->get_Item(0), $tbl->getRows()->get_Item(1)->get_Item(1), false);
# Ajoute du texte à la cellule fusionnée
$tbl->getRows()->get_Item(0)->get_Item(0)->getTextFrame()->setText("Merged Cells");
# Enregistre la présentation sur le disque
$pres->save("table.pptx", SaveFormat::Pptx);
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
Numbering in a Standard Table
Dans un tableau standard, la numérotation des cellules est simple et commence à zéro. La première cellule d’un tableau a l’indice 0,0 (colonne 0, ligne 0).
Par exemple, les cellules d’un tableau de 4 colonnes et 4 lignes sont numérotées ainsi :
| (0, 0) | (1, 0) | (2, 0) | (3, 0) |
|---|---|---|---|
| (0, 1) | (1, 1) | (2, 1) | (3, 1) |
| (0, 2) | (1, 2) | (2, 2) | (3, 2) |
| (0, 3) | (1, 3) | (2, 3) | (3, 3) |
Ce code PHP montre comment spécifier la numérotation des cellules dans un tableau :
# Instancie une classe Presentation qui représente un fichier PPTX
$pres = new Presentation();
try {
# Accède à la première diapositive
$sld = $pres->getSlides()->get_Item(0);
# Définit les colonnes avec leurs largeurs et les lignes avec leurs hauteurs
$dblCols = array(70, 70, 70, 70 );
$dblRows = array(70, 70, 70, 70 );
# Ajoute une forme de tableau à la diapositive
$tbl = $sld->getShapes()->addTable(100, 50, $dblCols, $dblRows);
# Définit le format de bordure pour chaque cellule
$rows = $tbl->getRows();
foreach($rows as $row) {
foreach($row as $cell) {
$cell->getCellFormat()->getBorderTop()->getFillFormat()->setFillType(FillType::Solid);
$cell->getCellFormat()->getBorderTop()->getFillFormat()->getSolidFillColor()->setColor(java("java.awt.Color")->RED);
$cell->getCellFormat()->getBorderTop()->setWidth(5);
$cell->getCellFormat()->getBorderBottom()->getFillFormat()->setFillType(FillType::Solid);
$cell->getCellFormat()->getBorderBottom()->getFillFormat()->getSolidFillColor()->setColor(java("java.awt.Color")->RED);
$cell->getCellFormat()->getBorderBottom()->setWidth(5);
$cell->getCellFormat()->getBorderLeft()->getFillFormat()->setFillType(FillType::Solid);
$cell->getCellFormat()->getBorderLeft()->getFillFormat()->getSolidFillColor()->setColor(java("java.awt.Color")->RED);
$cell->getCellFormat()->getBorderLeft()->setWidth(5);
$cell->getCellFormat()->getBorderRight()->getFillFormat()->setFillType(FillType::Solid);
$cell->getCellFormat()->getBorderRight()->getFillFormat()->getSolidFillColor()->setColor(java("java.awt.Color")->RED);
$cell->getCellFormat()->getBorderRight()->setWidth(5);
}
}
# Enregistre la présentation sur le disque
$pres->save("StandardTables_out.pptx", SaveFormat::Pptx);
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
Access an Existing Table
-
Créer une instance de la classe Presentation.
-
Obtenir une référence à la diapositive contenant le tableau via son index.
-
Créer un objet Table et le définir à null.
-
Parcourir tous les objets Shape jusqu’à ce que le tableau soit trouvé.
Si vous pensez que la diapositive que vous traitez ne contient qu’un seul tableau, vous pouvez simplement vérifier toutes les formes qu’elle contient. Lorsqu’une forme est identifiée comme un tableau, vous pouvez la convertir en objet Table. En revanche, si la diapositive contient plusieurs tableaux, il est préférable de rechercher le tableau souhaité via sa méthode setAlternativeText(String value).
-
Utiliser l’objet Table pour travailler avec le tableau. Dans l’exemple ci‑dessous, nous avons ajouté une nouvelle ligne au tableau.
-
Enregistrer la présentation modifiée.
# Instancie la classe Presentation qui représente un fichier PPTX
$pres = new Presentation("UpdateExistingTable.pptx");
try {
# Accède à la première diapositive
$sld = $pres->getSlides()->get_Item(0);
# Initialise TableEx à null
$tbl = null;
# Itère à travers les formes et définit une référence vers le tableau trouvé
$shapes = $sld->getShapes();
foreach($shapes as $shp) {
if (java_instanceof($shp, new JavaClass("com.aspose.slides.Table"))) {
$tbl = $shp;
# Définit le texte pour la première colonne de la deuxième ligne
$tbl->get_Item(0, 1)->getTextFrame()->setText("New");
}
}
# Enregistre la présentation modifiée sur le disque
$pres->save("table1_out.pptx", SaveFormat::Pptx);
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
Find the Cell That Owns a Text Frame
Lorsque du code générique de traitement de texte reçoit un TextFrame provenant d’un tableau, utilisez la méthode TextFrame::getParentCell pour récupérer la Cell propriétaire. Pour un TextFrame de cellule de tableau, TextFrame::getParentCell renvoie le propriétaire et TextFrame::getParentShape renvoie null, même si le tableau lui‑-même est une forme.
Les coordonnées de la cellule sont accessibles via les méthodes en lecture seule Cell::getFirstColumnIndex et Cell::getFirstRowIndex. TextFrame::getParentCell fournit également une navigation en lecture seule : il renvoie le propriétaire mais ne modifie pas la propriété. Vérifiez toujours que la cellule renvoyée n’est pas java_is_null avant de l’utiliser.
Pour un exemple complet qui identifie les propriétaires de cellules de tableau et de formes, y compris les formes associées aux nœuds SmartArt, voir Search and Replace Text.
Align Text in a Table
- Créer une instance de la classe Presentation.
- Obtenir la référence d’une diapositive via son index.
- Ajouter un objet Table à la diapositive.
- Accéder à un objet TextFrame du tableau.
- Accéder au Paragraph.
- Aligner le texte verticalement.
- Enregistrer la présentation modifiée.
# Crée une instance de la classe Presentation
$pres = new Presentation();
try {
# Récupère la première diapositive
$slide = $pres->getSlides()->get_Item(0);
# Définit les colonnes avec leurs largeurs et les lignes avec leurs hauteurs
$dblCols = array(120, 120, 120, 120 );
$dblRows = array(100, 100, 100, 100 );
# Ajoute la forme de tableau à la diapositive
$tbl = $slide->getShapes()->addTable(100, 50, $dblCols, $dblRows);
$tbl->get_Item(1, 0)->getTextFrame()->setText("10");
$tbl->get_Item(2, 0)->getTextFrame()->setText("20");
$tbl->get_Item(3, 0)->getTextFrame()->setText("30");
# Accède au cadre de texte
$txtFrame = $tbl->get_Item(0, 0)->getTextFrame();
# Crée l’objet Paragraph pour le cadre de texte
$paragraph = $txtFrame->getParagraphs()->get_Item(0);
# Crée l’objet Portion pour le paragraphe
$portion = $paragraph->getPortions()->get_Item(0);
$portion->setText("Text here");
$portion->getPortionFormat()->getFillFormat()->setFillType(FillType::Solid);
$portion->getPortionFormat()->getFillFormat()->getSolidFillColor()->setColor(java("java.awt.Color")->BLACK);
# Aligne le texte verticalement
$cell = $tbl->get_Item(0, 0);
$cell->setTextAnchorType(TextAnchorType::Center);
$cell->setTextVerticalType(TextVerticalType::Vertical270);
# Enregistre la présentation sur le disque
$pres->save("Vertical_Align_Text_out.pptx", SaveFormat::Pptx);
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
Set Text Formatting on the Table Level
- Créer une instance de la classe Presentation.
- Obtenir la référence d’une diapositive via son index.
- Accéder à un objet Table depuis la diapositive.
- Définir la hauteur de police avec setFontHeight(float value) pour le texte.
- Définir setAlignment(int value) et setMarginRight(float value).
- Définir setTextVerticalType(byte value).
- Enregistrer la présentation modifiée.
# Crée une instance de la classe Presentation
$pres = new Presentation("simpletable.pptx");
try {
# Supposons que la première forme de la première diapositive est un tableau
$someTable = $pres->getSlides()->get_Item(0)->getShapes()->get_Item(0);
# Définit la hauteur de police des cellules du tableau
$portionFormat = new PortionFormat();
$portionFormat::setFontHeight(25);
$someTable->setTextFormat($portionFormat);
# Définit l'alignement du texte des cellules du tableau et la marge droite en un seul appel
$paragraphFormat = new ParagraphFormat();
$paragraphFormat::setAlignment(TextAlignment->Right);
$paragraphFormat::setMarginRight(20);
$someTable->setTextFormat($paragraphFormat);
# Définit le type vertical du texte des cellules du tableau
$textFrameFormat = new TextFrameFormat();
$textFrameFormat::setTextVerticalType(TextVerticalType::Vertical);
$someTable->setTextFormat($textFrameFormat);
$pres->save("result.pptx", SaveFormat::Pptx);
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
Get Table Style Properties
Aspose.Slides vous permet de récupérer les propriétés de style d’un tableau afin de les réutiliser pour un autre tableau ou ailleurs. Ce code PHP montre comment obtenir les propriétés de style à partir d’un style de tableau prédéfini :
$pres = new Presentation();
try {
$table = $pres->getSlides()->get_Item(0)->getShapes()->addTable(10, 10, array(100, 150 ), array(5, 5, 5 ));
$table->setStylePreset(TableStylePreset->DarkStyle1);// modifier le thème du style prédéfini par défaut
$pres->save("table.pptx", SaveFormat::Pptx);
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
Lock Aspect Ratio of a Table
Le ratio d’aspect d’une forme géométrique est le rapport de ses dimensions. Aspose.Slides propose la méthode setAspectRatioLocked pour vous permettre de verrouiller le réglage du ratio d’aspect pour les tableaux et autres formes.
$pres = new Presentation("pres.pptx");
try {
$table = $pres->getSlides()->get_Item(0)->getShapes()->get_Item(0);
echo("Lock aspect ratio set: " . $table->getGraphicalObjectLock()->getAspectRatioLocked());
$table->getGraphicalObjectLock()->setAspectRatioLocked(!$table->getGraphicalObjectLock()->getAspectRatioLocked());// invert
echo("Lock aspect ratio set: " . $table->getGraphicalObjectLock()->getAspectRatioLocked());
$pres->save("pres-out.pptx", SaveFormat::Pptx);
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
FAQ
Puis-je activer la direction de lecture de droite à gauche (RTL) pour un tableau complet et le texte de ses cellules ?
Oui. Le tableau expose une méthode setRightToLeft, et les paragraphes possèdent ParagraphFormat::setRightToLeft. Utiliser les deux garantit l’ordre RTL correct et le rendu adéquat à l’intérieur des cellules.
Comment empêcher les utilisateurs de déplacer ou redimensionner un tableau dans le fichier final ?
Utilisez les verrous de forme pour désactiver le déplacement, le redimensionnement, la sélection, etc. Ces verrous s’appliquent également aux tableaux.
L’insertion d’une image à l’intérieur d’une cellule comme arrière‑plan est‑elle prise en charge ?
Oui. Vous pouvez définir un picture fill pour une cellule ; l’image couvrira la zone de la cellule selon le mode choisi (étirement ou mosaïque).