PHPPowerpoint устанавливает гиперссылку в ячейке таблицы

Я хочу установить гиперссылку в ячейке таблицы:

/* ADD TABLE ROW */
    foreach ($entries as $entry) {
        $row = $tableShape->createRow();
        $row->getFill()->setFillType(Fill::FILL_SOLID)
                ->setStartColor(new Color('FFFFFFFF'))
                ->setEndColor(new Color('FFFFFFFF'));
        $row->nextCell()->createTextRun(date_format($entry->getDate(), "d.m.Y"));
        $row->nextCell()->createTextRun($entry->getTonality()->getName());
        $row->nextCell()->createTextRun($entry->getAccountname());
        $row->nextCell()->createTextRun($entry->getContent());
        $row->nextCell()->createTextRun($entry->getFollower());
        $row->nextCell()->createTextRun($entry->getLink());
    }

Этот код не работает:

$row->nextCell()->createTextRun('Link')->setUrl($entry->getLink())
                    ->setTooltip('Link');;

2 ответа

Проблема была исправлена ​​в ветке разработки.

Ссылка: https://github.com/PHPOffice/PHPPowerPoint/commit/43bea92220396a3c7178f649afbc961be28828c1

Я делаю это сейчас, добавляя фигуру в правильное положение.

/* SET HYPERLINK WITH SHAPE */
$shape = $slide->createRichTextShape();
$shape->setWidth($this->cell_link_width)
      ->setHeight($this->cell_height)
      ->setOffsetX($this->cell_link_offsetX)
       >setOffsetY($this->tableOffsetY + $height);
        $textLink = $shape->createTextRun('Link');
        $textLink->getHyperlink()->setUrl('http://' . $entry->getLink())
       >setTooltip('http://' . $entry->getLink());

Я написал алгоритм и определил переменную line_height, чтобы установить ссылку на нужную позицию.

Вот моя полная функция:

public function createTableSlide($objPHPPowerPoint, $pathLogo, $user, $entries) {

    $slide = $this->createTemplatedSlide($objPHPPowerPoint, $pathLogo, $user);
    /* CREATE TABLE WITH COLUMNS */
    $tableShape = $this->getTable($slide, 6);
    $this->setTableSlideHeader($slide, 'Social Media', 'Twitter', $tableShape);

    /* ADD TABLE ROW */
    $i = 1;
    $height = 22;
    $height_tmp = 0;
    $max_height = 554;
    foreach ($entries as $entry) {
        $height += $height_tmp; 
        $modulId = $entry->getModul()->getId();

        /* NEW SLIDE IF TABLE HEIGHT AT END OF SLIDE */
        if($height >= $max_height){
            $slide = $this->createTemplatedSlide($objPHPPowerPoint, $pathLogo, $user);
            /* CREATE TABLE WITH COLUMNS */
            $tableShape = $this->getTable($slide, 6);
            $this->setTableSlideHeader($slide, 'Social Media', 'Twitter', $tableShape);

            $i = 1;
            $height = 22;
            $height_tmp = 0;
        }

        $row_in_cell = ceil(strlen($entry->getContent()) / $this->char_in_row);

        if ($row_in_cell > 2) {
            $height_tmp = $row_in_cell * $this->line_height + $this->line_height;
        } else {
            $height_tmp = $this->line_height * 3 + 0.8;
        }



        $row = $tableShape->createRow();
        $row->setHeight($this->cell_height);
        $row->getFill()->setFillType(Fill::FILL_SOLID)
                ->setStartColor(new Color('FFFFFFFF'))
                ->setEndColor(new Color('FFFFFFFF'));
        $row->nextCell()->createTextRun(date_format($entry->getDate(), "d.m.Y"));
        $row->nextCell()->createTextRun($entry->getTonality()->getName());
        $row->nextCell()->createTextRun($entry->getAccountname());
        $row->nextCell()->createTextRun($entry->getContent());
        $row->nextCell()->createTextRun($entry->getFollower());
        $row->nextCell()->createTextRun($modulId);
        /* SET HYPERLINK WITH SHAPE */
        $shape = $slide->createRichTextShape();
        $shape->setWidth($this->cell_link_width)
                ->setHeight($this->cell_height)
                ->setOffsetX($this->cell_link_offsetX)
                ->setOffsetY($this->tableOffsetY + $height);
        $textLink = $shape->createTextRun('Link');
        $textLink->getHyperlink()->setUrl('http://' . $entry->getLink())
                ->setTooltip('http://' . $entry->getLink());
        $i++;
    }
}

Надеюсь, это поможет вам, если вы ищете то же решение. Если у кого-то есть лучшее решение, он может ответить мне:)

Другие вопросы по тегам