Ao usar wkhtmltopdf para gerar documentos PDF de html com gráficos c3, a versão mais recente de c3 (0.3.0) faz wkhtmltopdf anunciar erro "Aviso: undefined: 0 TypeError: 'undefined' não é uma função". O PDF resultante mostra um espaço em branco em vez de um gráfico.
Uma versão mais antiga do c3 usada para gerar o gráfico perfeitamente. Eu reproduzi isso com tipos de gráfico de pizza e de barras.
O pacote completo html, css e javascript com wkhtmltopdf está em
http://burgan.whitevector.com/images/bug_report.zip
Produção completa de wkhtmltopdf:
shark @ virshark : ~ / bug_report $ sh generate_pdf.sh
Carregando páginas (1/6)
Aviso: undefined: 0 TypeError: 'undefined' não é uma função
Contando páginas (2/6)
Resolvendo links (4/6)
Carregando cabeçalhos e rodapés (5/6)
Imprimindo páginas (6/6)
Feito
Suspeito que isso seja porque wkhtmltopdf
usa QtWebKit
que tem problemas com Function.prototype.bind
, um método usado em toda a nova versão do c3. Eu mesmo tive que resolver um problema semelhante quando escrevi para um exportador de fantasmas . A solução é adicionar este pequeno polyfill:
Function.prototype.bind = Function.prototype.bind || function (thisp) {
var fn = this;
return function () {
return fn.apply(thisp, arguments);
};
};
Não estou familiarizado com wkhtmltopdf
mas você precisará executar esse código dentro do contexto da página que está sendo renderizada (basta incluí-lo na página antes dos arquivos c3 js e ele funcionará)
Obrigada! Inserir essas 6 linhas antes de outros Javascripts resolverem o problema.
Obrigado! Este problema parece resolvido, deixe-me encerrar.
@yuvii
@yuvii você é incrível!
Eu encontrei o mesmo problema, mas com vega / wkhtmltopdf
. A solução de @yuvii funcionou
@yuvii você é rei!
@yuvii Obrigado !!!!!
Para googlers, @yuvii resolveu meu problema de geração com fullcalendar. Passei horas procurando uma solução.
Obrigada.
Incrível @yuvii . Tive o mesmo problema quando a API do Google Maps mudou
Muito obrigado, isso resolveu totalmente meu problema com o django pdfkit!
Obrigado @yuvii . Passei horas procurando uma solução:
Desenhar na tela com Fabric.js> Html> wkhtmltopdf> arquivo .pdf
Html no navegador estava correto, mas o arquivo .pdf de saída tinha uma tela em branco.
Parece que fabric.js tem o mesmo problema
Suspeito que isso seja porque
wkhtmltopdf
usaQtWebKit
que tem problemas comFunction.prototype.bind
, um método usado em toda a nova versão do c3. Eu mesmo tive que resolver um problema semelhante quando escrevi para um exportador de fantasmas . A solução é adicionar este pequeno polyfill:Function.prototype.bind = Function.prototype.bind || function (thisp) { var fn = this; return function () { return fn.apply(thisp, arguments); }; };
Não estou familiarizado com
wkhtmltopdf
mas você precisará executar esse código dentro do contexto da página que está sendo renderizada (basta incluí-lo na página antes dos arquivos c3 js e ele funcionará)
Muito obrigado, salvou meu dia. Funcionou para mim com C3js. É importante definir a largura do contêiner do gráfico.
Esses comentários são incríveis. Não codifico mais, saí daquele mundo, mas de vez em quando visito esta página e vejo com admiração uma solução que encontrei para um problema de nicho que ajudou _tantas pessoas_ por 5 anos e continua. É louco.
Suspeito que isso seja porque
wkhtmltopdf
usaQtWebKit
que tem problemas comFunction.prototype.bind
, um método usado em toda a nova versão do c3. Eu mesmo tive que resolver um problema semelhante quando escrevi para um exportador de fantasmas . A solução é adicionar este pequeno polyfill:Function.prototype.bind = Function.prototype.bind || function (thisp) { var fn = this; return function () { return fn.apply(thisp, arguments); }; };
Não estou familiarizado com
wkhtmltopdf
mas você precisará executar esse código dentro do contexto da página que está sendo renderizada (basta incluí-lo na página antes dos arquivos c3 js e ele funcionará)
Holly Molly, você terá para sempre um lugar especial em meu coração. O gráfico Highchart estava funcionando corretamente no navegador da web, mas não foi convertido corretamente para PDF com Wkhtmltopdf. Se alguém estiver tendo o mesmo problema, simplesmente adicione create essa função antes de chamar seu script highchart. Finalmente encontrei uma solução após 4 horas. Além disso, para poder depurar seu problema com Wkhtmltopdf e Highchart, não se esqueça de adicionar os argumentos "wkhtmltopdf.exe --javascript-delay 10000 --no-stop-slow-scripts --enable-javascript --debug-javascript"
Suspeito que isso seja porque
wkhtmltopdf
usaQtWebKit
que tem problemas comFunction.prototype.bind
, um método usado em toda a nova versão do c3. Eu mesmo tive que resolver um problema semelhante quando escrevi para um exportador de fantasmas . A solução é adicionar este pequeno polyfill:Function.prototype.bind = Function.prototype.bind || function (thisp) { var fn = this; return function () { return fn.apply(thisp, arguments); }; };
Não estou familiarizado com
wkhtmltopdf
mas você precisará executar esse código dentro do contexto da página que está sendo renderizada (basta incluí-lo na página antes dos arquivos c3 js e ele funcionará)
Muito obrigado, acabei de inserir mais de 6 linhas e funciona com o gráfico de altura, estava depurando-o por quase 3-4 horas.
Suspeito que isso seja porque
wkhtmltopdf
usaQtWebKit
que tem problemas comFunction.prototype.bind
, um método usado em toda a nova versão do c3. Eu mesmo tive que resolver um problema semelhante quando escrevi para um exportador de fantasmas . A solução é adicionar este pequeno polyfill:Function.prototype.bind = Function.prototype.bind || function (thisp) { var fn = this; return function () { return fn.apply(thisp, arguments); }; };
Não estou familiarizado com
wkhtmltopdf
mas você precisará executar esse código dentro do contexto da página que está sendo renderizada (basta incluí-lo na página antes dos arquivos c3 js e ele funcionará)
Salvei meu dia. Lutaram por dias juntos: +1:
Comentários muito úteis
Suspeito que isso seja porque
wkhtmltopdf
usaQtWebKit
que tem problemas comFunction.prototype.bind
, um método usado em toda a nova versão do c3. Eu mesmo tive que resolver um problema semelhante quando escrevi para um exportador de fantasmas . A solução é adicionar este pequeno polyfill:Não estou familiarizado com
wkhtmltopdf
mas você precisará executar esse código dentro do contexto da página que está sendo renderizada (basta incluí-lo na página antes dos arquivos c3 js e ele funcionará)