Saya punya proyek yang membutuhkan pencetakan tabel HTML dengan banyak baris.
Masalah saya adalah cara tabel dicetak di atas beberapa halaman. Terkadang akan memotong satu baris menjadi dua, sehingga tidak dapat dibaca karena satu setengahnya ada di tepi halaman yang berdarah dan sisanya dicetak di bagian atas halaman berikutnya.
Satu-satunya solusi yang masuk akal yang dapat saya pikirkan adalah menggunakan DIV bertumpuk alih-alih sebuah tabel dan memaksa pemecah halaman jika diperlukan .. tetapi sebelum melakukan seluruh perubahan, saya pikir saya bisa bertanya di sini sebelumnya.
html
css
printing
html-table
h3.
sumber
sumber
<thead>
ke tabel Anda dengan css berikutthead {display: table-header-group; }
untuk mencetak header-tabel pada semua halaman berikutnya (berguna untuk tabel data loooooong).Jawaban:
sumber
Catatan: saat menggunakan page-break-after: selalu untuk tag, ia akan membuat page break setelah bit terakhir tabel, membuat halaman yang sama sekali kosong di akhir setiap waktu! Untuk memperbaikinya, ubah saja ke page-break-after: auto. Ini akan rusak dengan benar dan tidak membuat halaman kosong tambahan.
sumber
Memperluas dari solusi Sinan Ünür:
Tampaknya
page-break-inside:avoid
di beberapa browser hanya dipertimbangkan untuk elemen blok, bukan untuk sel, tabel, baris maupun inline-blok.Jika Anda mencoba untuk
display:block
yangTR
tag, dan menggunakan adapage-break-inside:avoid
, ia bekerja, tetapi messes main dengan tata letak meja Anda.sumber
$(document).ready(function(){$("table tbody th, table tbody td").wrapInner("<div></div>");});
tr { display: block; }
untuk Print Only, daripada menambahkan semua<div>
elemen asing . (Belum diuji tetapi layak dilihat)Tidak ada jawaban di sini yang berfungsi untuk saya di Chrome. AAverin di GitHub telah membuat beberapa Javascript yang berguna untuk tujuan ini dan ini berhasil untuk saya:
Cukup tambahkan js ke kode Anda dan tambahkan kelas 'splitForPrint' ke tabel Anda dan itu akan membagi tabel dengan rapi menjadi beberapa halaman dan menambahkan header tabel ke setiap halaman.
sumber
splitForPrint
tetapi di JS tidak ada tempat mengambil referensi elemen menggunakan classNamesplitForPrint
. Hanya bagian manavar splitClassName = 'splitForPrint';
tetapi itu saja.Gunakan properti CSS ini:
Misalnya:
melalui
sumber
Saya baru-baru ini memecahkan masalah ini dengan solusi yang bagus.
CSS :
JS :
Bekerja seperti pesona!
sumber
Saya akhirnya mengikuti pendekatan @ vicenteherrera, dengan beberapa tweak (yang mungkin bootstrap 3 spesifik).
Pada dasarnya; kita tidak dapat memecahkan
tr
s, atautd
s karena itu bukan elemen tingkat blok. Jadi kami menanamkandiv
ke dalam masing-masing, dan menerapkanpage-break-*
aturan kami terhadapdiv
. Kedua; kami menambahkan beberapa bantalan ke bagian atas masing-masing div ini, untuk mengimbangi setiap artefak gaya.Penyesuaian margin dan padding diperlukan untuk mengimbangi beberapa jenis jitter yang sedang diperkenalkan (menurut tebakan saya - dari bootstrap). Saya tidak yakin bahwa saya menghadirkan solusi baru dari jawaban lain untuk pertanyaan ini, tetapi saya pikir mungkin ini akan membantu seseorang.
sumber
Saya menghadapi masalah yang sama dan mencari solusi di mana-mana, akhirnya, saya menemukan sesuatu yang bekerja untuk saya untuk setiap browser.
gunakan css ini atau Alih-alih css Anda dapat memiliki javascript ini
Semoga ini akan bekerja untuk Anda juga.
sumber
Saya memeriksa banyak solusi dan tidak ada yang bekerja dengan baik.
Jadi saya mencoba trik kecil dan berhasil:
tfoot with style:
position: fixed; bottom: 0px;
ditempatkan di bagian bawah halaman terakhir, tetapi jika footer terlalu tinggi itu tumpang tindih dengan isi tabel.hanya bicara:
display: table-footer-group;
tidak tumpang tindih, tetapi tidak ada di bagian bawah halaman terakhir ...Mari kita beri dua langkah:
Satu cadangan ditempatkan di halaman non-terakhir, kedua menempatkan di footer aktual Anda.
sumber
Saya sudah mencoba semua saran yang diberikan di atas dan menemukan solusi lintas browser yang sederhana dan berfungsi untuk masalah ini. Tidak diperlukan style atau page break untuk solusi ini. Untuk solusinya, format tabel harus seperti:
Format di atas diuji dan bekerja di peramban silang
sumber
Baiklah Guys ... Sebagian besar Solusi di sini tidak berhasil. Jadi begini cara kerjanya bagi saya ..
HTML
Set kepala pertama digunakan sebagai dummy sehingga tidak akan ada batas atas yang hilang di kepala ke-2 (yaitu kepala asli) saat page break.
sumber
Jawaban yang diterima tidak berfungsi untuk saya di semua browser, tetapi mengikuti css berhasil untuk saya:
Struktur html adalah:
Dalam kasus saya, ada beberapa masalah tambahan dengan
thead tr
, tetapi ini menyelesaikan masalah asli menjaga baris tabel dari melanggar.Karena masalah header, saya akhirnya berakhir dengan:
Ini tidak mencegah baris dari melanggar; hanya konten setiap sel.
sumber