J'ai une boucle PHP qui suit: p>
Le problème que j'ai, c'est que de temps en temps (peut-être ~ 30% du temps), les images ne vont pas dans le PDF. Si j'ouvre l'un des fichiers HTML sauvegardés, je constaterai que je dois entrer et rafraîchir manuellement la page pour que les images apparaissent. P>
Des idées sur la manière d'assurer de manière pragmatique à la charge des images? Choses que j'ai essayées: p>
dormir (n) code> entre chaque ligne li>
- Ajout
- JavaScript-Delay 30000 code> à mon appel WKHTMLTOPDF Pour vous assurer qu'il a suffisamment de temps pour charger des images. LI>
ol>
# 1 a rendu considérablement pire, et n ° 2 n'a rien fait du tout. p>
Merci! P>
5 Réponses :
Je n'ai jamais fait cela, mais vous pouvez peut-être savoir si le téléchargement est effectué par appeler itéralement appeler curl_getinfo () code> puis lisant les valeurs de
curlinfo_size_download code> - jusqu'à ce que Cette valeur ne change plus? P>
Et si après avoir gratté le HTML avec CURL, avez une boucle PHP via chaque élément IMG et lisez dans les données binaires de fichier image et remplacez l'attribut URL de l'image SRC avec la valeur de codage de base64 du fichier d'image ouvert comme: p >
Si les données d'image de base64 sont cotées en papier dans la page que cela vous donneraient un moyen programmatique de vérifier que toutes les images sont "chargées" et empêchent le problème de la conversion PDF commençant avant que toutes les images ne soient téléchargées ... P> '
' code> p> p> p> P>
Cela nécessite une nouvelle disposition uniquement pour le rendu PDF en utilisant des vues. Pas beaucoup de pratique. Avec de nombreuses images, encore plus facile de frapper la limite de PHP Mem.
Impossible d'ajouter un surcharge aux images que vous devez savoir qui se chargent? quelque chose comme
Peut-être que vous pourriez peut-être traiter le code HTML téléchargé, recherchant des balises IMG, puis la chargement des images sur un stockage local et le remplacement de l'attribut SRC. De cette façon, vous devriez générer le PDF après que toutes les images soient disponibles. P>
entre les étapes 3 et 4 de votre exemple, vous pouvez envisager d'analyser le fichier HTML pour tous les liens d'image et de les télécharger individuellement à l'aide de curl, ce qui les sauvegardez localement, puis mettez à jour les liens dans le fichier HTML enregistré pour pointer vers la Nouvelles ressources d'image locales au lieu des distants. P>
Cela devrait améliorer considérablement la période de charge des images lorsque vous rendant le HTML en tant que PDF. P>
Merci, Steve - Voici ce que j'ai fini et ça marche parfaitement.
Les références d'images dans le HTML local sont-elles toujours valables? Donc, vous devez saisir chaque image du serveur distant et le copier sur le bon endroit localement. Je me demande s'il serait plus facile d'obtenir un cookie valide (via Curl, etc.), puis de l'apporter à WKHTMLTOPDF, qui va ensuite directement à la page authentifiée à distance?
WKHTMLTOPDF a en fait une méthode pour générer un cookie, mais caut-il un cauchemar de travailler dans cette situation particulière (d'où la route de la courroie). Lorsque j'ai lu dans le code HTML, je remplace tous les chemins sur le chemin d'image à distance, qui fonctionne définitivement car je peux ouvrir le fichier HTML et l'actualisation difficile pour voir les images, c'est comme s'il n'y a pas assez d'oomphe pour obtenir l'image à chaque fois. Je suppose que je suppose que je peux essayer d'obtenir ce cookie travailler avec WKHTMLTOPDF.
Pour une approche alternative, vous pouvez essayer d'utiliser
wget code> avec son
- pages-requisites code> et
- liens convertis code> options pour télécharger le HTML / CSS / images dans un emplacement local, modifiant les liens en même temps. Ensuite, lancez simplement le rendu PDF contre la copie locale.