久しぶりにPHPOfficeを覗いてみたら「PHPPresentation」(LGPL v3ライセンス)が更新されているようだったので、さっそく使ってみました。
PHPPresentationのインストール
PHPPresentationも、PhpSpreadsheetやPHPWordと同じく「composer install」するだけで導入できます。
composer.json
{ "require": { "phpoffice/phppresentation": "dev-master" } }
PHPPresentationの呼び出し
インストールが終わったら、さっそくPHPPresentationを使ってPowerPointファイルを作成してみます。
<?php require_once './vendor/autoload.php'; use PhpOffice\PhpPresentation\PhpPresentation; use PhpOffice\PhpPresentation\IOFactory; use PhpOffice\PhpPresentation\Style\Color; use PhpOffice\PhpPresentation\Style\Alignment; //新規プレゼンテーション作成 $phpPres = new PhpPresentation(); //ドキュメントのプロパティ設定 $phpPres->getDocumentProperties() ->setCreator('@kinuasa') ->setCompany('初心者備忘録') ->setTitle('PHPPresentation Sample') ->setDescription('PHPPresentationのサンプルです。'); //図形(テキスト)追加 $slide = $phpPres->getActiveSlide(); $shape = $slide->createRichTextShape() ->setHeight(300) ->setWidth(600) ->setOffsetX(170) ->setOffsetY(180); $shape->getActiveParagraph() ->getAlignment() ->setHorizontal(Alignment::HORIZONTAL_CENTER); $textRun = $shape->createTextRun('こんにちは、世界!'); $textRun->getFont() ->setName('MS Pゴシック') ->setBold(true) ->setSize(48) ->setColor(new Color('8e44ad')); //ファイルダウンロード //MIMEタイプ:https://technet.microsoft.com/ja-jp/ee309278.aspx header('Content-Description: File Transfer'); header('Content-Disposition: attachment; filename*=utf-8\'\'' . rawurlencode('サンプル.pptx')); header('Content-Type: application/vnd.openxmlformats-officedocument.presentationml.presentation'); header('Content-Transfer-Encoding: binary'); header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); header('Expires: 0'); $xmlWriter = IOFactory::createWriter($phpPres, 'PowerPoint2007'); ob_end_clean(); //バッファ消去 $xmlWriter->save('php://output');
上記コードを実行すると、下図のようなファイルが出力されます。
日本語表示も問題ありません。
ただ、リファレンスによれば下記コードで既存ファイルが読み込めるはずなのですが、私が試した限りでは、既存ファイルを元にファイル作成すると、ファイルが破損して上手くいきませんでした。
$oReader = IOFactory::createReader('PowerPoint2007'); $oReader->load(__DIR__ . '/sample.pptx');
このあたりはまだ発展途上といった感じがしますが、使い勝手は良く、直感的に扱えるので、PHPでPowerPointファイルを出力する際には役立つライブラリだと思います。
この記事へのコメントはありません。