Saya menggunakan properti CSS,
Jika saya menggunakan page-break-after: always;
=> Ini mencetak halaman kosong ekstra sebelumnya
Jika saya menggunakan page-break-before: always;
=> Ini mencetak halaman kosong ekstra setelahnya. Bagaimana cara menghindarinya?
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<style type="text/css">
.print{
page-break-after: always;
}
</style>
<script type="text/javascript">
window.print();
</script>
</head>
<body>
<div class="print">fd</div>
<div class="print">fdfd</div>
</body>
</html>
<div>This page intentionally left blank.</div>
Jawaban:
Anda mungkin bisa menambahkan
.print:last-child { page-break-after: auto; }
jadi
print
elemen terakhir tidak akan mendapatkan jeda halaman ekstra.Perhatikan bahwa: pemilih anak terakhir tidak didukung di IE8, jika Anda menargetkan browser yang malang itu.
sumber
Sudahkah kamu mencobanya?
@media print { html, body { height: 99%; } }
sumber
height: 100%
. Saya bisa menimpa ini denganheight: auto
height: auto;
lebih elegan daripadaheight: 99%;
Solusi yang dijelaskan di sini membantu saya ( tautan arsip web ).
Pertama-tama, Anda dapat menambahkan batas ke semua elemen untuk melihat apa yang menyebabkan halaman baru ditambahkan (mungkin beberapa margin, bantalan, dll).
div { border: 1px solid black;}
Dan solusinya sendiri adalah menambahkan gaya berikut:
html, body { height: auto; }
sumber
jika Tidak ada yang berhasil, coba ini
@media print { html, body { height:100vh; margin: 0 !important; padding: 0 !important; overflow: hidden; } }
pastikan 100vh
sumber
Ini berhasil untuk saya
.print+.print { page-break-before: always; }
sumber
Jika Anda hanya ingin menggunakan CSS dan ingin menghindari jeda halaman, gunakan
.print{ page-break-after: avoid; }
Lihatlah media berhalaman
Anda dapat menggunakan skrip yang setara untuk pageBreakBefore dan pageBreakAfter, menetapkan nilainya secara dinamis. Misalnya, daripada memaksakan hentian halaman kustom pada pengunjung Anda, Anda bisa membuat skrip untuk menjadikannya opsional. Di sini saya akan membuat kotak centang yang beralih antara memotong halaman di header (h2) dan atas kebijakan printer sendiri (default):
<form name="myform"> <input type="checkbox" name="mybox" onClick="breakeveryheader()"> </form> <script type="text/javascript"> function breakeveryheader(){ var thestyle=(document.forms.myform.mybox.checked)? "always" : "auto" for (i=0; i<document.getElementsByTagName("H2").length; i++) document.getElementsByTagName("H2")[i].style.pageBreakBefore=thestyle }
Klik di sini untuk contoh yang menggunakan ini. Anda dapat mengganti H2 di dalam skrip dengan tag lain seperti P atau DIV.
http://www.javascriptkit.com/dhtmltutors/pagebreak.shtml
sumber
diatur
display:none
untuk semua elemen lain yang bukan untuk dicetak. pengaturanvisibility:hidden
akan membuat mereka tetap tersembunyi, tetapi mereka semua masih ada dan telah mengambil tempat untuk mereka. halaman kosong adalah untuk elemen tersembunyi itu.sumber
:not
selektor untuk mengatur semuanyadisplay: none
tetapi bukan kelas cetak, sepertibody > :not(.print) { display: none !important; }
Tidak tahu (untuk saat ini) mengapa, tapi yang ini membantu:
@media print { html, body { border: 1px solid white; height: 99%; page-break-after: avoid; page-break-before: avoid; } }
Semoga seseorang akan menyelamatkan rambutnya saat berjuang dengan masalah ...;)
sumber
Sepertinya ada banyak kemungkinan penyebabnya, dengan tema yang mungkin adalah bahwa body tag berakhir dengan ketinggian yang dianggap terlalu besar karena alasan tertentu.
Penyebab saya:
min-height: 100%
di stylesheet dasar.Solusi saya:
min-height: auto
dalam@media print
arahan.Catatan,
auto
tampaknya bukan nilai yang benar, menurut PhpStorm. Namun, ini benar menurut dokumentasi Mozilla tentang min-height :sumber
initial
karena saya berasumsi itu akan menjadi masalah untuk elemen berukuran dinamis. Perhatikan bahwa nilai awalnya adalah 0, jadi saya masih menganggap ituauto
secara umum lebih berguna.Saya memiliki masalah serupa tetapi penyebabnya adalah karena saya memiliki margin 40px di bagian bawah halaman, jadi baris terakhir akan selalu tertutup meskipun ada ruang untuk itu di halaman terakhir. Bukan karena
page-break-*
perintah css apa pun . Saya memperbaikinya dengan menghapus margin pada cetakan dan itu berfungsi dengan baik. Hanya ingin menambahkan solusi saya jika ada orang lain yang memiliki sesuatu yang serupa!sumber
Dalam kasus saya, pengaturan lebar ke semua div membantu:
.page-content div { width: auto !important; max-width: 99%; }
sumber
Saya mengubah tampilan css dan properti lebar area cetak
#printArea{ display:table; width:100%; }
sumber
Setelah berjuang dengan berbagai pengaturan dan ketinggian jeda halaman dan jutaan aturan CSS yang berbeda pada tag tubuh, saya akhirnya menyelesaikannya lebih dari setahun kemudian.
Saya memiliki div yang seharusnya menjadi satu-satunya halaman yang dicetak, tetapi saya mendapatkan beberapa halaman kosong setelahnya. Tag tubuh saya disetel ke
visibility:hidden;
tapi itu belum cukup. Elemen halaman yang tinggi secara vertikal masih membutuhkan 'ruang'. Jadi saya menambahkan ini di aturan CSS cetak saya:untuk menargetkan div tertentu dengan idnya yang berisi elemen tata letak halaman yang tinggi. Saya mengecilkan ketinggian dan kemudian menghapusnya dari tata letak. Tidak ada lagi halaman kosong. Bertahun-tahun kemudian saya dengan senang hati memberi tahu klien saya bahwa saya berhasil memecahkannya. Semoga ini bisa membantu seseorang.
sumber
visibility: hidden;
masih akan memakan tempat. Jika Anda menggunakandisplay: none;
ruang akan dihapus. Pada saat itu Anda tidak perlu mengatur ketinggian secara khusus, cukup FYI.Chrome tampaknya memiliki bug di mana dalam situasi tertentu, menyembunyikan elemen pasca-pemuatan dengan display: tidak ada, menyisakan banyak ruang ekstra. Saya kira mereka menghitung tinggi dokumen sebelum dokumen selesai rendering. Chrome juga mengaktifkan 2 peristiwa perubahan media, dan tidak mendukung onbeforeprint, dll. Mereka pada dasarnya adalah pencetakan. Inilah solusi saya:
@media print { body { display: none; } } body.printing { display: block; }
Anda memberi body class = "printing" pada doc siap, dan itu memungkinkan gaya cetak. Sistem ini memungkinkan modularisasi gaya cetak, dan pratinjau cetak dalam browser.
sumber
.print:last-child{ page-break-after: avoid; page-break-inside: avoid; margin-bottom: 0px; }
Ini berhasil untuk saya.
sumber
Tambahkan css ini ke halaman yang sama untuk memperluas file css.
<style type="text/css"> <!-- html, body { height: 95%; margin: 0 0 0 0; } --> </style>
sumber
Saya mencoba semua solusi, ini berhasil untuk saya:
<style> @page { size: A4; margin: 1cm; } .print { display: none; } @media print { div.fix-break-print-page { page-break-inside: avoid; } .print { display: block; } } .print:last-child { page-break-after: auto; } </style>
sumber
Saya baru saja menemukan kasus di mana berubah dari
</div> <script src="addressofjavascriptfile.js"></script> </body> </html>
untuk
<script src="addressofjavascriptfile.js"></script> </div> </body> </html>
memperbaiki masalah ini.
sumber
Anehnya pengaturan perbatasan transparan menyelesaikan ini untuk saya:
@media print { div { border: 1px solid rgba(0,0,0,0) } }
Mungkin sudah cukup untuk mengatur perbatasan pada elemen kontainer. <- Untestet.
sumber
Tidak ada jawaban yang berhasil dengan saya, tetapi setelah membaca semuanya, saya menemukan apa yang menjadi masalah dalam kasus saya.Saya memiliki 1 halaman Html yang ingin saya cetak tetapi mencetak dengan itu halaman kosong ekstra putih. Saya menggunakan AdminLTE a bootstrap 3 tema untuk halaman laporan untuk dicetak dan di dalamnya tag footer saya ingin menempatkan teks ini di kanan bawah halaman:
Saya menggunakan jquery untuk meletakkan teks itu daripada footer "Hak Salin" sebelumnya dengan
$("footer").html("Printed by Mr. Someone");
dan secara default di tema footer tag menggunakan kelas .main-footer yang memiliki atribut
padding: 15px; border-top: 1px solid
yang menyebabkan ruang putih ekstra, jadi setelah mengetahui masalahnya, saya memiliki opsi berbeda, dan opsi terbaik adalah menggunakan
$( "footer" ).removeClass( "main-footer" );
Hanya di halaman spesifik itu
sumber
Letakkan hal-hal yang Anda butuhkan pada halaman dalam div dan gunakan page-break-inside: hindari pada div itu. Div Anda akan tetap di satu halaman dan masuk ke halaman kedua atau ketiga jika diperlukan, tetapi div berikutnya, jika harus melakukan jeda halaman, harus dimulai di halaman berikutnya.
sumber
Periksa apakah ada spasi setelah tag html di bagian bawah. Hapus spasi kosong di bawah ini membantu saya
sumber
Pertama, tiru lembar gaya cetak melalui alat pengembang browser Anda. Instruksi dapat ditemukan di sini .
Kemudian Anda akan ingin mencari bantalan ekstra, margin, batas, dll yang dapat memperpanjang dimensi halaman Anda melebihi 8,5in x 11in. Berikan perhatian khusus pada spasi karena ini tidak mungkin dideteksi melalui dialog pratinjau cetak. Jika ada spasi kosong yang seharusnya tidak ada di sana, klik kanan dan memeriksa elemen di bawah kursor akan menyoroti masalah (kecuali jika margin menyebabkannya).
sumber