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++;
}
}
Надеюсь, это поможет вам, если вы ищете то же решение. Если у кого-то есть лучшее решение, он может ответить мне:)