Печать повторяющихся заголовков страниц в Chrome

Кто-нибудь имеет ссылку на статью или рабочий пример повторения заголовков/нижних колонтитулов страниц из Chrome?

Фон:
Я потратил несколько дней на это без везения, есть несколько предложенных Stack решений, но ни один из них не работает (в Chrome). Поскольку мы используем Chrome на работе, я только тестировал его, поэтому многие из них ниже говорят, что Chrome просто не может этого сделать, но, возможно, я что-то упустил?

Я пробовал эти ссылки Stack (..и еще много):

Печать нижнего колонтитула на каждой печатной странице с веб-сайта во всех браузерах (Chrome)

Есть ли способ получить заголовок/нижний колонтитул веб-страницы на каждой странице?

Как использовать HTML для печати верхнего и нижнего колонтитула на каждой печатной странице документа?

Создание верхних и нижних колонтитулов страниц с использованием CSS для печати

Если я не могу, используйте повторяющиеся верхние/нижние колонтитулы... тогда моя следующая идея - подсчитать мои строки в моем объекте клона и разбить его на максимальное число, создать новую страницу (принудительная высота) и запустить петля снова на другой странице в другом div.

Я действительно ценю любые предложения по запуску решения header/footer, поскольку в целом для моего приложения было готовое печатное предложение.

Ответ 1

Хорошо, никто не принимает этого, так что еще несколько дней оглядываясь и выбирая не писать собственное решение, вот что я нашел.

В самом низу Stack post без голосов и комментариев не было этой одинокой маленькой ссылки: http://welcome.totheinter.net/columnizer-jquery-plugin/#comment-53243

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

В моем случае мне понадобился один столбец (ширина страницы) и повторение верхних и нижних колонтитулов. Я использовал пример 10 в качестве базы: http://welcome.totheinter.net/autocolumn/sample10.html

Я просто добавил ссылку на подключаемый модуль, изменил необходимые идентификаторы и классы в соответствии с моей страницей и внес некоторые незначительные изменения CSS в высоты и ширину, и я смог распечатать многостраничный контент с повторением верхних и нижних колонтитулов в Гугл Хром! (моя компания предпочитала браузер)

TIPS:

  • Один маленький трюк CSS, я сделал контент div MIN-HEIGHT установленным так, чтобы он нажал нижний колонтитул на короткие страницы. (Не делайте этого, если вы хотите, чтобы у пользователя была опция портретной или альбомной ориентации). Мой окончательный отпечаток исправлен, так что это было здорово для меня.

  • Я тестировал разные высоты контента, чтобы увидеть, как он разбивает контент, он был гладким каждый раз.

Я попытался опубликовать свой последний пример в JsBin и Fiddle, но каждый раз он запускал ошибку.

Итак, пример 10 выше - отличное место для начала, как показано до и после.

Вот мой финал с переменным высотным содержимым и повторяющий верхние и нижние колонтитулы: (это представление, когда я нажимаю кнопку "Печать/кнопка браузера браузера" в Chrome) enter image description here

ОБНОВЛЕНИЕ 7/2014: Еще раз Chrome - это проблема моего существования с проблемами печати. Я увидел комментарий ниже о ссылке, которую я предоставил. Он прав, он правильно отображается, но вид печати неверен. Извините, но это хороший пример, чтобы изучить настройки.

Я все еще использую это решение, оно работает, но вам нужно настроить CSS и JS var для размера содержимого тела. Комбинации калибровки являются ОЧЕНЬ чувствительными, но когда вы получите правую и вертикальную ширину страницы, она работает. Я должен был написать отдельные функции для форматов бумаги Legal/Letter. Он ограничен, но работает для наших целей.

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

Ответ 2

Это может быть не прямой ответ на ваш вопрос, а, возможно, прямое решение вашей проблемы.

После сжигания дней и недель о том, как решить эту проблему, я, наконец, отказался от использования прямой печати html/css при повторении заголовков/нижних колонтитулов. Я видел много кодов и образцов, но каждый из них не отвечает тем, что в точности соответствует моим потребностям, всегда отсутствует или не печатается корректно.

Решение, приемлемое для моей, представляет собой комбинацию простого html, простого css и преобразования этого в pdf. Вы будете удивлены, как просто структура html и css.

Это решение не совсем мое, а комбинация вышеперечисленных кодов и библиотека wkhtmltopdf. Пожалуйста, не волнуйтесь, это очень просто установить, вот что я точно использовал Windows (MSVC 2013) версии 0.12.2.1, у меня есть Windows 7 64bit с xampp как мой стек. Вы можете следовать этому руководству о том, как Установить wkhtmltopdf

После установки вы сможете создать этот код

<?php
// Test correct and failed output
// shell_exec('c:\wkhtmltopdf\bin\wkhtmltopdf --asdasdsadsad 2>> err1.txt 1>> out1.txt');
shell_exec('c:\wkhtmltopdf\bin\wkhtmltopdf --orientation Landscape C:\xampp\htdocs\test\Template.html google.pdf');
?>
<html>
    <head>
    </head>
    <body>
        <p>Magical ponies!</p>
    </body>
</html>

Ответ 3

Ответ на этот вопрос зависит от структуры вашего документа. Если его можно структурировать как серию коротких, нерушимых разделов, то вам повезло! Существует совместимый с Chrome способ имитации заголовков страниц в этом типе документа (фактически, он работает во всех популярных настольных браузерах).

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

