Spravovat tabulky prezentací v PHP
Úvod
Tabulka v PowerPointu je efektivní způsob, jak zobrazit a představit informace. Informace v mřížce buněk (uspořádaných do řádků a sloupců) jsou přehledné a snadno pochopitelné.
Aspose.Slides poskytuje třídu Table, třídu Cell a další typy, které vám umožní vytvářet, aktualizovat a spravovat tabulky ve všech druzích prezentací.
Vytvořit tabulku od začátku
- Vytvořte instanci třídy Presentation.
- Získejte referenci na snímek pomocí jeho indexu.
- Definujte pole
columnWidth. - Definujte pole
rowHeight. - Přidejte objekt Table na snímek pomocí metody addTable.
- Procházejte každou Cell a aplikujte formátování na horní, spodní, pravý a levý okraj.
- Sloučte první dvě buňky prvního řádku tabulky.
- Získejte přístup k objektu TextFrame buňky Cell.
- Přidejte text do TextFrame.
- Uložte upravenou prezentaci.
Tento PHP kód ukazuje, jak vytvořit tabulku v prezentaci:
# Vytvoří instanci třídy Presentation, která představuje soubor PPTX
$pres = new Presentation();
try {
# Přistupuje k prvnímu snímku
$sld = $pres->getSlides()->get_Item(0);
# Definuje sloupce s šířkami a řádky s výškami
$dblCols = array(50, 50, 50 );
$dblRows = array(50, 30, 30, 30, 30 );
# Přidá tvar tabulky na snímek
$tbl = $sld->getShapes()->addTable(100, 50, $dblCols, $dblRows);
# Nastaví formát okraje pro každou buňku
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);
}
}
# Sloučí buňky 1 a 2 v řádku 1
$tbl->mergeCells($tbl->getRows()->get_Item(0)->get_Item(0), $tbl->getRows()->get_Item(1)->get_Item(1), false);
# Přidá text do sloučené buňky
$tbl->getRows()->get_Item(0)->get_Item(0)->getTextFrame()->setText("Merged Cells");
# Uloží prezentaci na disk
$pres->save("table.pptx", SaveFormat::Pptx);
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
Číslování ve standardní tabulce
Ve standardní tabulce je číslování buněk jednoduché a začíná nulou. První buňka tabulky má index 0,0 (sloupec 0, řádek 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 PHP kód ukazuje, jak určit číslování buněk v tabulce:
# Vytvoří instanci třídy Presentation, která představuje soubor PPTX
$pres = new Presentation();
try {
# Přistupuje k prvnímu snímku
$sld = $pres->getSlides()->get_Item(0);
# Definuje sloupce s šířkami a řádky s výškami
$dblCols = array(70, 70, 70, 70 );
$dblRows = array(70, 70, 70, 70 );
# Přidá tvar tabulky na snímek
$tbl = $sld->getShapes()->addTable(100, 50, $dblCols, $dblRows);
# Nastaví formát okraje pro každou buňku
$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);
}
}
# Uloží prezentaci na disk
$pres->save("StandardTables_out.pptx", SaveFormat::Pptx);
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
Přístup k existující tabulce
-
Vytvořte instanci třídy Presentation.
-
Získejte referenci na snímek obsahující tabulku pomocí jeho indexu.
-
Vytvořte objekt Table a nastavte jej na null.
-
Procházejte všechny objekty Shape dokud nenajdete tabulku.
Pokud máte podezření, že snímek, se kterým pracujete, obsahuje jedinou tabulku, můžete jednoduše zkontrolovat všechny tvary, které obsahuje. Když je tvar identifikován jako tabulka, můžete jej přetypovat na objekt Table. Pokud snímek obsahuje více tabulek, je lepší hledat požadovanou tabulku pomocí jejího setAlternativeText(String value).
-
Použijte objekt Table, abyste pracovali s tabulkou. V níže uvedeném příkladu jsme přidali nový řádek do tabulky.
-
Uložte upravenou prezentaci.
# Vytvoří instanci třídy Presentation, která představuje soubor PPTX
$pres = new Presentation("UpdateExistingTable.pptx");
try {
# Přistupuje k prvnímu snímku
$sld = $pres->getSlides()->get_Item(0);
# Inicializuje null TableEx
$tbl = null;
# Prochází tvary a nastaví odkaz na nalezenou tabulku
$shapes = $sld->getShapes();
foreach($shapes as $shp) {
if (java_instanceof($shp, new JavaClass("com.aspose.slides.Table"))) {
$tbl = $shp;
# Nastaví text pro první sloupec druhého řádku
$tbl->get_Item(0, 1)->getTextFrame()->setText("New");
}
}
# Uloží upravenou prezentaci na disk
$pres->save("table1_out.pptx", SaveFormat::Pptx);
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
Najít buňku, které vlastní TextFrame
Když obecný kód pro zpracování textu získá TextFrame z tabulky, použijte metodu TextFrame::getParentCell, abyste získali vlastnící Cell. U textového rámce buňky tabulky metoda TextFrame::getParentCell vrací vlastníka a TextFrame::getParentShape vrací null, i když samotná tabulka je tvar.
Souřadnice buňky jsou dostupné prostřednictvím metod jen pro čtení Cell::getFirstColumnIndex a Cell::getFirstRowIndex. Metoda TextFrame::getParentCell také poskytuje navigaci jen pro čtení: vrací vlastníka, ale nemění vlastnictví. Vždy před použitím zkontrolujte, zda je vrácená buňka java_is_null.
Kompletní příklad, který identifikuje vlastníky buňky tabulky a tvaru, včetně tvarů spojených s uzly SmartArt, najdete v Search and Replace Text.
Zarovnat text v tabulce
- Vytvořte instanci třídy Presentation.
- Získejte referenci na snímek pomocí jeho indexu.
- Přidejte objekt Table na snímek.
- Získejte přístup k objektu TextFrame z tabulky.
- Získejte přístup k Paragraph.
- Zarovnejte text vertikálně.
- Uložte upravenou prezentaci.
# Vytvoří instanci třídy Presentation
$pres = new Presentation();
try {
# Získá první snímek
$slide = $pres->getSlides()->get_Item(0);
# Definuje sloupce s šířkami a řádky s výškami
$dblCols = array(120, 120, 120, 120 );
$dblRows = array(100, 100, 100, 100 );
# Přidá tvar tabulky na snímek
$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");
# Přistupuje k textovému rámci
$txtFrame = $tbl->get_Item(0, 0)->getTextFrame();
# Vytvoří objekt Paragraph pro textový rámec
$paragraph = $txtFrame->getParagraphs()->get_Item(0);
# Vytvoří objekt Portion pro odstavec
$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);
# Zarovnává text vertikálně
$cell = $tbl->get_Item(0, 0);
$cell->setTextAnchorType(TextAnchorType::Center);
$cell->setTextVerticalType(TextVerticalType::Vertical270);
# Uloží prezentaci na disk
$pres->save("Vertical_Align_Text_out.pptx", SaveFormat::Pptx);
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
Nastavit formátování textu na úrovni tabulky
- Vytvořte instanci třídy Presentation.
- Získejte referenci na snímek pomocí jeho indexu.
- Získejte přístup k objektu Table ze snímku.
- Nastavte setFontHeight(float value) pro text.
- Nastavte setAlignment(int value) a setMarginRight(float value).
- Nastavte setTextVerticalType(byte value).
- Uložte upravenou prezentaci.
# Vytvoří instanci třídy Presentation
$pres = new Presentation("simpletable.pptx");
try {
# Předpokládejme, že první tvar na prvním snímku je tabulka
$someTable = $pres->getSlides()->get_Item(0)->getShapes()->get_Item(0);
# Nastaví výšku písma buněk tabulky
$portionFormat = new PortionFormat();
$portionFormat::setFontHeight(25);
$someTable->setTextFormat($portionFormat);
# Nastaví zarovnání textu buněk tabulky a pravý okraj jedním voláním
$paragraphFormat = new ParagraphFormat();
$paragraphFormat::setAlignment(TextAlignment->Right);
$paragraphFormat::setMarginRight(20);
$someTable->setTextFormat($paragraphFormat);
# Nastaví vertikální typ textu buněk tabulky
$textFrameFormat = new TextFrameFormat();
$textFrameFormat::setTextVerticalType(TextVerticalType::Vertical);
$someTable->setTextFormat($textFrameFormat);
$pres->save("result.pptx", SaveFormat::Pptx);
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
Získat vlastnosti stylu tabulky
Aspose.Slides vám umožňuje načíst vlastnosti stylu tabulky, abyste je mohli použít pro jinou tabulku nebo jinde. Tento PHP kód ukazuje, jak získat vlastnosti stylu z předdefinovaného stylu tabulky:
$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);// změnit výchozí přednastavený styl motivu
$pres->save("table.pptx", SaveFormat::Pptx);
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
Uzamknout poměr stran tabulky
Poměr stran geometrického tvaru je poměr jeho velikostí v různých rozměrech. Aspose.Slides poskytuje metodu setAspectRatioLocked, která vám umožní uzamknout nastavení poměru stran pro tabulky a další tvary.
$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();
}
}
Často kladené otázky
Mohu povolit čtení zprava doleva (RTL) pro celou tabulku a text v jejích buňkách?
Ano. Tabulka poskytuje metodu setRightToLeft a odstavce mají ParagraphFormat::setRightToLeft. Použitím obou zajišťujete správné RTL pořadí a vykreslení uvnitř buněk.
Jak mohu zabránit uživatelům v přesunu nebo změně velikosti tabulky v konečném souboru?
Použijte zamykání tvarů k deaktivaci přesunu, změny velikosti, výběru atd. Tato zamykání se vztahují i na tabulky.
Je podporováno vložení obrázku do buňky jako pozadí?
Ano. Pro buňku můžete nastavit picture fill, obrázek pak pokryje oblast buňky podle zvoleného režimu (roztahování nebo dlaždice).