0

PHP/MySqlで構築されたDBシステムがあります。私はこれでかなり新しいです。システムにより、ユーザーは請求書をアップロードできます。他の人は、請求書を支払う許可を与えます。経理担当者が小切手をアップロードします。小切手がアップロードされた後、表紙として PDF を生成し、PDFTK (Ben Squire の PDFTK-PHP-Library を使用) を使用してすべてのファイルを結合し、ダウンロードする単一の PDF をユーザーに提示します。

一部のユーザーが PDF ファイルをアップロードすると、PDF を他のファイルと結合しようとすると、PDFTK が無期限にハングします (ただし、ほとんどの場合は問題なく動作します)。エラーは返されず、ハングするだけです。システムに戻るには、ユーザーはキャッシュをクリアして再ログインする必要があります。サーバーによってログに記録されるエラー メッセージはなく、フリーズするだけです。Acrobat でファイルを見て動作するファイルと動作しないファイルの唯一の違いは、問題のあるファイルが正当なサイズ (8.5 x 14) であることです ... しかし、独自の正当なサイズのファイルを作成して試してみると、それは正常に動作します。

Putty を使用してコマンド ラインに移動し、同じ問題を再現しました。PDFTK はファイルを読み取ることができず、コマンド ラインでもハングします。FPDFを使用してファイルを結合し、ファイルでエラーを取得するPDFMergeを使用してみました(これから返されるエラーは次のとおりです:FPDFエラー:予期された場所でオブジェクト(4、0)が見つかりません)。コマンド ラインで ImageMagick を使用して PDF を JPG に変換できましたが、「警告: ファイルに無効な xref エントリがあります: 2. xref テーブルを再構築しています。」というエラーが表示されます。次に、それをjpgに変換しますが、他のいくつかのあまり役に立たない警告を出します.

システムをハングアップさせずに有効かどうかを判断するために PHP に PDF ファイルをチェックさせることができれば、ImageMagick を使用してファイルを変換し、それを PDF に戻すことができますが、すべてのファイルに対してこれを実行したくはありません。アップロード時にファイルの有効性をチェックして、システムをハングさせずに変換する必要があるかどうかを確認するにはどうすればよいですか?

問題を引き起こしているファイルへのリンクは次のとおりです: http://www.cssc-testing.org/accounting/school_9/20130604-a1atransportation-1.pdf

あなたが提供できるガイダンスを事前にありがとう!

私のコード(私は新しいので、あまりきれいではないと思います):

$pdftk = new pdftk();
if($create_cover) { $pdftk->setInputFile(array("filename" => $cover_page['server'])); }

// Load a list of attachments
$sql = "SELECT * FROM actg_attachments WHERE trans_id = {$trans_id}";
$attachments = Attachment::find_by_sql($sql);
foreach($attachments as $attachment) {
    // Check if the file exists from the attachments
    $attachment->set_variables();
    $file = $attachment->abs_path . DS . $attachment->filename;
    if(file_exists($file)){
        // Use the pdftk tool to attach the documents to this PDF
        $pdftk->setInputFile(array("filename" => $file));
    }
}

$pdftk->setOutputFile($save_file);
$pdftk->_renderPdf();

呼び出している $pdftk クラスは次のものです: https://github.com/bensquire/php-pdtfk-toolkit

4

2 に答える 2

0

exec() を使用して Ghostscript を使用してファイルをチェックすることもできます。

ここで受け入れられていない回答が役立つ場合があります。

プログラムで生成された PDF の問題をどのように見つけますか?

于 2013-06-04T22:48:36.100 に答える
0

これが適切/最善の修正であるとは言えませんが、問題が解決する可能性があります。

pdf_parser.php で、次の行をコメントアウトします。

$this->error("Unable to find object ({$obj_spec[1]}, {$obj_spec[2]}) at expected location");

行 544 の近くにあるはずです。

また、次のものを置き換える必要がある可能性があります。

    if (!is_array($kids))
        $this->error('Cannot find /Kids in current /Page-Dictionary');

と:

    if (!is_array($kids)){
     //   $this->error('Cannot find /Kids in current /Page-Dictionary');
     return;
    }

fpdi_pdf_parser.php ファイルで

それが役立つことを願っています。それは私のために働いた。

于 2014-05-23T15:08:27.013 に答える