Office関連

PHPPresentationを使ってPHPからPowerPointファイルを出力してみる。

久しぶりにPHPOfficeを覗いてみたら「PHPPresentation」(LGPL v3ライセンス)が更新されているようだったので、さっそく使ってみました。

PHPPresentationのインストール

PHPPresentationも、PhpSpreadsheetPHPWordと同じく「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ファイルを出力する際には役立つライブラリだと思います。

Nintendo Switch「スナックワールド トレジャラーズ ゴールド」に3DS版からデータ引継ぎはできるの?前のページ

【ワールドネバーランド】Switchでまったり箱庭ゲーム!次のページ

関連記事

  1. Office関連

    Office 2013の開発者用リファレンス

    「Word2013 VBA の日本語ヘルプ」でも回答していますが、Of…

  2. Excel

    指定したAccessファイルで「データベースの最適化/修復」を実行するVBAマクロ

    大分前の記事になりますが、開いているデータベースを最適化するマクロのコ…

  3. Office関連

    [リボン・カスタマイズ]カスタムタブを共有する。

    ※ 2015/2/18 コードに一部誤りがあったので修正しました。…

  4. Office関連

    Gmail APIを使ってメール送信するVBAマクロ(2)

    前回の記事でGmail APIを使ってメールを送信するVBAマクロを紹…

  5. Office関連

    Faviconをダウンロードするマクロ

    WebサイトからFaviconを抜き出すAPIがあったので早速使ってみ…

  6. Office アドイン

    [Office用アプリ]第一回 Apps for Office 勉強会で登壇しました。

    19日(金)に第一回 Apps for Office 勉強会が東京で開…

コメント

  • コメント (0)

  • トラックバックは利用できません。

  1. この記事へのコメントはありません。

Time limit is exhausted. Please reload CAPTCHA.

※本ページはプロモーションが含まれています。

Translate

最近の記事

アーカイブ

PAGE TOP