如何在生成PDF之前确保图像加载?

时间:2012-05-07 15:32:25

标签: php curl pdf-generation wkhtmltopdf

我有一个执行以下操作的PHP循环:

  1. 通过CURL登录网页
  2. 需要登录的捕获和内部页面
  3. 将页面的HTML保存到本地文件
  4. 使用WKHTMLTOPDF,将页面呈现为PDF
  5. 我遇到的问题是每隔一段时间(可能约占30%的时间),图像将无法在PDF中呈现。如果我打开一个保存的HTML文件,我会发现我需要进入并手动刷新页面以显示图像。

    有关如何务实确保图像加载的任何想法?我尝试过的事情:

      每行之间
    1. sleep(n)
    2. --javascript-delay 30000添加到我的WKHTMLTOPDF调用中,以确保它有足够的时间加载任何图像。
    3. #1使情况变得更糟,#2什么都没做。

      谢谢!

5 个答案:

答案 0 :(得分:1)

在第3步和第3步之间在您的示例中,您可能需要考虑解析所有图像链接的HTML文件并使用curl单独下载它们,同时将它们保存在本地,然后更新保存的HTML文件中的链接以指向新的本地图像资源而不是远程的。

当将HTML呈现为PDF时,这应该会大大改善图像的加载时间。

答案 1 :(得分:0)

我从来没有这样做过但也许你可以通过迭代调用curl_getinfo()然后读出CURLINFO_SIZE_DOWNLOAD的值来确定下载是否完成 - 直到该值不再变化为止?

答案 2 :(得分:0)

如果在用cURL抓取html之后,让php循环遍历每个img元素并读入图像文件二进制数据并将图像src url属性替换为打开的图像文件的base64编码值,如下所示:

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

如果base64图像数据被硬编码到页面中,那么将为您提供一种编程方式来验证所有图片是否已“加载”并防止在所有图片下载之前开始发出pdf转换...

答案 3 :(得分:0)

您是否无法将onLoad添加到需要加载的图片中?

之类的东西
<img src='foo.jpg' onLoad='callbackFuncion();'/>

答案 4 :(得分:0)

也许你可以处理下载的HTML,搜索img标签,然后将图像下载到本地存储并替换src属性。这样,您应该在所有图像可用后生成pdf。