這個包是 github.com/PHPOffice 家族用於匯出ppt用的.
composer require phpoffice/phppresentation
預設安裝的是master分支的,建議安裝develop分支.master分支3年前已經停止合併了,develop分支仍在維護,有相當一部分bug是最近幾年修改的.如我遇到的匯出的ppt在office顯示正常,但是在wps上的文字框中的內容位置錯亂.
composer require phpoffice/phppresentation dev-develop
建立ppt
$presentation = new PhpPresentation();
// 移除0索引
$presentation->removeSlideByIndex(0);
// 設定長寬比
$layout = new DocumentLayout();
// 長寬比,在PowerPoint2007下實際長寬是25cm和15cm左右,但是2016之後的office版本是32cm和24cm,產品給模板的時候得按照這個長寬比給,不然會有偏差
$layout->setDocumentLayout('screen16x9');
$presentation->setLayout($layout);
// 寫一些頁面
$this->generateSheet($presentation);
$oWriterPPTX = IOFactory::createWriter($presentation, 'PowerPoint2007');
$path = storage_path('ppts/匯出ppt' . now()->format('YmdHis') . '.pptx');
if (!file_exists(storage_path('ppts'))) {
mkdir(storage_path('ppts'));
}
// 生成ppt
$oWriterPPTX->save($path);
return $path;
生成sheet
private function sheet(PhpPresentation $presentation)
{
$currentSlide = $presentation->createSlide();
// 建立畫布
$shape = $currentSlide->createDrawingShape();
// 背景圖,07版ppt下長寬為960畫素和540畫素
$this->createBackImage($shape, 'xxx.png', 960, 540);
// 生成文字框
$this->createText(...$params);
// 新增畫布圖片
$this->addImage(...$params);
}
背景圖
private function createBackImage(AbstractShape $shape, $url, $width, $height, $offsetX = 0, $offsetY = 0)
{
$url = public_path("imgs/{$url}");
// 設定圖片屬性
$shape->setPath($url) // 本地圖片路徑
->setWidth($width) // 設定寬
->setHeight($height) // 設定高
->setOffsetX($offsetX) // 設定x軸偏移量
->setOffsetY($offsetY); // 設定y軸偏移量
}
文字內容
public function createText(
Slide $slide,
$width,
$height,
$content,
$size,
$color,
$horizontalAlign = 'ctr',
$verticalAlign = 'ctr',
$offsetX = 0,
$offsetY = 0,
$fillColor = Color::COLOR_WHITE,
$font = '微軟雅黑',
$bold = false
) {
// 填充屬性
$fill = new Fill();
$fill->setFillType(Fill::FILL_SOLID)
->setStartColor(new Color($fillColor))
->setEndColor(new Color($fillColor));
// 文字框屬性
$shape = $slide->createRichTextShape() // 建立文字框
->setFill($fill) // 設定背景填充
->setWidth($width)
->setHeight($height)
->setOffsetX($offsetX)
->setOffsetY($offsetY);
// 段落屬性
$shape->getActiveParagraph()
->getAlignment()
->setHorizontal($horizontalAlign)
->setVertical($verticalAlign);
// 生成
$textRun = $shape->createTextRun($content);
// 字型屬性
$textRun->getFont()
->setName($font)
->setBold($bold)
->setSize($size)
->setColor(new Color($color));
}
放置圖片
public function addImage(Slide $slide, $url, $width, $height, $offsetX = 0, $offsetY = 0)
{
$shape = new Base64();
$shape->setResizeProportional(false);
// 這裡與上面不同的是使用了獲取資料流轉base64使用網路圖片填充圖片的方式
$shape->setData("data:image/jpeg;base64," . base64_encode(file_get_contents($url)))
->setWidth($width) //設定圖片寬高
->setHeight($height)
->setOffsetX($offsetX) //設定圖片在頁面中的偏移量
->setOffsetY($offsetY);
$slide->addShape($shape);
}
以上就是我在這段時間使用該外掛所用到的一些方法了,能解決絕大部分問題了.如果還有其他更多的需求如設定過場動畫,都可以閱讀官方文件 phppresentation.readthedocs.io/en/... 找到.
本作品採用《CC 協議》,轉載必須註明作者和本文連結