Не удалось запустить функцию обратного вызова после возврата обещания с помощью wkhtmltopdf - PullRequest
0 голосов
/ 22 апреля 2020

Я использую google charts для создания линейных диаграмм. а затем передать html, сгенерированный wkhtmltopdf версии 0.12.5 (с исправленным qt) в windows, которая является утилитой оболочки для преобразования html страниц в PDF.

wkhtmltopdf использует старую версию webkit (механизм браузера) для выполнения кода javascript, поэтому он рассматривает Promise как простое object в дополнение к , а не , поддерживающему другие функции ES6.

Теперь перейдем к вопросу.

Код JS [main.js]:

1. google.load("visualization", "1", { packages: ["corechart"] });

2. google.setOnLoadCallback(function () {
3.  drawChart();
4. });

5. function drawChart() {
6. var data = google.visualization.arrayToDataTable(
7.  [
8.  // some data
9.  ]
10.  );
11. var options = {
12    // some options
13. };

14. var chart = new google.visualization.LineChart(
15.    document.getElementById("node_chart_div1") // a div element in html
16.  );

17.  chart.draw(data, options);
18. }

HTML код:

 <!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Line Chart</title>
    <script
      src="https://code.jquery.com/jquery-3.5.0.js"
      integrity="sha256-r/AaFHrszJtwpe+tHyNi/XCfMxYpbsRg2Uqn0x3s2zc="
      crossorigin="anonymous"
    ></script>
    <script
      type="text/javascript"
      src="https://www.gstatic.com/charts/loader.js"
    ></script>
  </head>
  <body>
    <div id="test"></div>
    <div id="node_chart_div1" class="cellchart"></div>
  </body>
  <script src="main.js"></script>
</html>

Выполнение приведенного выше кода отображает диаграмму в браузере.

Но при запуске его через wkhtmltopdf выдает пустой PDF.

после проверки я обнаружил, что google.setOnLoadCallback() в строке номер 2 в main.js возвращает объект Promise, который хорошо интерпретируется механизмом браузера.

Но при запуске его через wkhtmltopdf он трактуется как обычный object и не выполняет никакого кода, написанного внутри его обратного вызова (который в данном случае является drawChart функцией).

Мой запрос:

  • Любой js код-обертка для преобразования объекта, возвращенного в wkhtmltopdf, в стандартный JS Promise объект.

    ИЛИ

  • Существуют ли какие-либо разные подход / обходной путь, чтобы исправить это.

команда, используемая для преобразования html страницы в PDF

wkhtmltopdf https://www.example.com/index.html output.pdf

найти живую демонстрацию вышеупомянутого кода на эту ссылку.

Любая помощь / предложение приветствуется.

...