Mam projekt, który wymaga wydrukowania tabeli HTML z wieloma wierszami.
Moim problemem jest sposób drukowania tabeli na wielu stronach. Czasami przecina rząd na pół, co czyni go nieczytelnym, ponieważ jedna połowa znajduje się na krawędzi krwawiącej strony, a reszta jest drukowana na górze następnej strony.
Jedynym możliwym rozwiązaniem, jakie mogę wymyślić, jest stosowanie skumulowanych DIV zamiast tabeli i wymuszanie podziału strony, jeśli to konieczne .. ale przed przejściem przez całą zmianę pomyślałem, że mógłbym tutaj o to zapytać.
html
css
printing
html-table
h3.
źródło
źródło
<thead>
do tabeli za pomocą następującego cssthead {display: table-header-group; }
, aby wydrukować nagłówek tabeli na wszystkich kolejnych stronach (przydatne w przypadku długich tabel danych).Odpowiedzi:
źródło
Uwaga: w przypadku korzystania z podziału strony: zawsze dla tagu utworzy podział strony po ostatnim kawałku tabeli, za każdym razem tworząc na końcu całkowicie pustą stronę! Aby to naprawić, po prostu zmień go na podział strony po: auto. Zepsuje się poprawnie i nie utworzy dodatkowej pustej strony.
źródło
Rozszerzenie z rozwiązania Sinan Ünür:
Wydaje się, że
page-break-inside:avoid
w niektórych przeglądarkach brane są pod uwagę tylko elementy bloku, a nie komórka, tabela, wiersz ani blok wstawiany.Jeśli spróbujesz
display:block
zTR
tagiem i używać tampage-break-inside:avoid
, to działa, ale mes wokół z układu tabeli.źródło
$(document).ready(function(){$("table tbody th, table tbody td").wrapInner("<div></div>");});
tr { display: block; }
na Tylko do drukowania, zamiast dodawać wszystkie dodatkowe<div>
elementy. (Nie testowałem, ale warto na to spojrzeć)Żadna z odpowiedzi tutaj nie działała dla mnie w Chrome. AAverin na GitHub stworzył w tym celu użyteczny skrypt Javascript i działało to dla mnie:
Po prostu dodaj js do swojego kodu i dodaj klasę „splitForPrint” do swojej tabeli, a on porządnie podzieli tabelę na wiele stron i doda nagłówek tabeli do każdej strony.
źródło
splitForPrint
w JS nigdzie nie wziął odniesienia do elementu za pomocą nazwy klasysplitForPrint
. Tylko część gdzie,var splitClassName = 'splitForPrint';
ale to wszystko.Użyj tych właściwości CSS:
Na przykład:
przez
źródło
Niedawno rozwiązałem ten problem dobrym rozwiązaniem.
CSS :
JS :
Działa jak marzenie!
źródło
Skończyło się na podejściu @ vicenteherrera, z pewnymi poprawkami (które są prawdopodobnie specyficzne dla bootstrap 3).
Gruntownie; nie możemy złamać
tr
s, lubtd
s, ponieważ nie są elementami na poziomie bloku. Więc włączamydiv
s do każdego z nich i stosujemy naszepage-break-*
zasady przeciwkodiv
. Po drugie; dodajemy trochę dopełnienia na górze każdego z tych div, aby zrekompensować wszelkie artefakty związane ze stylizacją.Korekty marginesów i dopełnienia były konieczne, aby zrównoważyć wprowadzany jitter (moim zdaniem - z bootstrap). Nie jestem pewien, czy przedstawiam jakieś nowe rozwiązanie z innych odpowiedzi na to pytanie, ale myślę, że to może komuś pomóc.
źródło
Napotkałem ten sam problem i wszędzie szukałem rozwiązania, w końcu znalazłem coś, co działa dla mnie dla każdej przeglądarki.
użyj tego css lub Zamiast css możesz mieć ten javascript
Mam nadzieję, że to również zadziała dla ciebie.
źródło
Sprawdziłem wiele rozwiązań i nikt nie działał dobrze.
Więc wypróbowałem małą sztuczkę i to działa:
tfoot ze stylem:
position: fixed; bottom: 0px;
jest umieszczany na dole ostatniej strony, ale jeśli stopka jest zbyt wysoka, nakłada się na nią zawartość tabeli.tfoot with only:
display: table-footer-group;
nie nakłada się, ale nie znajduje się na dole ostatniej strony ...Połóżmy dwie stopy:
Jedna rezerwuje miejsce na niekończących się stronach, druga umieszcza stopkę rozliczeniową.
źródło
Wypróbowałem wszystkie powyższe sugestie i znalazłem proste i działające rozwiązanie tego problemu dla różnych przeglądarek. To rozwiązanie nie wymaga stylów ani podziału strony. Dla rozwiązania format tabeli powinien wyglądać następująco:
Powyższy format został przetestowany i działa w różnych przeglądarkach
źródło
Cóż, chłopaki ... Większość rozwiązań tutaj nie działała. Tak to dla mnie działało ...
HTML
Pierwszy zestaw nagłówka jest używany jako fikcyjny, dzięki czemu podczas łamania strony nie będzie brakującej górnej ramki w drugiej głowie (tj. Oryginalnej).
źródło
Akceptowana odpowiedź nie działała dla mnie we wszystkich przeglądarkach, ale następujące css działało dla mnie:
Struktura HTML była:
W moim przypadku wystąpiły dodatkowe problemy z
thead tr
, ale to rozwiązało pierwotny problem powstrzymywania wierszy tabeli przed zerwaniem.Z powodu problemów z nagłówkiem ostatecznie udało mi się:
Nie zapobiegło to łamaniu się wierszy; tylko zawartość każdej komórki.
źródło