2016-08-24 5 views
0

に複数のPDFファイルをマージ:私が使用したスクリプトは、ルートフォルダにある私は次のコードでGhostscriptを使用して自分のサーバー上で複数のPDFファイルをマージしようとしているPHPのGhostscriptと1

$files = array(
     '1.pdf', 
     '2.pdf', 
     '3.pdf' 
); 

$output = 'single.pdf'; 

$cmd = "gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=$output "; 

foreach($files as $file) 
    $cmd .= "pdfs/$file "; 

var_dump(shell_exec($cmd)); 

とPDFファイルは、PDFファイルという名前のフォルダにあります。

/[pdfs] 
|__ 1.pdf 
|__ 2.pdf 
|__ 3.pdf 
script.php 

フォルダとファイルのアクセス権がすべて777あります。

これにもかかわらず、何も起こっておらず、戻り値はNULLです。

どうしたのですか? Ghostscriptを使用して複数のPDFファイルを1つのファイルにマージする正確な方法は何ですか?

+0

これを実行する代わりに$ cmdをエコーし​​てみました。これをコピーして端末に貼り付けて、コマンドが有効で動作していることを確認できますか? –

+0

私はそれを試すことができますが、どの端末を使用するのですか?私は自分のサーバーをチェックしたところ、PDFファイルが最終的にマージされ、出力結果が正しいことがわかりました。私は最後のテストから何もしなかった。だから私はそれはちょうど時間の問題かもしれないと思う。それにかかる時間を計算する方法はありますか? – user3292788

答えて

0

ちょっとしたコメントです。 Ghostscriptはではなく、の 'merge' PDFファイルを入力として複数のPDFファイルを取り込み、視覚的な外観を入力と同じにする必要がありますが、PDFファイルと入力をマージしない新しいPDFファイルを作成できます完全に解釈され、新しいファイルには入力ファイルと共通の外観があります。

Ghostscriptが正しく動作していますか? 1つのPDFファイルを処理しようとしましたか? それは動作しますか?

そうでない場合は、$ PATH環境変数にGhostscript実行可能ファイルが格納されているディレクトリを持っていない可能性があります(よくある問題です)。あなたは、コマンドラインでのGhostscript実行可能ファイルへの完全修飾パスを供給することによってこれをテストするので、代わりにすることができます:あなたはへのパスを変更する必要があります明らかに

$cmd = "/usr/local/bin/gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=$output "; 

$cmd = "gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=$output "; 

のようなものを試してみてくださいあなたの設定に合ってください。それがうまくいけば、問題はディレクトリが$ PATHにないことになります。追加するか、フルパスを使うだけです。

私はあなたを助けることができない論理的なエラーもあります。

「foreach」は、配列内の各ファイルに対してcmdを一度呼び出すように見えます。これは、各ファイルがGhostscriptの呼び出しによって処理されることを意味します。したがって、各ファイルは個別のPDFファイルを生成します。彼らはすべて同じOutputFileを使用しているので、お互いを上書きします。

すべてのファイルの入力を使用して1つの出力を作成する場合は、入力ファイルごとに一度ではなく、を一度にと呼ぶ必要があります。コマンドラインにすべての入力ファイルを含める必要があります。あなたが今持っているもの。本質的に

は次のとおりです。

gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=single.pdf 1.pdf 
gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=single.pdf 2.pdf 
gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=single.pdf 3.pdf 

何をしたいです:

gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=single.pdf 1.pdf 2.pdf 3.pdf 

私はそれを修正する方法を伝えることはできませんPHPについて何も知らないので。

+0

まず、あなたの詳細なコメントをありがとう、あなたのアプローチは間違っています。 'foreach'は各ファイルに対してコマンドを呼び出さずに文字列変数' $ cmd'を連結するだけです。 Ghostscriptは 'shell_exec'メソッドで呼び出され、スクリプトの最後に1回だけ実行されます。実際には、私の問題は解決されました。それは単なる時間の問題でした。私は数分待って出力PDFファイルがそこにありました。 – user3292788

+0

さて、私はPHP開発者ではないと言った:-) – KenS

関連する問題