1

ppt ファイルのスライドを PNG ファイルに変換しようとしていますが、コードに問題があります。

ローカルテストでは、スクリプトは次の行でスタックしました:

$ppApp = new COM("PowerPoint.Application") or die ("Unable to instantiate PowerPoint");

次に表示"Maximum execution time of 30 seconds exceeded";

そして、ライブサーバーにアクセスすると、スクリプトは初めて機能しますが、その後エラーが表示されます

「致命的なエラー: メッセージ「ppt ファイル 1251.pptx を閉じることができませんでした」を含む例外「例外」がキャッチされませんでした。

私は Windows サーバーを使用していますが、ppt プロセスの使用方法に何か問題があると思います。

コードは次のとおりです。

$ppApp = new COM("PowerPoint.Application") or die ("Unable to instantiate PowerPoint");
    $ppApp->Visible = True;
    $strPath = realpath(basename(getenv($_SERVER["SCRIPT_NAME"])));
    $ppName = $jobQuery['id'].".pptx";
    $FileName = "MyPP";

    //*** Open Document ***//
    $ppApp->Presentations->Open(realpath($ppName));

    //*** Save Document ***//
    $p_opned =  $ppApp->ActivePresentation->SaveAs($strPath."/".$jobQuery['id']."_".$FileName,18);
    //$ppApp->ActivePresentation->SaveAs(realpath($FileName),17);
    $ppApp->Quit();
    $ppApp = NULL;
    unset($ppApp); 

ご協力ありがとうございました。

4

1 に答える 1

0

あなたの問題は保存場所にあるのか、単にファイルが見つからなかったのかもしれません.保存しようとしている場所が実際にあなたのコードから存在するかどうかはわかりませんか?

$strPath = realpath(basename(getenv($_SERVER["SCRIPT_NAME"])));

次のようにする必要があります。

$strPath = realpath(dirname(__FILE__));

このファイルが実際に次の場所に存在することを確認してください:

$ppName = $jobQuery['id'].".pptx";

次の方法で確認します。

file_exists($ppName)

同様の質問については、こちらを参照してください: PHP で PPT を PNG に変換する際の致命的なエラー

編集:

以下を試してください。 $p_opned が $ppApp オブジェクトへの参照を開いたままにしていたため、インスタンスが適切に削除されなかったと思います。

//*** Save Document ***//
$ppApp->ActivePresentation->SaveAs($strPath."/".$jobQuery['id']."_".$FileName,18);

編集2:

要求に応じて、例外を引き起こしていると思われる行をラップしてみてください (したがって、この行を想定しています)。

try {
  //*** Save Document ***//
  $ppApp->ActivePresentation->SaveAs($strPath."/".$jobQuery['id']."_".$FileName,18);
} catch (Exception $e) {
    echo 'Exception message: ',  $e->getMessage(), "\n";
}

エラー メッセージをもう一度見ても、別の修正後 (コードには記載されていません) でファイルを保存しようとしているため、開こうとした元のファイル (1251.pptx) を参照しています。

上記が機能しない場合は、'Open' スクリプト行の周りに Exception の try / catch をラップしてみてください。または、Quit する前に追加してみてください。

$ppApp->ActivePresentation->Close();

エラーの原因が、最初のインスタンス呼び出しの後も Powerpoint がまだぶらぶらしていることが原因である場合は、参照がまだどこかに生きているためであるに違いないので、すべてのコードをチェックしてみてください。それでもエラーが発生する場合は、質問に完全なエラー メッセージを含め、質問から最大実行エラー メッセージを削除する必要があります。これは実際には問題ではありません (「最大実行時間が 30 秒を超えました。 " メッセージはもうありませんか?)。

最後に、いつでも PowerPoint ライブラリを試すことができます。

http://phppowerpoint.codeplex.com/

于 2012-06-15T15:50:16.637 に答える