9

次の処理を行う PHP ループがあります。

  1. CURL 経由で Web ページにログインする
  2. ログインが必要なキャプチャと内部ページ
  3. ページの HTML をローカル ファイルに保存する
  4. WKHTMLTOPDF を使用して、ページを PDF としてレンダリングします。

私が抱えている問題は、時々 (おそらく ~30% の時間)、画像が PDF にレンダリングされないことです。保存した HTML ファイルの 1 つを開くと、画像が表示されるようにページを手動で更新する必要があることがわかります。

画像の読み込みを実際に確実にする方法についてのアイデアはありますか? 私が試したこと:

  1. sleep(n)すべての行の間
  2. --javascript-delay 30000WKHTMLTOPDF 呼び出しに追加して、画像を読み込むのに十分な時間を確保します。

#1 はかなり悪化し、#2 は何もしませんでした。

ありがとう!

4

5 に答える 5

1

cURLでhtmlをスクレイプした後、phpで各img要素をループさせ、画像ファイルのバイナリデータを読み込み、画像のsrcurl属性を開いた画像ファイルのbase64エンコード値に置き換えた場合はどうなりますか。

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

base64画像データがページにハードコードされている場合は、すべての画像が「読み込まれている」ことをプログラムで確認し、すべての画像がダウンロードされる前にPDF変換の問題が発生するのを防ぐことができます...

于 2012-05-11T16:19:13.857 に答える
1

例のステップ 3 と 4 の間に、すべての画像リンクの HTML ファイルを解析し、それらを curl を使用して個別にダウンロードし、それらをローカルに保存してから、保存した HTML ファイル内のリンクを更新して新しいローカル画像を指すようにすることを検討することをお勧めします。リモートリソースの代わりにリソース。

これにより、HTML を PDF としてレンダリングする際の画像の読み込み時間が大幅に改善されます。

于 2013-01-11T19:59:58.407 に答える
0

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

于 2012-12-01T12:08:24.410 に答える
0

私はこれを行ったことはありませんが、繰り返し呼び出しcurl_getinfo()て値を読み取ることで、ダウンロードが完了したかどうかを確認できますCURLINFO_SIZE_DOWNLOAD-その値が変更されなくなるまで?

于 2012-05-11T14:15:45.537 に答える
0

ロードされていることを知る必要がある画像に onLoad を追加できませんでしたか? 何かのようなもの

<img src='foo.jpg' onLoad='callbackFuncion();'/>
于 2012-07-20T00:18:12.533 に答える