Ho un ciclo PHP che esegue le seguenti operazioni:Come garantire il caricamento delle immagini prima di generare PDF?
- Accedere a una pagina web tramite CURL
- Cattura e pagina interna che richiede un login
- Salva il codice HTML della pagina in un file locale
- Utilizzando wkhtmltopdf, il rendering della pagina in formato PDF
il problema che sto avendo è che ogni tanto un po '(forse ~ 30% del tempo), le immagini non rendono nel PDF . Se apro uno dei file HTML salvati, troverò che ho bisogno di entrare e aggiornare manualmente la pagina per far apparire le immagini.
Qualche idea su come garantire pragmaticamente il caricamento delle immagini? Le cose che ho provato:
sleep(n)
tra ogni linea- Aggiunta
--javascript-delay 30000
alla mia chiamata wkhtmltopdf per assicurarsi che ha tutto il tempo per caricare le immagini.
n. 1 ha reso notevolmente peggio, e il n. 2 non ha fatto nulla.
Grazie!
I riferimenti immagine nell'HTML locale sono ancora validi? Quindi, dovresti prendere ogni immagine dal server remoto e copiarla nel posto giusto localmente.Mi chiedo se sarebbe più semplice ottenere un cookie valido (tramite CURL, ecc.) E quindi fornirlo a wkhtmltopdf, che poi va direttamente alla pagina autenticata a distanza? – halfer
wkhtmltopdf ha in realtà un metodo per generare un cookie, ma è stato un incubo lavorare in questa particolare situazione (da qui il percorso CURL). Quando leggo in HTML sto sostituendo tutti i percorsi del percorso dell'immagine remoto, che sicuramente funziona poiché posso aprire il file HTML e aggiornare con difficoltà per vedere le immagini, è come se non ci fosse abbastanza grinta per ottenere l'immagine ogni volta. Nel peggiore dei casi, credo di poter provare a far funzionare quel cookie con wkhtmltopdf. – Chords
Per un approccio alternativo, puoi provare a utilizzare 'wget' con le sue opzioni' --page-requisites' e '--convert-links' per scaricare HTML/CSS/Images in una posizione locale, modificando i collegamenti allo stesso tempo . Quindi esegui il renderer PDF contro la copia locale. – Darien