C3: La génération de PDF par wkhtmltopdf échoue avec c3 0.3.0

Créé le 10 sept. 2014  ·  17Commentaires  ·  Source: c3js/c3

Lors de l'utilisation de wkhtmltopdf pour générer des documents PDF à partir de HTML avec des graphiques c3, la dernière version de c3 (0.3.0) fait que wkhtmltopdf annonce l'erreur « Avertissement : undefined :0 TypeError : 'undefined' is not a function". Le PDF résultant affiche un espace vide au lieu d'un graphique.

Une ancienne version de c3 générait le graphique de manière fluide. J'ai reproduit cela avec des types de graphiques à secteurs et à barres.

Le package complet html, css et javascript avec wkhtmltopdf est à
http://burgan.whitevector.com/images/bug_report.zip

Sortie complète de wkhtmltopdf :
shark@virshark :~/bug_report$ sh generate_pdf.sh
Chargement des pages (1/6)
Avertissement : undefined :0 TypeError : 'undefined' n'est pas une fonction
Compter les pages (2/6)
Résoudre les liens (4/6)
Chargement des en-têtes et pieds de page (5/6)
Impression des pages (6/6)
Fait

Commentaire le plus utile

Je soupçonne que c'est parce que wkhtmltopdf utilise QtWebKit qui a des problèmes avec Function.prototype.bind , une méthode utilisée dans la nouvelle version de c3. J'ai moi-même dû m'attaquer à un problème similaire lorsque j'ai écrit un exportateur fantôme . La solution est d'ajouter ce petit polyfill :

Function.prototype.bind = Function.prototype.bind || function (thisp) {
  var fn = this;
  return function () {
    return fn.apply(thisp, arguments);
  };
};

