我有一个执行以下操作的PHP循环:
我遇到的问题是每隔一段时间(可能约占30%的时间),图像将无法在PDF中呈现。如果我打开一个保存的HTML文件,我会发现我需要进入并手动刷新页面以显示图像。
有关如何务实确保图像加载的任何想法?我尝试过的事情:
sleep(n)
--javascript-delay 30000
添加到我的WKHTMLTOPDF调用中,以确保它有足够的时间加载任何图像。#1使情况变得更糟,#2什么都没做。
谢谢!
答案 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。