Správa tabulek v prezentacích v PHP

Úvod

Tabulka v PowerPointu je efektivní způsob, jak zobrazit a vyjádřit informace. Informace v mřížce buněk (uspořádaných v řádcích a sloupcích) 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ření tabulky od nuly

  1. Vytvořte instanci třídy Presentation.
  2. Získejte referenci na snímek pomocí jeho indexu.
  3. Definujte pole columnWidth.
  4. Definujte pole rowHeight.
  5. Přidejte objekt Table na snímek pomocí metody addTable.
  6. Procházejte každou Cell , abyste použili formátování na horní, dolní, pravý a levý okraj.
  7. Sloučte první dvě buňky první řady tabulky.
  8. Získejte přístup k TextFrame buňky Cell.
  9. Přidejte text do TextFrame.
  10. Uložte upravenou prezentaci.

Tento kód PHP vám ukazuje, jak vytvořit tabulku v prezentaci:

  # Instancuje třídu 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 okrajů 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 přímé a začíná od nuly. První buňka v tabulce 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 kód PHP vám ukazuje, jak určit číslování buněk v tabulce:

  # Instancuje třídu 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 okrajů pro každou buňku
    foreach($tbl->getRows() 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

  1. Vytvořte instanci třídy Presentation.

  2. Získejte referenci na snímek obsahující tabulku pomocí jeho indexu.

  3. Vytvořte objekt Table a nastavte jej na null.

  4. Procházejte všechny objekty Shape , dokud není tabulka nalezena.

    Pokud předpokládáte, že snímek, se kterým pracujete, obsahuje jedinou tabulku, můžete jednoduše zkontrolovat všechny jeho tvary. Když je tvar rozpoznán jako tabulka, můžete jej přetypovat na objekt Table. Pokud však snímek obsahuje několik tabulek, je lepší hledat požadovanou tabulku pomocí jejího setAlternativeText(String value).

  5. Použijte objekt Table, abyste pracovali s tabulkou. V níže uvedeném příkladu jsme přidali nový řádek do tabulky.

  6. Uložte upravenou prezentaci.

Tento kód PHP vám ukazuje, jak přistupovat k existující tabulce a s ní pracovat:

  # 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í referenci na nalezenou tabulku
    foreach($sld->getShapes() 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();
    }
  }

Zarovnání textu v tabulce

  1. Vytvořte instanci třídy Presentation.
  2. Získejte referenci na snímek pomocí jeho indexu.
  3. Přidejte objekt Table na snímek.
  4. Získejte objekt TextFrame z tabulky.
  5. Získejte Paragraph.
  6. Zarovnejte text vertikálně.
  7. Uložte upravenou prezentaci.

Tento kód PHP vám ukazuje, jak zarovnat text v tabulce:

  # 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á 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();
    }
  }

Nastavení formátování textu na úrovni tabulky

  1. Vytvořte instanci třídy Presentation.
  2. Získejte referenci na snímek pomocí jeho indexu.
  3. Získejte objekt Table ze snímku.
  4. Nastavte setFontHeight(float value) pro text.
  5. Nastavte setAlignment(int value) a setMarginRight(float value).
  6. Nastavte setTextVerticalType(byte value).
  7. Uložte upravenou prezentaci.

Tento kód PHP vám ukazuje, jak použít požadované možnosti formátování na text v tabulce:

  # Vytvoří instanci třídy Presentation
  $pres = new Presentation("simpletable.pptx");
  try {
    # Předpokládejme, že první tvar na první snímku je tabulka
    $someTable = $pres->getSlides()->get_Item(0)->getShapes()->get_Item(0);
    # Nastaví výšku fontu buněk tabulky
    $portionFormat = new PortionFormat();
    $portionFormat::setFontHeight(25);
    $someTable->setTextFormat($portionFormat);
    # Nastaví zarovnání textu buněk tabulky a pravý okraj v jednom volání
    $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ískání vlastností stylu tabulky

Aspose.Slides vám umožňuje získat vlastnosti stylu tabulky, abyste je mohli použít pro jinou tabulku nebo jinde. Tento kód PHP vám ukazuje, jak získat vlastnosti stylu z přednastavené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

    $pres->save("table.pptx", SaveFormat::Pptx);
  } finally {
    if (!java_is_null($pres)) {
      $pres->dispose();
    }
  }

Uzamčení poměru 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.

Tento kód PHP vám ukazuje, jak uzamknout poměr stran pro tabulku:

  $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 směr č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 vykreslování uvnitř buněk.

Jak mohu zabránit uživatelům v přesouvání nebo změně velikosti tabulky v konečném souboru?

Použijte zamykání tvarů k zakázání přesunu, změny velikosti, výběru atd. Tato zamknutí platí i pro tabulky.

Je podporováno vložení obrázku uvnitř buňky jako pozadí?

Ano. Můžete nastavit picture fill , aby buňka měla obrázek jako výplň; obrázek pokryje oblast buňky podle zvoleného režimu (roztažení nebo dlaždice).