2012-05-07 21 views
7

私は、次のないPHPのループを持っている:PDFを生成する前に画像を確実に読み込む方法を教えてください。

  1. CURL
  2. ローカルファイルにページのHTMLを保存し、ログイン
  3. を必要
  4. キャプチャおよび内部ページを経由してWebページにログインWKHTMLTOPDFを使用して
  5. 、私がいる問題は、たまに(時間のかもしれない〜30%)で、画像をPDFにレンダリングされないということですPDF

としてページをレンダリング。保存したHTMLファイルを開くと、画像が表示されるように手動でページを更新する必要があることがわかります。

実際に画像を読み込む方法についてのアイデアはありますか?物事は私が試してみた:それぞれ、すべてのライン

    1. sleep(n)を、それがどんなイメージをロードするために十分な時間を持っていることを確認するために私WKHTMLTOPDFコールに--javascript-delay 30000を追加します。

    #1かなり悪く、#2はまったくありませんでした。

    ありがとうございます!

  • +1

    ローカルHTMLの画像参照はまだ有効ですか?したがって、リモートサーバーからすべてのイメージを取得し、ローカルの適切な場所にコピーする必要があります。私はCURLなどを介して有効なクッキーを取得し、wkhtmltopdfにこれを供給すると、リモート認証されたページに直接行くより簡単になるのだろうか? – halfer

    +0

    wkhtmltopdfには実際にクッキーを生成する方法がありますが、この特定の状況(したがってCURLルート)で作業するのは悪夢でした。私がHTMLを読むと、私はHTMLファイルを開いてイメージを見るためにハードリフレッシュできるので、リモートイメージパスへのすべてのパスを置き換えています。イメージを取得するのに十分なoomphがないようです毎回。ワーストケースの場合、私はwkhtmltopdfで動作するクッキーを取得しようとすることができますね。 – Chords

    +2

    別の方法として、 '--page-requisites'と' --convert-links'オプションで 'wget'を使ってHTML/CSS/Imagesをローカルの場所にダウンロードし、同時にリンクを変更することができます。次に、ローカルコピーに対してPDFレンダラを実行します。 – Darien

    答えて

    1

    例の間に、すべての画像リンクのHTMLファイルを解析し、curlを使用してHTMLファイルを個別にダウンロードし、ローカルに保存してから、保存したHTMLファイルのリンクをポイントするように新しいローカルイメージリソースをリモートのイメージリソースではなく使用します。

    これは大幅にPDFとしてHTMLのレンダリング画像のロード時間を改善する必要があります。

    +0

    ありがとう、スティーブ - これは私がやっていたもので、完璧に動作します。 – Chords

    0

    私は決してこれをやったことはありませんが、curl_getinfo()を反復呼び出ししてからCURLINFO_SIZE_DOWNLOADの値を読み取ってダウンロードが完了したかどうかを調べることができます。

    あなたはcURLを持つHTMLをこすりした後、それぞれのimg要素を通してPHPのループを持っている場合はどう
    0

    と、画像ファイルのバイナリデータを読み込むと、開かれたイメージファイルのbase64でエンコード値で画像のsrc url属性を置き換えるように:

    '<img src="data:image/jpg;base64,'. base64_encode($imagedata) . '"/>'

    それはあなたのすべての画像は、「ロードさ」であることを確認し、すべての画像をダウンロードしていた前に開始PDF変換の問題を防止するためのプログラム的な方法を与えるよりも、base64でエンコードされた画像データがページにハードコーディングされている場合...

    +0

    これは、ビューを使ったPDFレンダリングのためだけに新しいレイアウトが必要です。あまり練習しない。多くの画像では、PHPのmem制限を打つことはさらに簡単です。 – thevikas

    0

    画像にonLoadを追加できませんでしたロード中であることを知る必要がありますか?

    <img src='foo.jpg' onLoad='callbackFuncion();'/> 
    
    0

    のようなものは、おそらくあなたは、ローカルストレージに画像をdowloadingし、src属性を置き換え、IMGタグを探し、ダウンロードしたHTMLを処理することができます。そうすれば、すべての画像が利用可能になったらpdfを生成するはずです。

    関連する問題