PHP PowerPointの全てのスライドをjpeg画像で出力

PHP PowerPoint
2014/01/23

PHPでPowerPointを操作

概要

当記事では、PHPでPowerPointを読み込み、全てのスライドをjpeg画像で出力する方法を掲載しています。

PHPでExcelを操作するライブラリは多くありますが、PowerPointは少ないですね。
本当はLinuxのサーバーで行いたかったのですが、難しそうなのでWindowsサーバーにしました。

今回は、COMクラスを使用して行うので、Windowsサーバー上での話となります。

サンプルコード

COMクラスの設定

COM オブジェクトのインスタンスを作成してPowerPointのライブラリを利用します。
COMクラスを利用できるように、php.ini に以下を記述します。


extension=php_com_dotnet.dll

PHPで出力処理

環境
OS : Windows 7
php : 5.4.22
PowerPoint 2010

ちなみに、Apacheをサービス起動していると、正常に動作しないようです。
Apacheを実行したセッションのデスクトップが必要なようです。

下記では、hoge.pptxの全てのスライドをjpegで出力しています。


$file_name = 'hoge.pptx';
$ppt_app = new COM('PowerPoint.Application');
$ppt_app->Visible = true;	//起動(不要)

$presentation = $ppt_app->Presentations->Open(realpath($file_name));	//読込
$slide_count = $presentation->Slides->Count;

for($i=1;$i<=$slide_count;$i++) {
	$presentation->Slides[$i]->Export('/' . $i . '.jpg', "jpg", 1024,768);	//出力
}

$presentation->Close();
$ppt_app->Quit();

「$presentation->Close();」では、開いたファイルを閉じています。
「$ppt_app->Quit();」では、PowerPointを終了しています。

上記の方法では、複数ブラウザから一度にアクセスして処理した場合、競合してしまいエラーとなります。
それを解決するには、「$presentation->Close();」、「$ppt_app->Quit();」をしないことです。
また、Openの第二引数を true に指定して読み取り専用で開くようにしましょう。

このようにすると、サーバー上でひたすらPowerPointが開かれていくので、どこかのタイミングで下記のようにしてPowerPointを全て閉じます。


$ppt_app = new COM('PowerPoint.Application');
$ppt_app->Quit();

他に良い方法あれば教えてください。

Related

Vagrant+Docker+PHP環境で「session.save_path」指定時に、セッションファイルが空になるエラー

ファイル共有でのフォルダの所有者を設定 結論 PHP5.4.28 か...

LINEと連携したテイクアウト事前注文システム徹底比較!

目次 テイクアウト予約・注文受付システムのトレンド LI...

PHPで動画の撮影日を取得

PHPで動画の撮影日を取得 概要 PHPからffprobeコマンドを実行...

FullCalendarでGoogleカレンダーのようなUIを実装

jQueryプラグインFullCalendarのサンプル 概要 FullCalendarを使ç”...

PHP Laravel5.2でmulti-auth(複数テーブルでの認証)を実装

Laravel5.2でマルチ認証 概要 LaravelとはPHPの中で今最も伸びã...

PHP 正規表現でIPアドレス形式の文字列か判定

正規表現でIPアドレスの入力チェック 概要 フォームでå...
トップへ戻る