Saltar al contenido

Los gráficos de Google no se muestran en Snappy PDF

Solución:

Prueba esto: Gracias a https://github.com/barryvdh/laravel-snappy/issues/255#issuecomment-628815194

<script type="text/javascript" src="http://www.google.com/jsapi"></script>

    <script type="text/javascript">

        spandata = document.getElementsByClassName("spandata")
        spandatadate = document.getElementsByClassName("spandatadate")
        function init() {
          google.charts.load('current', {packages: ['corechart']});
          var interval = setInterval(function() {
            if ( google.visualization !== undefined && google.visualization.DataTable !== undefined && google.visualization.PieChart !== undefined ){ clearInterval(interval);
              window.status="ready";
              drawCharts();
            }
          }, 100);
        }



        function drawCharts() { // PROCESSING ... }
</script>

Donde drawCharts () es su función que procesa el dibujo, etc.

Finalmente funcionó para mí, así que … ¡espero que funcione para ti!

Todavía no puedo saber cuál es el problema, pero supongo que se debe a que la API del gráfico no se puede cargar rápidamente, por lo que wkhtmltopdf está procesando la conversión ANTES de la carga del gráfico. Esperar que DOM esté listo + establecer un intervalo parece solucionar el problema (¡por ahora!)


EDITAR 21/06/2020

Olvidé decir: http://www.google.com/jsapi redirige a una página HTTPS para gstatic (https://www.gstatic.com/charts/loader.js) que es el nuevo lugar para la API JS de Google. Entonces, si desea que wkhtmltopdf funcione, debe instalar el paquete libssl

sudo apt-get install libssl1.0-dev

Puedes probar si funciona con

wkhtmltopdf https://google.com google.pdf

Si no, tendrá este tipo de salida:

Loading pages (1/6)
QSslSocket: cannot resolve CRYPTO_num_locks                  ] 10%
QSslSocket: cannot resolve CRYPTO_set_id_callback
QSslSocket: cannot resolve CRYPTO_set_locking_callback
QSslSocket: cannot resolve sk_free
QSslSocket: cannot resolve sk_num
QSslSocket: cannot resolve sk_pop_free
QSslSocket: cannot resolve sk_value
QSslSocket: cannot resolve SSL_library_init
QSslSocket: cannot resolve SSL_load_error_strings
QSslSocket: cannot resolve SSLv3_client_method
QSslSocket: cannot resolve SSLv23_client_method
QSslSocket: cannot resolve SSLv3_server_method
QSslSocket: cannot resolve SSLv23_server_method
QSslSocket: cannot resolve X509_STORE_CTX_get_chain
QSslSocket: cannot resolve OPENSSL_add_all_algorithms_noconf
QSslSocket: cannot resolve OPENSSL_add_all_algorithms_conf
QSslSocket: cannot resolve SSLeay
QSslSocket: cannot call unresolved function CRYPTO_num_locks
QSslSocket: cannot call unresolved function CRYPTO_set_id_callback
QSslSocket: cannot call unresolved function CRYPTO_set_locking_callback
QSslSocket: cannot call unresolved function SSL_library_init
QSslSocket: cannot call unresolved function SSLv23_client_method
QSslSocket: cannot call unresolved function sk_num
QSslSocket: cannot call unresolved function SSLv23_client_method
QSslSocket: cannot call unresolved function SSL_library_init
Error: Failed loading page https://google.com (sometimes it will work just to ignore this error with --load-error-handling ignore)
Exit with code 1 due to network error: UnknownNetworkError
QSslSocket: cannot call unresolved function CRYPTO_num_locks
QSslSocket: cannot call unresolved function CRYPTO_set_id_callback
QSslSocket: cannot call unresolved function CRYPTO_set_locking_callback

Después de instalar libssl, el resultado de la prueba google.pdf debe ser

Loading pages (1/6)
Counting pages (2/6)                                               
Resolving links (4/6)                                                       
Loading headers and footers (5/6)                                           
Printing pages (6/6)
Done 

Estoy usando:

Laravel 5.7
PHP 7.1.3
barryvdh/laravel-dompdf ^0.8.5
barryvdh/laravel-snappy ^0.4.6
wkhtmltopdf 0.12.4 (with patched qt)
Ubuntu 18.04 LTS

Tuve el mismo problema: obtenía un gráfico en blanco o un mensaje de error “Indefinido no es una función”.

Después de 3 días de probar todas las opciones posibles, lo que funcionó para mí es “volver” a una versión anterior de Google Charts.

<script>google.load("visualization", "44", {packages:["corechart"]});</script>

Anteriormente estaba usando “1” para el número de versión. ¡Y acabo de descubrir que usar la versión “1” ahora significa que está usando la versión actual! Desde el documento de Google Charts: “Todas las solicitudes ‘jsapi’ ahora se están redirigiendo al nuevo cargador. Si estaba cargando la versión ‘1’ o ‘1.0’, ahora estará cargando ‘actual'”.

También he probado la versión 45, y falla por si acaso también. Parece que las versiones más recientes tienen problemas de carga con wkhtmlpdf.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *