WkhtmlToPDF глобальные переменные JavaScript.Доступ к данным в нижнем колонтитуле - PullRequest
0 голосов
/ 26 февраля 2019

Мне нужно создать 1 PDF-файл, содержащий несколько документов, сгруппированных следующим образом:

  • Doc1 (TypeA)
  • Doc2 (TypeB)
  • Doc3 (TypeB)
  • Doc4 (TypeC)
  • Doc5 (TypeC)

На каждой странице нижнего колонтитула мне нужна эта информация:

  1. номер страницы / всегостраницы (предоставляются page и topage из window.location.search
  2. номер страницы / общее количество страниц одного документа
  3. номер документа / документы того же типа

1. Предоставляется windows.location.search

3. Я могу установить эти числа в <h1></h1> перед отправкой htmls в wkhtml. Это будет доступно в window.location.serach под section или subsection

2. Это забавная часть. Было бы легко, если бы я мог хранить информацию в javascript нижнего колонтитула. Что-то вроде внутреннего счетчика, которыйЯ могу сбросить каждый раз, когда раздел или подраздел меняется.

Так что вопрос: как хранить переменную, совместно используемую между нижними колонтитулами? Есть ли другой способполучить то, что мне нужно?

Нижний колонтитул для каждой страницы PDF:

  • Doc1 (TypeA): pdf-страница 1/7 |страница документа 1/2 |тип 1/1
  • Doc1 (TypeA): pdf-страница 2/7 |страница документа 2/2 |тип 1/1
  • Doc2 (TypeB): pdf-страница 3/7 |страница документа 1/1 |тип 1/2
  • Doc3 (TypeB): pdf-страница 4/7 |страница документа 1/2 |тип 2/2
  • Doc3 (TypeB): pdf-страница 5/7 |страница документа 2/2 |тип 2/2
  • Doc4 (TypeC): pdf-страница 6/7 |страница документа 1/1 |тип 1/2
  • Doc5 (TypeC): pdf-страница 7/7 |страница документа 1/1 |введите 2/2

Это почти то же самое, что создать 5 PDF-файлов и объединить их в один.

1 Ответ

0 голосов
/ 19 марта 2019

Вы можете сбросить нумерацию каждого раздела, используя JS cookies.Следуйте этому примеру: https://github.com/wkhtmltopdf/wkhtmltopdf/issues/3708#issuecomment-346701655

<html>
  <head>
    <script>
      function setSectionCounter() {
        var vars = {};
        var queryStringsFromUrl = document.location.search.substring(1).split('&');
        for (var queryString in queryStringsFromUrl) {
            if (queryStringsFromUrl.hasOwnProperty(queryString)) {
                var temp = queryStringsFromUrl[queryString].split('=', 2);
                vars[temp[0]] = decodeURI(temp[1]);
            }
        }

        var element = document.getElementById('sectionCounter');

        if (document.cookie.split(';').length === 2) {
          var section = document.cookie.split(';')[0].split('=')[1];

          if (vars.section !== section) {
            document.cookie = 'currentSection=' + vars.section;
            document.cookie = 'startedAt=' + vars.page;
          }

          // startedAt is the page on which a section started
          var startedAt = parseInt(document.cookie.split(';')[1].split('=')[1]);
          element.textContent = vars.page - startedAt + 1;
        } else {
          document.cookie = 'currentSection=' + vars.section;
          document.cookie = 'startedAt=' + vars.page;
          element.textContent = 1;
        }
      }
    </script>
  </head>
  <body onload="setSectionCounter()">
    <p id="sectionCounter"></p>
  </body>
</html>

Отказ от ответственности: Это решение не будет работать для общего числа страниц в разделе, оно только предоставляет счетчик.

Надеюсь, это поможет.

...