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

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

У меня есть веб-приложение, которое создает отчеты для печати на основе пользовательских настроек в окне браузера. У меня есть пользовательский верхний и нижний колонтитулы, которые, когда отчет печатается из браузера, должны повторяться на каждой печатной странице. Это не верхний и нижний колонтитулы браузера, которые мне нужны, а скорее пользовательские, которые я генерирую. Кроме того, я не думаю, что это проблема типов CSS и медиа, но я не эксперт по CSS. У меня нет проблем с получением заголовка и нижнего колонтитула для печати один раз, но я не могу заставить их печатать на каждой странице. Я читал, что, возможно, если бы я воссоздал страницы своего отчета с помощью таблиц, а затем использовал теги заголовков таблиц и CSS, которые могут работать, по крайней мере, для получения заголовка на каждой странице. У меня пока не было успеха, но я попробую еще раз, если это единственный вариант. Сотрудник предложил мне подсчитать строки в моем php и вручную поместить верхний и нижний колонтитулы по мере необходимости. Я предполагаю, что это вариант, но кажется, что должен быть способ сделать это, что не так "грубая сила"!

Другой оговоркой является то, что я должен поддерживать IE 6, поэтому я подозреваю, что некоторые из вещей CSS, которые я пробовал, просто не поддерживаются.

Если кто-то знает какой-либо способ сделать это, это было бы здорово! Если этого не произойдет, мне придется пересмотреть мой подход.

Спасибо заранее!

ОБНОВЛЕНИЕ (14 декабря 2011 г.)

Я добился значительного прогресса в этом вопросе, и, используя часть информации из ответов, я делал отчеты, которые можно было использовать, но никогда не так красиво или профессионально, как я хотел. Нижние колонтитулы, как правило, не были достаточно близки к нижней части страницы, мне приходилось делать много догадок и "хрупких" вычислений о том, как большой текст будет заключаться в том, чтобы принять решение о вставке разрывов страниц, я мог поддерживать только ограниченную набор форматов страниц и любые изменения в отчетах привели к каскаду изменений кода и еще более хрупким вычислениям. Всегда был сценарий, который нарушил часть отчета. Мы пересмотрели требования и теперь генерируем отчеты в формате PDF с использованием TCPDF. Документация немного непрозрачна и требует некоторых экспериментов, но результаты намного выше, и теперь отчеты появляются так, как должны. Я бы сказал, что кто-то пытается делать HTML-отчеты из браузера, если они не очень простые, спасите себя от разочарования (как говорили мне другие здесь) и идут с PDF файлами или чем-то подобным.

Ответ 1

Это можно сделать с помощью таблиц - и я знаю, что я буду рисковать нисходящим потоком, предлагая использовать таблицы для макета, - но мы говорим здесь о IE6, который не известен своей фантастической поддержкой CSS: -)

Если вы установите стиль CSS следующим образом:

thead { display: table-header-group; }
tfoot { display: table-footer-group; }

Затем, создав свой HTML, сделайте свое тело следующим:

<body>
<table>
   <thead><tr><td>Your header goes here</td></tr></thead>
   <tfoot><tr><td>Your footer goes here</td></tr></tfoot>
   <tbody>
     <tr><td>
     Page body in here -- as long as it needs to be
     </td></tr>
   </tbody>
</table>
</body>

Да, это не хорошо (таблицы против CSS), это не идеально, но (что важно для вас) он работает на IE6. Я не могу комментировать Firefox, поскольку я его не тестировал, но он должен выполнять эту работу. Это также будет обрабатывать страницы разного размера, разные размеры шрифта и т.д., Поэтому он должен "просто работать".

Если вы хотите, чтобы верхний и нижний колонтитулы отображались только на печатных носителях, используйте параметры @media для правильной работы:

@media print {
    thead { display: table-header-group; }
    tfoot { display: table-footer-group; }
}
@media screen {
    thead { display: none; }
    tfoot { display: none; }
}

Примечание
По состоянию на июль 2015 года это будет работать только в Firefox и IE. В браузерах на основе Webkit (см. Chrome, Safari) есть давние ошибки в своих проблемах, если кто-то чувствует себя достаточно сильным, чтобы проголосовать за них:

Ответ 2

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

----------
ROW1    HEADER
----------
ROW2   
 Insert dynamic contents here
ROW N-1
----------
ROW N Footer

Ответ 3

попытайтесь создать документ (rtf | pdf) для печати

Ответ 4

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

Включите нижний колонтитул печати/заголовок, который вы хотите в divs на странице (в этом примере div id = 'printableFooter')

В файле css экрана поместите:

#printableFooter {display: none;}

В файле css для печати:

#printableFooter {display: block; position: fixed; bottom: 0;}