Cuando se usa wkhtmltopdf para generar documentos PDF a partir de html con gráficos c3, la última versión de c3 (0.3.0) hace que wkhtmltopdf anuncie el error "Advertencia: indefinido: 0 TypeError: 'undefined' no es una función". El PDF resultante muestra un espacio en blanco en lugar de un gráfico.
Una versión anterior de c3 utilizada para generar el gráfico a las mil maravillas. He reproducido esto con tipos de gráficos circulares y de barras.
El paquete completo html, css y javascript con wkhtmltopdf está en
http://burgan.whitevector.com/images/bug_report.zip
Salida completa de wkhtmltopdf:
tiburón @ virshark : ~ / bug_report $ sh generate_pdf.sh
Carga de páginas (1/6)
Advertencia: undefined: 0 TypeError: 'undefined' no es una función
Contando páginas (2/6)
Resolución de enlaces (4/6)
Carga de encabezados y pies de página (5/6)
Impresión de páginas (6/6)
Hecho
Sospecho que esto se debe a que wkhtmltopdf
usa QtWebKit
que tiene problemas con Function.prototype.bind
, un método utilizado en toda la nueva versión de c3. Tuve que abordar un problema similar yo mismo cuando escribí un exportador fantasma . La solución es agregar este pequeño polyfill:
Function.prototype.bind = Function.prototype.bind || function (thisp) {
var fn = this;
return function () {
return fn.apply(thisp, arguments);
};
};
No estoy familiarizado con wkhtmltopdf
pero necesitará ejecutar ese código dentro del contexto de la página que se está procesando (solo inclúyalo en la página antes de los archivos c3 js y funcionará)
¡Gracias! Insertar esas 6 líneas antes de otros JavaScript resolvió el problema.
¡Gracias! Este problema parece estar resuelto, así que déjeme cerrar.
@yuvii
@yuvii, ¡eres increíble!
Encontré el mismo problema pero con vega / wkhtmltopdf
. La solución de @yuvii funcionó a las
@yuvii, ¡eres el rey!
@yuvii ¡¡¡¡ Gracias !!!!!
Para los googlers, @yuvii resolvió mi problema de generación con fullcalendar. Pasé horas buscando una solución.
Gracias.
Impresionante @yuvii . Tuve el mismo problema cuando cambió la API de Google Maps
¡Muchas gracias, esto resolvió totalmente mi problema de django pdfkit!
Gracias @yuvii . Pasé horas buscando una solución:
Dibujar sobre lienzo con Fabric.js> Html> wkhtmltopdf> archivo .pdf
Html en el navegador era correcto, pero el archivo .pdf de salida tenía un lienzo en blanco.
Parece que fabric.js tiene el mismo problema
Sospecho que esto se debe a que
wkhtmltopdf
usaQtWebKit
que tiene problemas conFunction.prototype.bind
, un método utilizado en toda la nueva versión de c3. Tuve que abordar un problema similar yo mismo cuando escribí un exportador fantasma . La solución es agregar este pequeño polyfill:Function.prototype.bind = Function.prototype.bind || function (thisp) { var fn = this; return function () { return fn.apply(thisp, arguments); }; };
No estoy familiarizado con
wkhtmltopdf
pero necesitará ejecutar ese código dentro del contexto de la página que se está procesando (solo inclúyalo en la página antes de los archivos c3 js y funcionará)
Muchas gracias, me salvó el día. Me funcionó con C3js. Es importante establecer el ancho del contenedor del gráfico.
Estos comentarios son asombrosos. Ya no codifico, dejé ese mundo, pero de vez en cuando visito esta página y veo con asombro cómo una solución que encontré para un problema de nicho ha ayudado a _tasa gente_ durante 5 años y más. Es una locura.
Sospecho que esto se debe a que
wkhtmltopdf
usaQtWebKit
que tiene problemas conFunction.prototype.bind
, un método utilizado en toda la nueva versión de c3. Tuve que abordar un problema similar yo mismo cuando escribí un exportador fantasma . La solución es agregar este pequeño polyfill:Function.prototype.bind = Function.prototype.bind || function (thisp) { var fn = this; return function () { return fn.apply(thisp, arguments); }; };
No estoy familiarizado con
wkhtmltopdf
pero necesitará ejecutar ese código dentro del contexto de la página que se está procesando (solo inclúyalo en la página antes de los archivos c3 js y funcionará)
Holly Molly, siempre tendrás un lugar especial en mi corazón. El gráfico Highchart funcionaba correctamente en el navegador web, pero no se convertía correctamente a PDF con Wkhtmltopdf. Si alguien tiene el mismo problema, simplemente agregue crear esa función antes de llamar a su script highchart. Finalmente encontré una solución después de 4 horas. Además, para poder depurar su problema con Wkhtmltopdf y Highchart, no olvide agregar el argumento "wkhtmltopdf.exe --javascript-delay 10000 --no-stop-slow-scripts --enable-javascript --debug-javascript"
Sospecho que esto se debe a que
wkhtmltopdf
usaQtWebKit
que tiene problemas conFunction.prototype.bind
, un método utilizado en toda la nueva versión de c3. Tuve que abordar un problema similar yo mismo cuando escribí un exportador fantasma . La solución es agregar este pequeño polyfill:Function.prototype.bind = Function.prototype.bind || function (thisp) { var fn = this; return function () { return fn.apply(thisp, arguments); }; };
No estoy familiarizado con
wkhtmltopdf
pero necesitará ejecutar ese código dentro del contexto de la página que se está procesando (solo inclúyalo en la página antes de los archivos c3 js y funcionará)
Muchas gracias. Acabo de conectar más de 6 líneas y funciona con el gráfico alto, lo estuve depurando durante casi 3 a 4 horas.
Sospecho que esto se debe a que
wkhtmltopdf
usaQtWebKit
que tiene problemas conFunction.prototype.bind
, un método utilizado en toda la nueva versión de c3. Tuve que abordar un problema similar yo mismo cuando escribí un exportador fantasma . La solución es agregar este pequeño polyfill:Function.prototype.bind = Function.prototype.bind || function (thisp) { var fn = this; return function () { return fn.apply(thisp, arguments); }; };
No estoy familiarizado con
wkhtmltopdf
pero necesitará ejecutar ese código dentro del contexto de la página que se está procesando (solo inclúyalo en la página antes de los archivos c3 js y funcionará)
Salvó mi día. Estuve luchando durante días juntos: +1:
Comentario más útil
Sospecho que esto se debe a que
wkhtmltopdf
usaQtWebKit
que tiene problemas conFunction.prototype.bind
, un método utilizado en toda la nueva versión de c3. Tuve que abordar un problema similar yo mismo cuando escribí un exportador fantasma . La solución es agregar este pequeño polyfill:No estoy familiarizado con
wkhtmltopdf
pero necesitará ejecutar ese código dentro del contexto de la página que se está procesando (solo inclúyalo en la página antes de los archivos c3 js y funcionará)