1

URL から PDF を作成するために使用する素晴らしいソフトウェア wkhtmltopdf を本番 Debian サーバーにインストールしました。結果のPDFをクライアントにストリーミングします(正しい用語であることを願っています)。サーバー側に保存することには関心がありません。

ローカル URL (つまり、独自のサーバー上) からのみ PDF を生成します。ただし、サーバーには複数のサイトがあるため、URL は依然としてローカル IP ではなくドメインに基づいています。

私たちの問題は、一部のローカル ページでは、完全に空白のページ (PDF でさえない) しか返されないことです。レスポンス コードは 200 ですが、コンテンツ タイプは text/html です。PDF がクライアントに正常にストリーミングされたページの場合、コンテンツ タイプは application/pdf です。

PDF の生成で何か問題が発生したのではないかと考えたので、PHP が実行するコマンドとまったく同じコマンドを実行すると、PDF が正常に生成されました。

このページにあるライブラリを使用して、PHP を wkhtmltopdf に接続します。

$pdf = new WkHtmlToPdf(array(
        'margin-left'=>0,
        'margin-right'=>0,
        'margin-top'=>0,
        'margin-bottom'=>0,
        'print-media-type',
        'disable-smart-shrinking'
    ));
    $url = "http://myserver.se/$url";
    $pdf->addPage($url);
    $pdf->send();

一部の URL で空白のページが返されるのはなぜですか?

4

1 に答える 1

0

結局のところ、問題は私が使用していたライブラリにありました。何が問題だったのか正確にはわかりませんが、wkhtmlpdf クラスの send メソッドの proc_close は、PDF が正常に作成されたときに、予想される 0 ではなく 2 を返していました。これにより、ライブラリは PDF が作成されていないと判断し、単にクライアントに何も出力されなかったことを意味する false を返しました。代わりに、PHP の file_exists 関数を使用してファイルが存在するかどうかを確認することで解決しました。

于 2013-04-12T22:58:27.303 に答える