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
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
@yuvii tu es génial !
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
utiliseQtWebKit
qui a des problèmes avecFunction.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
utiliseQtWebKit
qui a des problèmes avecFunction.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
utiliseQtWebKit
qui a des problèmes avecFunction.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
utiliseQtWebKit
qui a des problèmes avecFunction.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:
Commentaire le plus utile
Je soupçonne que c'est parce que
wkhtmltopdf
utiliseQtWebKit
qui a des problèmes avecFunction.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 :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)