C3: La generación de PDF por wkhtmltopdf falla con c3 0.3.0

Creado en 10 sept. 2014  ·  17Comentarios  ·  Fuente: c3js/c3

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

Comentario más útil

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á)

Todos 17 comentarios

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
dwight-schrute-thank-you-cry-on-the-office

@yuvii, ¡eres increíble!
slothsome

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 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á)

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 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á)

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 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á)

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 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á)

Salvó mi día. Estuve luchando durante días juntos: +1:

¿Fue útil esta página
0 / 5 - 0 calificaciones