2012-05-08 32 views
0

私はwkhtmltopdfをウェブサイトのページに変換しようとしてきましたが、同じページを変換していません。それは変換され、(Googleとbbc.co.ukを試して、両方の仕事)外部のページを格納しますので、許可は良いですが、静的なHTMLファイルまたはスクリプトによって生成されたいずれかのローカルページを変換しようとすると、失敗する前に約3分かかります。wkhtmltopdfがローカルページをPDFに変換できません

出力にはページが読み込まれなかったと表示されますが、強制的に無視すると空白のPDFが表示されます。

セッションロックの可能性がありますが、セッションを終了すると同じ問題が発生しました。私はそれがダウンし、サーバーが

かかわらず、行動することができる方法ここで問題のコードだと何か感じる:

  session_write_close(); 
    set_time_limit (0); 
      ini_set('memory_limit', '1024M'); 
    Yii::app()->setTheme("frontend"); 

    // Grabbing the page name 
    $ls_url = Yii::app()->request->getHostInfo().Yii::app()->request->url; 

    // Let's remove the PDF otherwise we'll be in endless loop 
    $ls_url = str_replace('.pdf','',$ls_url); 

    // Setting paths 
    $ls_basePath = Yii::app()->basePath."/../extras/wkhtmltopdf/"; 
    if(PHP_OS=="Darwin") 
     $ls_binary = $ls_basePath . "wkhtmltopdf-osx"; 
    else 
     $ls_binary = $ls_basePath . "wkhtmltopdf"; 

    $ls_generatedPagesPath = $ls_basePath . "generated-pages/"; 
    $ls_outputFileName = str_replace(array("/",":"),"-",$ls_url)."--".date("dmY-His").".pdf"; 
    $ls_outputFile = $ls_generatedPagesPath. $ls_outputFileName; 

    // making sure no nasty chars are in place 
    $ls_command = escapeshellcmd($ls_binary ." --load-error-handling ignore " . $ls_url . " " . $ls_outputFile); 


    // Let's run things now 
    system($ls_command); 
+0

wkhtmltopdfのデバッグ時に私にとっては、ステップ1は 'shell_exec()'でコマンドをハードコードすることです。それがうまくいくなら、wkhtmltopdfの問題ではないことが分かります。私は、他のものを扱う前にローカルコピーで作業するコードの1行を取得します。 – Chords

+0

しかし、ローカルページを変換しようとすると... failing_の前に3分ほどかかります。コマンドラインからもそれを実行するとしますか? – halfer

答えて

2

はあなたにその正確なURL lynxをしましたか? wkhtmltopdfは実際には小さく強力なWebkitブラウザであるため、通常のブラウザと同じように機能しません。

あなたが指定したURLを確認し、ページ内の外部URLがサーバーからアクセス可能であることを確認します。 CSS、外部画像、iframeなどをロードしてからPDFを作成します。

個人的に、私はwkhtmltpdfが大好きです。何もそれを打つ。

+0

Lynxでテスト済みです。まったく同じ症状、ローカルアドレスは出力なしで30秒かかる(おそらく失敗した)、Googleはすぐに出力を返します。サーバの設定で何か起きているように見えます。どのようなアイデアを引き起こす可能性がありますか?私のホストは、1つのプロセスにApacheをロックするようなことをしていますか? – user1031348

+0

は、wkhtmltpdfではないことを意味します。 URLにあなたのローカルホストを使用していますか?サーバーのURLからドメイン名をpingしてみてください。もしあなたのドメイン名があなたのIPに解決され、あなたのファイアウォール+ NATによってピックアップされるので、決して外部IPから自分自身に接続することはできません。 – thevikas

+0

これはYiiによって生成されたURLを通じて実行されています。この場合、この場合はIPアドレスです(ドメインは現在アクティブではありません)。 pingも失敗したため、ファイアウォールされている可能性が非常に高くなっています。私はすべてのポート80を許可しようとしていたと思っていたが、私にはアクセスできない追加の手段があるようだ。私のホストに電話をしなければならないかもしれないように見えます。 – user1031348

関連する問題