Bagaimana cara mencetak div yang ditunjukkan (tanpa secara manual menonaktifkan semua konten lain pada halaman)?
Saya ingin menghindari dialog pratinjau baru, jadi membuat jendela baru dengan konten ini tidak berguna.
Halaman ini berisi beberapa tabel, salah satunya berisi div yang ingin saya cetak - tabel ditata dengan gaya visual untuk web, yang tidak boleh ditampilkan dalam bentuk cetak.
javascript
css
printing
dhtml
noesgard
sumber
sumber
Jawaban:
Ini adalah solusi umum, hanya menggunakan CSS , yang telah saya verifikasi untuk berfungsi.
Pendekatan alternatif tidak begitu baik. Penggunaan
display
itu rumit karena jika ada elemen yang memilikidisplay:none
maka keturunannya tidak akan menampilkan keduanya. Untuk menggunakannya, Anda harus mengubah struktur halaman Anda.Menggunakan
visibility
karya lebih baik karena Anda dapat mengaktifkan visibilitas untuk keturunan. Elemen yang tidak terlihat masih mempengaruhi tata letak, jadi saya pindahsection-to-print
ke kiri atas sehingga mencetak dengan benar.sumber
position:fixed
sebagai gantinya. Namun, Chrome dan Safari juga akan memotong konten, terutama setelah halaman pertama. Jadi solusi terakhir saya adalah menetapkan target dan semua orang tuanya untukoverflow:visible; position:absolute !important; top:0;left:0
#section-to-print
cocok dengan bagian itu sendiri;#section-to-print *
cocok dengan masing-masing sub-elemen bagian. Jadi aturan itu hanya membuat bagian dan semua isinya terlihat.Saya punya solusi yang lebih baik dengan kode minimal.
Tempatkan bagian Anda yang dapat dicetak di dalam div dengan id seperti ini:
Kemudian tambahkan acara seperti onclick (seperti yang ditunjukkan di atas), dan lulus id dari div seperti yang saya lakukan di atas.
Sekarang mari kita buat javascript yang sangat sederhana:
Perhatikan betapa sederhananya ini? Tidak ada sembulan, tidak ada jendela baru, tidak ada gaya gila, tidak ada perpustakaan JS seperti jquery. Masalah dengan solusi yang sangat rumit (jawabannya tidak rumit dan bukan yang saya maksudkan) adalah kenyataan bahwa ia TIDAK akan pernah menerjemahkan di semua browser! Jika Anda ingin membuat gaya berbeda, lakukan seperti yang ditunjukkan dalam jawaban yang dicentang dengan menambahkan atribut media ke tautan stylesheet (media = "print").
Tidak ada bulu, ringan, itu hanya berfungsi.
sumber
.click
. Sayang sekali, karena kodenya sangat ringan.Semua jawaban sejauh ini cukup cacat - mereka melibatkan penambahan
class="noprint"
untuk segala sesuatu atau akan berantakan didisplay
dalam#printable
.Saya pikir solusi terbaik adalah dengan membuat pembungkus di sekitar hal-hal yang tidak dapat dicetak:
Tentu saja ini tidak sempurna karena melibatkan sedikit perubahan dalam HTML Anda ...
sumber
Dengan jQuery sesederhana ini:
sumber
Bisakah Anda menggunakan lembar gaya cetak , dan menggunakan CSS untuk mengatur konten yang ingin Anda cetak? Baca artikel ini untuk petunjuk lebih lanjut.
sumber
Ini bekerja dengan baik:
Perhatikan bahwa ini hanya berfungsi dengan "visibilitas". "display" tidak akan melakukannya. Diuji dalam FF3.
sumber
Saya tidak terlalu menyukai jawaban ini secara keseluruhan. Jika Anda memiliki kelas (katakan printableArea) dan memilikinya sebagai anak langsung, maka Anda dapat melakukan sesuatu seperti ini di CSS cetak Anda:
Bagi mereka yang mencari printableArea di tempat lain, Anda perlu memastikan orang tua printableArea ditampilkan:
Menggunakan visibilitas dapat menyebabkan banyak masalah spasi dan halaman kosong. Ini karena visibilitas mempertahankan elemen elemen, membuatnya tersembunyi, sedangkan tampilan menghilangkannya dan memungkinkan elemen lain mengambil ruangnya.
Alasan mengapa solusi ini berhasil adalah karena Anda tidak mengambil semua elemen, hanya anak-anak langsung dari tubuh dan menyembunyikannya. Solusi lain di bawah ini dengan display css, sembunyikan semua elemen, yang memengaruhi segalanya di dalam konten printableArea.
Saya tidak akan menyarankan javascript karena Anda harus memiliki tombol cetak yang diklik pengguna dan tombol cetak browser standar tidak akan memiliki efek yang sama. Jika Anda benar-benar perlu melakukan itu, yang akan saya lakukan adalah menyimpan html tubuh, menghapus semua elemen yang tidak diinginkan, mencetak, lalu menambahkan html kembali. Seperti yang disebutkan, saya akan menghindari ini jika Anda bisa dan menggunakan opsi CSS seperti di atas.
CATATAN: Anda dapat menambahkan CSS apa pun ke dalam cetak CSS menggunakan gaya inline:
Atau seperti yang biasa saya gunakan adalah tag tautan:
sumber
Berikan elemen apa pun yang Anda ingin cetak id
printMe
.Sertakan skrip ini di tag kepala Anda:
Panggil fungsinya
sumber
hm ... gunakan jenis stylsheet untuk mencetak ... mis:
print.css:
sumber
sumber
Langkah 1: Tuliskan javascript berikut di dalam tag kepala Anda
Langkah 2: Panggil fungsi PrintMe ('DivID') dengan acara onclick.
sumber
Dengan CSS 3 Anda dapat menggunakan yang berikut:
sumber
Saya mengambil konten menggunakan JavaScript dan membuat jendela yang bisa saya cetak sebagai pengganti ...
sumber
Metode Sandro bekerja sangat baik.
Saya men-tweak untuk memungkinkan beberapa tautan printMe, khususnya untuk digunakan dalam halaman tab dan memperluas teks.
function processPrint(printMe){
<- memanggil variabel di sinivar printReadyElem = document.getElementById(printMe);
<- menghapus tanda kutip di sekitar printMe untuk meminta variabel<a href="javascript:void(processPrint('divID'));">Print</a>
<- meneruskan ID div yang akan dicetak ke fungsi untuk mengubah variabel printMe menjadi ID div. diperlukan satu kutipansumber
printDiv (divId) : Solusi umum untuk mencetak div pada halaman apa pun.
Saya memiliki masalah serupa tetapi saya ingin (a) dapat mencetak seluruh halaman, atau (b) mencetak salah satu dari beberapa area spesifik. Solusi saya, terima kasih banyak dari hal di atas, memungkinkan Anda menentukan objek div yang akan dicetak.
Kunci untuk solusi ini adalah menambahkan aturan yang sesuai pada lembar gaya media cetak sehingga div yang diminta (dan isinya) akan dicetak.
Pertama, buat css cetak yang diperlukan untuk menekan semuanya (tetapi tanpa aturan khusus untuk mengizinkan elemen yang ingin Anda cetak).
Perhatikan bahwa saya telah menambahkan aturan kelas baru:
Kemudian masukkan tiga fungsi JavaScript. Yang pertama hanya menghidupkan dan mematikan lembar gaya media cetak.
Yang kedua melakukan pekerjaan nyata dan yang ketiga membersihkan sesudahnya. Yang kedua (printDiv) mengaktifkan lembar gaya media cetak, kemudian menambahkan aturan baru untuk memungkinkan div yang diinginkan untuk mencetak, mengeluarkan cetakan, dan kemudian menambahkan penundaan sebelum rumah tangga akhir (jika tidak, gaya dapat diatur ulang sebelum cetak sebenarnya selesai.)
Fungsi akhir menghapus aturan yang ditambahkan dan mengatur gaya cetak lagi untuk dinonaktifkan sehingga seluruh halaman dapat dicetak.
Satu-satunya hal yang harus dilakukan adalah menambahkan satu baris ke pemrosesan onload Anda sehingga gaya cetak pada awalnya dinonaktifkan sehingga memungkinkan pencetakan seluruh halaman.
Kemudian, dari mana saja di dokumen Anda, Anda dapat mencetak div. Keluarkan printDiv ("thedivid") dari sebuah tombol atau apa pun.
Nilai tambah besar untuk pendekatan ini memberikan solusi umum untuk mencetak konten yang dipilih dari dalam halaman. Ini juga memungkinkan penggunaan gaya yang ada untuk elemen yang dicetak - termasuk div yang mengandung.
CATATAN: Dalam implementasi saya, ini harus menjadi style sheet pertama. Ubah referensi sheet (0) ke nomor sheet yang sesuai jika Anda perlu membuatnya nanti dalam urutan sheet.
sumber
@Kevin Florida Jika Anda memiliki beberapa divs dengan kelas yang sama, Anda dapat menggunakannya seperti ini:
saya menggunakan tipe konten dalam Colorbox
sumber
Dalam kasus saya, saya harus mencetak gambar di dalam halaman. Ketika saya menggunakan solusi yang dipilih, saya memiliki 1 halaman kosong dan yang lainnya menunjukkan gambar. Semoga ini bisa membantu seseorang.
Berikut ini css yang saya gunakan:
Html saya adalah:
sumber
Css terbaik agar sesuai dengan ketinggian ruang kosong:
sumber
Cara terbaik untuk mencetak Div tertentu atau Elemen apa pun
sumber
Gunakan Lembar Gaya khusus untuk mencetak
dan kemudian tambahkan kelas yaitu "noprint" ke setiap tag yang isinya tidak ingin Anda cetak.
Dalam penggunaan CSS
sumber
Jika Anda hanya ingin mencetak div ini, Anda harus menggunakan instruksi:
sumber
Fungsi printDiv () keluar beberapa kali, tetapi dalam hal ini, Anda kehilangan semua elemen pengikatan dan nilai input Anda. Jadi, solusi saya adalah membuat div untuk semua yang disebut "body_allin" dan satu lagi di luar yang pertama disebut "body_print".
Kemudian Anda memanggil fungsi ini:
sumber
Anda dapat menggunakan gaya CSS terpisah yang menonaktifkan setiap konten lain kecuali yang dengan id "printarea".
Lihat Desain CSS: Pergi ke Cetak untuk penjelasan dan contoh lebih lanjut.
sumber
Saya punya beberapa gambar masing-masing dengan tombol dan perlu mengklik tombol untuk mencetak setiap div dengan gambar. Solusi ini berfungsi jika saya telah menonaktifkan cache di browser saya, dan ukuran gambar tidak berubah di Chrome:
sumber
Satu lagi pendekatan tanpa mempengaruhi halaman saat ini dan juga bertahan css saat mencetak. Di sini pemilih harus pemilih pemilih tertentu yang kontennya perlu kita cetak.
Di sini disediakan beberapa waktu menunjukkan bahwa css eksternal dapat diterapkan untuk itu.
sumber
Saya mencoba banyak solusi yang disediakan. Tidak ada yang bekerja dengan sempurna. Mereka kehilangan ikatan CSS atau JavaScript. Saya menemukan solusi sempurna dan mudah yang tidak kehilangan CSS atau JavaScript.
HTML:
Javascript:
sumber
Saya sangat terlambat ke pesta ini, tetapi saya ingin melakukan pendekatan lain. Saya menulis modul JavaScript kecil bernama PrintElements untuk mencetak bagian halaman web secara dinamis.
Ia bekerja dengan melakukan iterasi melalui elemen node yang dipilih, dan untuk setiap node, ia melintasi pohon DOM sampai elemen BODY. Pada setiap tingkat, termasuk yang awal (yang merupakan tingkat simpul yang akan dicetak), ia melampirkan kelas penanda (
pe-preserve-print
) ke simpul saat ini. Kemudian lampirkan kelas marker lain (pe-no-print
) ke semua saudara kandung dari simpul saat ini, tetapi hanya jika tidak adape-preserve-print
kelas pada mereka. Sebagai tindakan ketiga, itu juga melampirkan kelas lain untuk elemen leluhur yang dilestarikanpe-preserve-ancestor
.Css hanya cetak tambahan mati-sederhana akan menyembunyikan dan menampilkan elemen masing-masing. Beberapa manfaat dari pendekatan ini adalah bahwa semua gaya dipertahankan, tidak membuka jendela baru, tidak perlu berpindah-pindah banyak elemen DOM, dan umumnya tidak invasif dengan dokumen asli Anda.
Lihat demo , atau baca artikel terkait untuk detail lebih lanjut .
sumber
Anda dapat menggunakan ini: http://vikku.info/codesnippets/javascript/print-div-content-print-only-the-content-of-an-html-element-and-not-the- whole-document/
Atau gunakan
visibility:visible
danvisibility:hidden
css properti bersama@media print{}
'display: none' akan menyembunyikan semua 'display: block' bersarang. Itu bukan solusi.
sumber
Saya menemukan solusinya.
sumber
berdasarkan jawaban @Kevin Florida, saya membuat cara untuk menghindari skrip pada menonaktifkan halaman saat ini karena menimpa konten. Saya menggunakan file lain yang disebut "printScreen.php" (atau .html). Bungkus semua yang ingin Anda cetak dalam "printSource" div. Dan dengan javascript, buka jendela baru yang Anda buat sebelumnya ("printScreen.php") lalu ambil konten di "printSource" dari jendela atas.
Ini kodenya.
Jendela utama :
Ini adalah "printScreen.php" - file lain untuk mengambil konten untuk dicetak
sumber