Je ne connais pas wkhtmltopdf mais vous devrez exécuter ce code dans le contexte de la page en cours de rendu (il suffit de l'inclure dans la page avant les fichiers c3 js et cela fonctionnera)

Tous les 17 commentaires

Je soupçonne que c'est parce que wkhtmltopdf utilise QtWebKit qui a des problèmes avec Function.prototype.bind , une méthode utilisée dans la nouvelle version de c3. J'ai moi-même dû m'attaquer à un problème similaire lorsque j'ai écrit un exportateur fantôme . La solution est d'ajouter ce petit polyfill :

Function.prototype.bind = Function.prototype.bind || function (thisp) {
  var fn = this;
  return function () {
    return fn.apply(thisp, arguments);
  };
};

Je ne connais pas wkhtmltopdf mais vous devrez exécuter ce code dans le contexte de la page en cours de rendu (il suffit de l'inclure dans la page avant les fichiers c3 js et cela fonctionnera)

Merci! L'insertion de ces 6 lignes avant d'autres Javascripts a résolu le problème.

Merci! Ce problème semble résolu, alors s'il vous plaît laissez-moi fermer.

@yuvii
dwight-schrute-thank-you-cry-on-the-office

@yuvii tu es génial !
slothsome

J'ai rencontré le même problème mais avec vega / wkhtmltopdf . La solution de @yuvii a fonctionné à merveille. Merci beaucoup!

@yuvii tu es roi !

@yuvii Merci !!!!!

Pour les googleurs, @yuvii a résolu mon problème de génération avec fullcalendar. J'ai passé des heures à chercher une solution.
Merci.

Génial @yuvii . J'ai eu le même problème lorsque l'API Google Maps a changé

Merci beaucoup, cela a totalement résolu mon problème de pdfkit django !

Merci @yuvii . J'ai passé des heures à chercher une solution :
Dessin sur toile avec Fabric.js > Html > wkhtmltopdf > fichier .pdf
Html dans le navigateur était correct, mais le fichier .pdf de sortie avait une toile vierge.

On dirait que fabric.js a le même problème

Je soupçonne que c'est parce que wkhtmltopdf utilise QtWebKit qui a des problèmes avec Function.prototype.bind , une méthode utilisée dans la nouvelle version de c3. J'ai moi-même dû m'attaquer à un problème similaire lorsque j'ai écrit un exportateur fantôme . La solution est d'ajouter ce petit polyfill :

Function.prototype.bind = Function.prototype.bind || function (thisp) {
  var fn = this;
  return function () {
    return fn.apply(thisp, arguments);
  };
};

Je ne connais pas wkhtmltopdf mais vous devrez exécuter ce code dans le contexte de la page en cours de rendu (il suffit de l'inclure dans la page avant les fichiers c3 js et cela fonctionnera)

Merci beaucoup, j'ai sauvé ma journée. Cela a fonctionné pour moi avec C3js. Il est important de définir la largeur du conteneur du graphique.

Ces commentaires sont incroyables. Je ne code plus, j'ai quitté ce monde, mais de temps en temps, je visite cette page et je regarde avec émerveillement la solution que j'ai trouvée pour un problème de niche a aidé _tant de personnes_ depuis 5 ans et plus. C'est fou.

Je soupçonne que c'est parce que wkhtmltopdf utilise QtWebKit qui a des problèmes avec Function.prototype.bind , une méthode utilisée dans la nouvelle version de c3. J'ai moi-même dû m'attaquer à un problème similaire lorsque j'ai écrit un exportateur fantôme . La solution est d'ajouter ce petit polyfill :

Function.prototype.bind = Function.prototype.bind || function (thisp) {
  var fn = this;
  return function () {
    return fn.apply(thisp, arguments);
  };
};

Je ne connais pas wkhtmltopdf mais vous devrez exécuter ce code dans le contexte de la page en cours de rendu (il suffit de l'inclure dans la page avant les fichiers c3 js et cela fonctionnera)

Holly Molly, Tu auras pour toujours une place spéciale dans mon cœur. Le graphique Highchart fonctionnait correctement sur le navigateur Web mais n'était pas correctement converti en PDF avec Wkhtmltopdf. Si quelqu'un a le même problème, ajoutez simplement créer cette fonction avant d'appeler votre script highchart. Enfin trouvé une solution après 4 heures. Aussi pour pouvoir déboguer votre problème avec Wkhtmltopdf et Highchart, n'oubliez pas d'ajouter ces arguments "wkhtmltopdf.exe --javascript-delay 10000 --no-stop-slow-scripts --enable-javascript --debug-javascript"

Je soupçonne que c'est parce que wkhtmltopdf utilise QtWebKit qui a des problèmes avec Function.prototype.bind , une méthode utilisée dans la nouvelle version de c3. J'ai moi-même dû m'attaquer à un problème similaire lorsque j'ai écrit un exportateur fantôme . La solution est d'ajouter ce petit polyfill :

Function.prototype.bind = Function.prototype.bind || function (thisp) {
  var fn = this;
  return function () {
    return fn.apply(thisp, arguments);
  };
};

Je ne connais pas wkhtmltopdf mais vous devrez exécuter ce code dans le contexte de la page en cours de rendu (il suffit de l'inclure dans la page avant les fichiers c3 js et cela fonctionnera)

Merci beaucoup, je viens de brancher au-dessus de 6 lignes et cela fonctionne avec le tableau des hauteurs, je le déboguais pendant près de 3 à 4 heures.

Je soupçonne que c'est parce que wkhtmltopdf utilise QtWebKit qui a des problèmes avec Function.prototype.bind , une méthode utilisée dans la nouvelle version de c3. J'ai moi-même dû m'attaquer à un problème similaire lorsque j'ai écrit un exportateur fantôme . La solution est d'ajouter ce petit polyfill :

Function.prototype.bind = Function.prototype.bind || function (thisp) {
  var fn = this;
  return function () {
    return fn.apply(thisp, arguments);
  };
};

Je ne connais pas wkhtmltopdf mais vous devrez exécuter ce code dans le contexte de la page en cours de rendu (il suffit de l'inclure dans la page avant les fichiers c3 js et cela fonctionnera)

Sauvé ma journée. J'ai lutté pendant des jours ensemble :+1:

Cette page vous a été utile?
0 / 5 - 0 notes

Questions connexes

alantygel picture alantygel  ·  3Commentaires

aishwaryak picture aishwaryak  ·  4Commentaires

wojciechowskid picture wojciechowskid  ·  3Commentaires

udhaya2kmrv picture udhaya2kmrv  ·  3Commentaires

Saikat-Sinha picture Saikat-Sinha  ·  3Commentaires