C3: Создание PDF с помощью wkhtmltopdf не удается с c3 0.3.0

Созданный на 10 сент. 2014  ·  17Комментарии  ·  Источник: c3js/c3

При использовании wkhtmltopdf для создания PDF-документов из html с диаграммами c3 последняя версия c3 (0.3.0) заставляет wkhtmltopdf объявлять об ошибке «Предупреждение: undefined: 0 TypeError: 'undefined' не является функцией». В полученном PDF-файле вместо диаграммы отображается пустое пространство.

Старая версия c3 использовалась для быстрого создания диаграммы. Я воспроизвел это с типами круговых и гистограмм.

Полный пакет html, css и javascript с wkhtmltopdf находится по адресу
http://burgan.whitevector.com/images/bug_report.zip

Полный вывод wkhtmltopdf:
акула @ virshark : ~ / bug_report $ sh generate_pdf.sh
Загрузка страниц (1/6)
Предупреждение: undefined: 0 TypeError: 'undefined' не является функцией
Подсчет страниц (2/6)
Разрешение ссылок (4/6)
Загрузка верхних и нижних колонтитулов (5/6)
Печать страниц (6/6)
Сделанный

Самый полезный комментарий

Я подозреваю, что это связано с тем, что wkhtmltopdf использует QtWebKit что имеет проблемы с Function.prototype.bind , методом, используемым во всей новой версии c3. Мне самому приходилось решать подобную проблему, когда я писал экспортер phantomjs . Решение состоит в том, чтобы добавить этот небольшой полифилл:

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

Я не знаком с wkhtmltopdf но вам нужно будет запустить этот код в контексте отображаемой страницы (просто включите его на страницу перед файлами c3 js, и он будет работать)

Все 17 Комментарий

Я подозреваю, что это связано с тем, что wkhtmltopdf использует QtWebKit что имеет проблемы с Function.prototype.bind , методом, используемым во всей новой версии c3. Мне самому приходилось решать подобную проблему, когда я писал экспортер phantomjs . Решение состоит в том, чтобы добавить этот небольшой полифилл:

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

Я не знаком с wkhtmltopdf но вам нужно будет запустить этот код в контексте отображаемой страницы (просто включите его на страницу перед файлами c3 js, и он будет работать)

Спасибо! Вставка этих 6 строк до других сценариев Javascript решила проблему.

Спасибо! Кажется, проблема решена, поэтому позвольте мне закончить.

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

@yuvii ты
slothsome

Я столкнулся с той же проблемой, но с vega / wkhtmltopdf . Решение от @yuvii сработало

@yuvii ты король!

@yuvii Спасибо !!!!!

Для гуглеров @yuvii решил мою проблему с генерацией с помощью fullcalendar. Я часами искал решение.
Спасибо.

Потрясающий @yuvii . У меня возникла та же проблема, когда изменился API Карт Google.

Большое спасибо, это полностью решило мою проблему с django pdfkit!

Спасибо @yuvii . Я часами искал решение:
Рисование на холсте с помощью файла Fabric.js> Html> wkhtmltopdf> .pdf
HTML-код в браузере был правильным, но выходной файл .pdf имел пустой холст.

Похоже, у fabric.js такая же проблема

Я подозреваю, что это связано с тем, что wkhtmltopdf использует QtWebKit что имеет проблемы с Function.prototype.bind , методом, используемым во всей новой версии c3. Мне самому приходилось решать подобную проблему, когда я писал экспортер phantomjs . Решение состоит в том, чтобы добавить этот небольшой полифилл:

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

Я не знаком с wkhtmltopdf но вам нужно будет запустить этот код в контексте отображаемой страницы (просто включите его на страницу перед файлами c3 js, и он будет работать)

Большое спасибо, спасла мне день. Это сработало для меня с C3js. Важно установить ширину контейнера диаграммы.

Эти комментарии потрясающие. Я больше не кодирую, я покинул этот мир, но время от времени я захожу на эту страницу и с трепетом наблюдаю, как решение, которое я нашел для нишевой проблемы, помогло столь многим людям в течение 5 лет. Это безумие.

Я подозреваю, что это связано с тем, что wkhtmltopdf использует QtWebKit что имеет проблемы с Function.prototype.bind , методом, используемым во всей новой версии c3. Мне самому приходилось решать подобную проблему, когда я писал экспортер phantomjs . Решение состоит в том, чтобы добавить этот небольшой полифилл:

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

Я не знаком с wkhtmltopdf но вам нужно будет запустить этот код в контексте отображаемой страницы (просто включите его на страницу перед файлами c3 js, и он будет работать)

Холли Молли, ты навсегда останешься в моем сердце особенным. График Highchart работал правильно в веб-браузере, но не был должным образом преобразован в PDF с помощью Wkhtmltopdf. Если у кого-то такая же проблема, просто добавьте эту функцию перед вызовом сценария highchart. Наконец нашел решение через 4 часа. Также, чтобы иметь возможность отлаживать вашу проблему с помощью Wkhtmltopdf и Highchart, не забудьте добавить аргумент «wkhtmltopdf.exe --javascript-delay 10000 --no-stop-slow-scripts --enable-javascript --debug-javascript»

Я подозреваю, что это связано с тем, что wkhtmltopdf использует QtWebKit что имеет проблемы с Function.prototype.bind , методом, используемым во всей новой версии c3. Мне самому приходилось решать подобную проблему, когда я писал экспортер phantomjs . Решение состоит в том, чтобы добавить этот небольшой полифилл:

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

Я не знаком с wkhtmltopdf но вам нужно будет запустить этот код в контексте отображаемой страницы (просто включите его на страницу перед файлами c3 js, и он будет работать)

Большое спасибо, я только что подключил более 6 строк, и он работает с диаграммой высоты, отлаживал его почти 3-4 часа.

Я подозреваю, что это связано с тем, что wkhtmltopdf использует QtWebKit что имеет проблемы с Function.prototype.bind , методом, используемым во всей новой версии c3. Мне самому приходилось решать подобную проблему, когда я писал экспортер phantomjs . Решение состоит в том, чтобы добавить этот небольшой полифилл:

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

Я не знаком с wkhtmltopdf но вам нужно будет запустить этот код в контексте отображаемой страницы (просто включите его на страницу перед файлами c3 js, и он будет работать)

Спас мой день. Целыми днями боролись вместе: +1:

Была ли эта страница полезной?
0 / 5 - 0 рейтинги