Správa tabulek prezentací v PHP
Úvod
Tabulky v PowerPointu organizují informace do řádků a sloupců, což usnadňuje čtení a porovnávání hodnot.
Aspose.Slides poskytuje třídu Table , třídu Cell a další typy, které vám umožňují vytvářet, aktualizovat a spravovat tabulky v prezentacích.
Vytvoření tabulky od začátku
Vytvořte tabulku zadáním její pozice, šířek sloupců a výšek řádků. Po přidání na snímek můžete formátovat okraje buněk, sloučit buňky a vložit text.
- Vytvořte instanci třídy Presentation.
- Získejte odkaz na snímek podle jeho indexu.
- Definujte pole šířek sloupců v bodech.
- Definujte pole výšek řádků v bodech.
- Přidejte objekt Table do snímku pomocí metody addTable.
- Procházejte každou Cell a aplikujte formátování na horní, dolní, pravý a levý okraj.
- Sloučte první dvě buňky v první řadě tabulky.
- Přistupte ke sloučené buňce pomocí její metody getTextFrame.
- Nastavte text ve sloučené buňce.
- Uložte upravenou prezentaci.
Níže uvedený příklad vytvoří tabulku se třemi sloupci a pěti řádky na pozici (100, 50) bodů. Aplikuje červené okraje o šířce 5 bodů, sloučí první dvě buňky v první řadě a výsledek uloží jako table.pptx.
use aspose\slides\FillType;
use aspose\slides\Presentation;
use aspose\slides\SaveFormat;
$presentation = new Presentation();
try {
$red = java("java.awt.Color")->RED;
$slide = $presentation->getSlides()->get_Item(0);
$columnWidths = [ 50, 50, 50 ];
$rowHeights = [ 50, 30, 30, 30, 30 ];
$table = $slide->getShapes()->addTable(100, 50, $columnWidths, $rowHeights);
for ($rowIndex = 0; $rowIndex < java_values($table->getRows()->size()); $rowIndex++) {
$row = $table->getRows()->get_Item($rowIndex);
for ($columnIndex = 0; $columnIndex < java_values($row->size()); $columnIndex++) {
$cell = $row->get_Item($columnIndex);
$cellFormat = $cell->getCellFormat();
$cellFormat->getBorderTop()->getFillFormat()->setFillType(FillType::Solid);
$cellFormat->getBorderTop()->getFillFormat()->getSolidFillColor()->setColor($red);
$cellFormat->getBorderTop()->setWidth(5);
$cellFormat->getBorderBottom()->getFillFormat()->setFillType(FillType::Solid);
$cellFormat->getBorderBottom()->getFillFormat()->getSolidFillColor()->setColor($red);
$cellFormat->getBorderBottom()->setWidth(5);
$cellFormat->getBorderLeft()->getFillFormat()->setFillType(FillType::Solid);
$cellFormat->getBorderLeft()->getFillFormat()->getSolidFillColor()->setColor($red);
$cellFormat->getBorderLeft()->setWidth(5);
$cellFormat->getBorderRight()->getFillFormat()->setFillType(FillType::Solid);
$cellFormat->getBorderRight()->getFillFormat()->getSolidFillColor()->setColor($red);
$cellFormat->getBorderRight()->setWidth(5);
}
}
$table->mergeCells($table->get_Item(0, 0), $table->get_Item(1, 0), false);
$table->get_Item(0, 0)->getTextFrame()->setText("Merged Cells");
$presentation->save("table.pptx", SaveFormat::Pptx);
} finally {
$presentation->dispose();
}
Číslování ve standardní tabulce
Ve standardní tabulce jsou indexy buněk nulové a používají pořadí (sloupec, řádek). První buňka má index (0, 0).
Například buňky v tabulce se 4 sloupci a 4 řádky jsou číslovány takto:
| (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) |
Tento příklad vytvoří 4 × 4 tabulku zobrazenou výše, se šířkami sloupců a výškami řádků 70 bodů a červenými okraji buněk o šířce 5 bodů. Souřadnice ilustrují indexy buněk; příklad nechává buňky prázdné a uloží tabulku jako StandardTables_out.pptx.
use aspose\slides\FillType;
use aspose\slides\Presentation;
use aspose\slides\SaveFormat;
$presentation = new Presentation();
try {
$red = java("java.awt.Color")->RED;
$slide = $presentation->getSlides()->get_Item(0);
$columnWidths = [ 70, 70, 70, 70 ];
$rowHeights = [ 70, 70, 70, 70 ];
$table = $slide->getShapes()->addTable(100, 50, $columnWidths, $rowHeights);
for ($rowIndex = 0; $rowIndex < java_values($table->getRows()->size()); $rowIndex++) {
$row = $table->getRows()->get_Item($rowIndex);
for ($columnIndex = 0; $columnIndex < java_values($row->size()); $columnIndex++) {
$cell = $row->get_Item($columnIndex);
$cellFormat = $cell->getCellFormat();
$cellFormat->getBorderTop()->getFillFormat()->setFillType(FillType::Solid);
$cellFormat->getBorderTop()->getFillFormat()->getSolidFillColor()->setColor($red);
$cellFormat->getBorderTop()->setWidth(5);
$cellFormat->getBorderBottom()->getFillFormat()->setFillType(FillType::Solid);
$cellFormat->getBorderBottom()->getFillFormat()->getSolidFillColor()->setColor($red);
$cellFormat->getBorderBottom()->setWidth(5);
$cellFormat->getBorderLeft()->getFillFormat()->setFillType(FillType::Solid);
$cellFormat->getBorderLeft()->getFillFormat()->getSolidFillColor()->setColor($red);
$cellFormat->getBorderLeft()->setWidth(5);
$cellFormat->getBorderRight()->getFillFormat()->setFillType(FillType::Solid);
$cellFormat->getBorderRight()->getFillFormat()->getSolidFillColor()->setColor($red);
$cellFormat->getBorderRight()->setWidth(5);
}
}
$presentation->save("StandardTables_out.pptx", SaveFormat::Pptx);
} finally {
$presentation->dispose();
}
Přístup k existující tabulce
Tabulky jsou uloženy ve sbírce tvarů snímku. Procházejte tvary, abyste našli tabulku, a poté použijte třídu Table k načtení nebo aktualizaci jejích buněk.
- Načtěte prezentaci pomocí třídy Presentation.
- Získejte odkaz na snímek obsahující tabulku podle jeho indexu.
- Procházejte objekty Shape a zastavte se, když je nalezena tabulka. Pokud snímek obsahuje několik tabulek, použijte getAlternativeText k identifikaci té, kterou potřebujete.
- Aktualizujte text v cílové buňce.
- Uložte upravenou prezentaci.
Níže uvedený příklad otevře UpdateExistingTable.pptx a najde první tabulku na prvním snímku. Nastaví buňku ve sloupci 0, řádku 1 na New a výsledek uloží jako table1_out.pptx. Vstup musí obsahovat alespoň jeden snímek a první tabulka na tomto snímku musí mít alespoň jeden sloupec a dva řádky.
use aspose\slides\Presentation;
use aspose\slides\SaveFormat;
$presentation = new Presentation("UpdateExistingTable.pptx");
try {
$slide = $presentation->getSlides()->get_Item(0);
$table = null;
$tableClass = new JavaClass("com.aspose.slides.Table");
$shapeCount = java_values($slide->getShapes()->size());
for ($shapeIndex = 0; $shapeIndex < $shapeCount; $shapeIndex++) {
$shape = $slide->getShapes()->get_Item($shapeIndex);
if (java_instanceof($shape, $tableClass)) {
$table = $shape;
break;
}
}
if ($table !== null) {
$table->get_Item(0, 1)->getTextFrame()->setText("New");
$presentation->save("table1_out.pptx", SaveFormat::Pptx);
}
} finally {
$presentation->dispose();
}
Pro změnu velikosti řádku v existující tabulce a pochopení, proč může jeho skutečná výška přesáhnout požadovanou minimální, viz Řízení výšky řádku.
Najděte buňku, která vlastní textový rámec
Když obecný kód pro zpracování textu získá TextFrame z tabulky, použijte metodu TextFrame::getParentCell k získání vlastnické Cell. Pro textový rámec buňky tabulky metoda TextFrame::getParentCell vrací vlastníka a TextFrame::getParentShape vrací null, i když je tabulka sama o sobě tvarem.
Souřadnice buňky jsou dostupné přes jen pro čtení metody Cell::getFirstColumnIndex a Cell::getFirstRowIndex. Metoda TextFrame::getParentCell také poskytuje jen pro čtení navigaci: vrací vlastníka, ale nezmění vlastnictví. Vždy před použitím zkontrolujte vrácenou buňku pomocí java_is_null.
Pro kompletní příklad, který identifikuje vlastníky buňky tabulky a tvaru, včetně tvarů spojených se SmartArt uzly, viz Vyhledat a nahradit text.
Zarovnání textu v tabulce
Můžete řídit vertikální ukotvení a směr textu jednotlivých buněk tabulky. Příklad v této sekci vycentruje text v první buňce a otočí jej o 270 stupňů.
- Vytvořte instanci třídy Presentation.
- Získejte odkaz na snímek podle jeho indexu.
- Přidejte objekt Table do snímku.
- Získejte objekt TextFrame z tabulky.
- Získejte první Paragraph a nastavte jeho text a barvu.
- Nastavte vertikální ukotvení buňky a směr textu pomocí setTextAnchorType a setTextVerticalType.
- Uložte upravenou prezentaci.
Tento příklad vytvoří 4 × 4 tabulku se šířkami sloupců 120 bodů a výškami řádků 100 bodů. Naformátuje text v buňce (0, 0), přidá hodnoty do zbývajících buněk v první řadě a výsledek uloží jako Vertical_Align_Text_out.pptx.
use aspose\slides\FillType;
use aspose\slides\Presentation;
use aspose\slides\SaveFormat;
use aspose\slides\TextAnchorType;
use aspose\slides\TextVerticalType;
$presentation = new Presentation();
try {
$black = java("java.awt.Color")->BLACK;
$slide = $presentation->getSlides()->get_Item(0);
$columnWidths = [ 120, 120, 120, 120 ];
$rowHeights = [ 100, 100, 100, 100 ];
$table = $slide->getShapes()->addTable(100, 50, $columnWidths, $rowHeights);
$table->get_Item(1, 0)->getTextFrame()->setText("10");
$table->get_Item(2, 0)->getTextFrame()->setText("20");
$table->get_Item(3, 0)->getTextFrame()->setText("30");
$textFrame = $table->get_Item(0, 0)->getTextFrame();
$paragraph = $textFrame->getParagraphs()->get_Item(0);
$portion = $paragraph->getPortions()->get_Item(0);
$portion->setText("Text here");
$portion->getPortionFormat()->getFillFormat()->setFillType(FillType::Solid);
$portion->getPortionFormat()->getFillFormat()->getSolidFillColor()->setColor($black);
$cell = $table->get_Item(0, 0);
$cell->setTextAnchorType(TextAnchorType::Center);
$cell->setTextVerticalType(TextVerticalType::Vertical270);
$presentation->save("Vertical_Align_Text_out.pptx", SaveFormat::Pptx);
} finally {
$presentation->dispose();
}
Nastavení formátování textu na úrovni tabulky
Použijte setTextFormat k aplikaci formátování textu na všechny buňky v tabulce. Jeho přetížení akceptují formátování úseku, odstavce a textového rámce, takže můžete nastavit tyto vlastnosti bez procházení jednotlivých buněk.
- Načtěte prezentaci pomocí třídy Presentation.
- Získejte odkaz na snímek podle jeho indexu.
- Získejte objekt Table ze snímku.
- Nastavte velikost písma pomocí setFontHeight pro text.
- Nastavte zarovnání odstavce a pravý okraj pomocí setAlignment a setMarginRight.
- Nastavte směr textu pomocí setTextVerticalType.
- Uložte upravenou prezentaci.
Níže uvedený příklad otevře table.pptx, který musí obsahovat alespoň jeden snímek s tabulkou jako jejím prvním tvarem. Nastaví velikost písma na 25 bodů, zarovná odstavce vpravo s pravým okrajem 20 bodů a nastaví text vertikálně. Formátovaná prezentace je uložena jako result.pptx.
use aspose\slides\ParagraphFormat;
use aspose\slides\PortionFormat;
use aspose\slides\Presentation;
use aspose\slides\SaveFormat;
use aspose\slides\TextAlignment;
use aspose\slides\TextFrameFormat;
use aspose\slides\TextVerticalType;
$presentation = new Presentation("table.pptx");
try {
$slide = $presentation->getSlides()->get_Item(0);
$table = $slide->getShapes()->get_Item(0);
$portionFormat = new PortionFormat();
$portionFormat->setFontHeight(25);
$table->setTextFormat($portionFormat);
$paragraphFormat = new ParagraphFormat();
$paragraphFormat->setAlignment(TextAlignment::Right);
$paragraphFormat->setMarginRight(20);
$table->setTextFormat($paragraphFormat);
$textFrameFormat = new TextFrameFormat();
$textFrameFormat->setTextVerticalType(TextVerticalType::Vertical);
$table->setTextFormat($textFrameFormat);
$presentation->save("result.pptx", SaveFormat::Pptx);
} finally {
$presentation->dispose();
}
Získání vlastností stylu tabulky
Použijte getStylePreset k načtení předdefinovaného stylu tabulky a setStylePreset k jeho přiřazení. Tento příklad aplikuje TableStylePreset::DarkStyle1 na jednu tabulku, vypíše hodnotu předvolby a přiřadí stejnou předvolbu druhé tabulce. Obě tabulky jsou uloženy v table-style.pptx.
use aspose\slides\Presentation;
use aspose\slides\SaveFormat;
use aspose\slides\TableStylePreset;
$presentation = new Presentation();
try {
$slide = $presentation->getSlides()->get_Item(0);
$columnWidths = [ 100, 150 ];
$rowHeights = [ 5, 5, 5 ];
$table = $slide->getShapes()->addTable(10, 10, $columnWidths, $rowHeights);
$table->setStylePreset(TableStylePreset::DarkStyle1);
$stylePreset = java_values($table->getStylePreset());
echo "Table style preset: " . $stylePreset . PHP_EOL;
$anotherTable = $slide->getShapes()->addTable(10, 100, $columnWidths, $rowHeights);
$anotherTable->setStylePreset($stylePreset);
$presentation->save("table-style.pptx", SaveFormat::Pptx);
} finally {
$presentation->dispose();
}
Uzamčení poměru stran tabulky
Poměr stran tabulky je poměr její šířky k výšce. Použijte setAspectRatioLocked k uzamčení tohoto poměru pro tabulku.
Níže uvedený příklad otevře pres.pptx, který musí obsahovat alespoň jeden snímek s tabulkou jako jejím prvním tvarem. Vytiskne aktuální stav uzamčení, povolí uzamčení poměru stran, vytiskne aktualizovaný stav (true) a uloží výsledek jako pres-out.pptx.
use aspose\slides\Presentation;
use aspose\slides\SaveFormat;
$presentation = new Presentation("pres.pptx");
try {
$slide = $presentation->getSlides()->get_Item(0);
$table = $slide->getShapes()->get_Item(0);
echo "Lock aspect ratio set: " . (java_values($table->getGraphicalObjectLock()->getAspectRatioLocked()) ? "true" : "false") . PHP_EOL;
$table->getGraphicalObjectLock()->setAspectRatioLocked(true);
echo "Lock aspect ratio set: " . (java_values($table->getGraphicalObjectLock()->getAspectRatioLocked()) ? "true" : "false") . PHP_EOL;
$presentation->save("pres-out.pptx", SaveFormat::Pptx);
} finally {
$presentation->dispose();
}
Často kladené otázky
Mohu povolit směr čtení zprava doleva (RTL) pro celou tabulku i text v jejích buňkách?
Ano. Tabulka poskytuje metodu setRightToLeft, a odstavce mají ParagraphFormat::setRightToLeft. Použití obou zajišťuje správné RTL pořadí a vykreslení uvnitř buněk.
Jak mohu zabránit uživatelům v přesouvání nebo změně velikosti tabulky ve finálním souboru?
Použijte shape locks k zakázání přesouvání, změny velikosti, výběru atd. Tato zamknutí se vztahují i na tabulky.
Je podporováno vložení obrázku do buňky jako pozadí?
Ano. Můžete nastavit picture fill pro buňku; obrázek pokryje oblast buňky podle zvoleného režimu (roztažení nebo dlaždice).