Czy istnieje sposób na wydrukowanie nagłówka / stopki strony internetowej na każdej stronie?

Na podstawie moich badań, wydaje się, że to, co chcę zrobić, nie jest możliwe, ale w przypadku, gdy coś się zmieniło, chciałem sprawdzić, czy ktoś wymyślił sposób, aby to zrobić.

Mam aplikację internetową, która generuje raporty do wydruku na podstawie wyborów użytkownika w oknie przeglądarki. Mam niestandardowy nagłówek i stopkę, które po wydrukowaniu raportu z przeglądarki powinny być powtarzane na każdej wydrukowanej stronie. Nie jest to nagłówek przeglądarki i stopka, których potrzebuję, ale raczej niestandardowe które generuję. Ponadto, nie sądzę, że jest to kwestia CSS i typów multimediów, ale nie jestem ekspertem CSS. Nie mam problemów z wydrukowaniem nagłówka i stopki, ale nie mogę ich wydrukować na każdej stronie. Czytałem, że być może gdybym odtworzył moje strony raportu za pomocą tabel, a następnie użył tagów nagłówka tabeli i CSS, może to działać przynajmniej, aby uzyskać nagłówek na każdej stronie. Nie udało mi się z tym jeszcze, ale spróbuję jeszcze raz, jeśli jest to jedyna opcja. Współpracownik zasugerował, że liczę linie w moim php i ręcznie umieścić nagłówek i stopkę zgodnie z wymaganiami. Myślę, że to jest opcja, ale wydaje się, że powinien być sposób, aby to zrobić, który nie jest tak "brutalna siła"!

Inne zastrzeżenie jest to, że muszę obsługiwać IE 6, więc podejrzewam, że niektóre rzeczy CSS próbowałem po prostu nie są obsługiwane.

Jeśli ktoś wie jak to zrobić, to byłoby świetnie! Jeśli nie, będę musiał przemyśleć swoje podejście.

Z góry dzięki!

Aktualizacja (14 grudnia 2011)

Poczyniłem znaczne postępy w tej kwestii, i korzystając z niektórych informacji z odpowiedzi, stworzyłem raporty, które były użyteczne, ale nigdy tak ładne lub tak profesjonalne, jak chciałem. Stopki nie byłyby wystarczająco blisko dołu strony, musiałem wykonać wiele zgadywania i" kruchych " obliczeń o tym, jak duży będzie tekst, aby zdecydować się na wstawianie podziałów stron, mogłem obsługiwać tylko ograniczony zestaw formatów stron, a wszelkie zmiany w raportach powodowały w kaskadzie zmian kodu i jeszcze bardziej kruchych obliczeń. Zawsze był scenariusz, który złamał część jakiegoś raportu. Zmieniliśmy wymagania i teraz generujemy raporty w formacie PDF przy użyciu protokołu TCPDF . Dokumentacja jest nieco nieprzejrzysta i wymaga pewnych eksperymentów, ale wyniki są znacznie lepsze i teraz raporty wyglądają tak, jak powinny. Powiedziałbym każdemu, kto próbuje zrobić raporty HTML z przeglądarki, chyba że są one bardzo proste, oszczędź sobie frustracji (jak inni powiedzieli mi tutaj) i idź z PDF-ami lub czymś podobnym.

Author: Carvell Fenton, 2009-11-12

4 answers

Można to zrobić za pomocą tabel - i Wiem, że zaryzykuję odrzucenie sugerując użycie tabel do layoutu-ale mówimy tutaj o IE6, który nie jest znany z fantastycznej obsługi CSS: -)

Jeśli ustawisz styl CSS w następujący sposób:

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

Następnie, gdy tworzysz swój HTML, Renderuj swoje ciało jako:

<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>

Tak, to nie jest dobre (tables vs CSS), to nie jest idealne, ale (co ważne dla ciebie) to działa na IE6. Nie mogę komentować Firefoksa, bo nie testowałem go tam, ale to powinno się udać. Będzie to również obsługiwać różne rozmiary stron, różne rozmiary czcionek itp. więc to powinno "po prostu działać".

Jeśli chcesz, aby nagłówek i stopka były wyświetlane tylko na nośnikach drukowanych, użyj parametrów @ media, aby zrobić właściwą rzecz:

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

Uwaga
od lipca 2015 r. będzie to nadal działać tylko w Firefoksie i IE. Przeglądarki oparte na Webkit (por. Chrome, Safari) mają od dawna w swoich trackerach problemowych Błędy o tym, jeśli ktoś czuje się mocno wystarczy głosować na nich:

Komentarze pod tym pytaniem mówią mi, że jest to teraz rozwiązane w Chrome. Sam się nie sprawdzałem: -)

Oryginalne błędy przeciwko Chrome (w celach informacyjnych) to:

 32
Author: Chris J,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-16 11:57:07

To będzie działać w niektórych przeglądarkach, nie we wszystkich. Myślę, że nie ma eleganckiego rozwiązania między przeglądarkami

Dołącz stopkę/nagłówek wydruku w divs na stronie (w tym przykładzie div id='printableFooter')

W pliku css na ekranie wpisz:

#printableFooter {display: none;}

W pliku Print css:

#printableFooter {display: block; position: fixed; bottom: 0;}
 5
Author: UpTheCreek,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-11-12 14:17:03

Proponuję podzielić stronę w tabeli i dodać część nagłówka do pierwszego wiersza i część stopki do ostatniego wiersza. Zawartość wierszy między pierwszym i ostatnim wierszem może być zmieniana dynamicznie, dzięki czemu otrzymasz stały nagłówek i stopkę na żądanych stronach.

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

 5
Author: Sachin Chourasiya,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-11-12 15:19:59

Spróbuj wygenerować dokument (rtf / pdf) do wydruku

 3
Author: Horacio N. Hdez.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-11-12 15:17:02