9
votes

Comment assurer la charge d'images avant de générer un PDF?

J'ai une boucle PHP qui suit:

  1. Connectez-vous à une page Web via CURL
  2. Capture et page interne nécessitant une connexion
  3. Enregistrez le HTML de la page vers un fichier local
  4. Utilisation de WKHTMLTOPDF, rendu la page en tant que PDF

    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.

    Des idées sur la manière d'assurer de manière pragmatique à la charge des images? Choses que j'ai essayées:

    1. dormir (n) entre chaque ligne
    2. Ajout - JavaScript-Delay 30000 à mon appel WKHTMLTOPDF Pour vous assurer qu'il a suffisamment de temps pour charger des images.

      # 1 a rendu considérablement pire, et n ° 2 n'a rien fait du tout.

      Merci!


3 commentaires

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 avec son - pages-requisites et - liens convertis 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.


5 Réponses :


0
votes

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 () puis lisant les valeurs de curlinfo_size_download - jusqu'à ce que Cette valeur ne change plus?


0 commentaires

0
votes

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:

''

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 ...


1 commentaires

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.



0
votes

Impossible d'ajouter un surcharge aux images que vous devez savoir qui se chargent? quelque chose comme xxx


0 commentaires

0
votes

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.


0 commentaires

1
votes

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.

Cela devrait améliorer considérablement la période de charge des images lorsque vous rendant le HTML en tant que PDF.


1 commentaires

Merci, Steve - Voici ce que j'ai fini et ça marche parfaitement.