Test doc:

<!DOCTYPE html>
<html>
  <head>
    <style>
      .section {
        display: table;
        width: 100%;
      }
      .section > div {
        display: table-cell;
        overflow: hidden;
      }
      .section ~ .section > div:before {
        content: "";
        display: block;
        margin-bottom: -2.5em; /* inverse of header height */
      }
      .section > div > div {
        page-break-inside: avoid;
        display: inline-block;
        width: 100%;
        vertical-align: top;
      }
      .header {
        height: 2.5em; /* header must have a fixed height */
      }
      .content { /* this rule set just adds space between sections and is not required */
        margin-bottom: 1.25em;
      }
    </style>
  </head>
  <body>
    <div class="section">
      <div>
        <div>
          <div class="header">
            PAGE HEADER
          </div>
          <div class="content">
            Unbreakable section.<br/>Unbreakable section.<br/>Unbreakable section.<br/>
            Unbreakable section.<br/>Unbreakable section.<br/>Unbreakable section.
          </div>
        </div>
      </div>
    </div>
    <div class="section">
      <div>
        <div>
          <div class="header">
            PAGE HEADER
          </div>
          <div class="content">
            Unbreakable section.<br/>Unbreakable section.<br/>Unbreakable section.
          </div>
        </div>
      </div>
    </div>
    <div class="section">
      <div>
        <div>
          <div class="header">
            PAGE HEADER
          </div>
          <div class="content">
            Unbreakable section.<br/>Unbreakable section.<br/>Unbreakable section.
          </div>
        </div>
      </div>
    </div>
    <div class="section">
      <div>
        <div>
          <div class="header">
            PAGE HEADER
          </div>
          <div class="content">
            Unbreakable section.<br/>Unbreakable section.<br/>Unbreakable section.<br/>
            Unbreakable section.
          </div>
        </div>
      </div>
    </div>
    <div class="section">
      <div>
        <div>
          <div class="header">
            PAGE HEADER
          </div>
          <div class="content">
            Unbreakable section.<br/>Unbreakable section.
          </div>
        </div>
      </div>
    </div>
    <div class="section">
      <div>
        <div>
          <div class="header">
            PAGE HEADER
          </div>
          <div class="content">
            Unbreakable section.<br/>Unbreakable section.<br/>Unbreakable section.<br/>
            Unbreakable section.<br/>Unbreakable section.
          </div>
        </div>
      </div>
    </div>
    <div class="section">
      <div>
        <div>
          <div class="header">
            PAGE HEADER
          </div>
          <div class="content">
            Unbreakable section.<br/>Unbreakable section.<br/>Unbreakable section.<br/>
            Unbreakable section.
          </div>
        </div>
      </div>
    </div>
    <div class="section">
      <div>
        <div>
          <div class="header">
            PAGE HEADER
          </div>
          <div class="content">
            Unbreakable section.<br/>Unbreakable section.<br/>Unbreakable section.
          </div>
        </div>
      </div>
    </div>
    <div class="section">
      <div>
        <div>
          <div class="header">
            PAGE HEADER
          </div>
          <div class="content">
            Unbreakable section.<br/>Unbreakable section.<br/>Unbreakable section.
          </div>
        </div>
      </div>
    </div>
    <div class="section">
      <div>
        <div>
          <div class="header">
            PAGE HEADER
          </div>
          <div class="content">
            Unbreakable section.<br/>Unbreakable section.<br/>Unbreakable section.<br/>
            Unbreakable section.
          </div>
        </div>
      </div>
    </div>
    <div class="section">
      <div>
        <div>
          <div class="header">
            PAGE HEADER
          </div>
          <div class="content">
            Unbreakable section.<br/>Unbreakable section.<br/>Unbreakable section.<br/>
            Unbreakable section.
          </div>
        </div>
      </div>
    </div>
    <div class="section">
      <div>
        <div>
          <div class="header">
            PAGE HEADER
          </div>
          <div class="content">
            Unbreakable section.<br/>Unbreakable section.<br/>Unbreakable section.
          </div>
        </div>
      </div>
    </div>
    <div class="section">
      <div>
        <div>
          <div class="header">
            PAGE HEADER
          </div>
          <div class="content">
            Unbreakable section.<br/>Unbreakable section.<br/>Unbreakable section.<br/>
            Unbreakable section.<br/>Unbreakable section.
          </div>
        </div>
      </div>
    </div>
  </body>
</html>

Вы не хотели бы использовать эту технику в документах с блоками текста размером более 1/3 страницы, но отлично подходят для документов, которые состоят из небольших дискретных разделов, таких как формы и таблицы.

Мой ответ на этот другой пост также может представлять интерес. Он показывает, как создавать совместимые с Chrome повторяющиеся заголовки таблиц, используя те же основные принципы, но вся дополнительная разметка добавляется через javascript, чтобы он не "загрязнял" исходный HTML-документ.

Ответ 4

К сожалению, это известная ошибка веб-кита (Chrome и Safari) - см. здесь. Я пытался найти обходное решение много раз, но не повезло.

Пример, связанный с принятым ответом , кажется, не работает, когда вы печатаете из браузера.

Ответ 5

Для всех, кто по-прежнему сталкивается с этой проблемой, я только что создал проект с открытым исходным кодом, который позволяет печатать верхние и нижние колонтитулы в Chrome (и он должен работать и в других браузерах. См. этот ответ:

fooobar.com/info/18579/...