当記事では、PHPでPowerPointを読み込み、全てのスライドをjpeg画像で出力する方法を掲載しています。
PHPでExcelを操作するライブラリは多くありますが、PowerPointは少ないですね。
本当はLinuxのサーバーで行いたかったのですが、難しそうなのでWindowsサーバーにしました。
今回は、COMクラスを使用して行うので、Windowsサーバー上での話となります。
COM オブジェクトのインスタンスを作成してPowerPointのライブラリを利用します。
COMクラスを利用できるように、php.ini に以下を記述します。
extension=php_com_dotnet.dll
環境
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();
他に良い方法あれば教えてください。