C3: A geração de PDF por wkhtmltopdf falha com c3 0.3.0

Criado em 10 set. 2014  ·  17Comentários  ·  Fonte: c3js/c3

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

Comentários muito úteis

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

Todos 17 comentários

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

@yuvii você é incrível!
slothsome

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

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

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

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

Salvei meu dia. Lutaram por dias juntos: +1:

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

kethomassen picture kethomassen  ·  3Comentários

aishwaryak picture aishwaryak  ·  4Comentários

Shugardude picture Shugardude  ·  4Comentários

zachallia picture zachallia  ·  3Comentários

udhaya2kmrv picture udhaya2kmrv  ·  3Comentários