Saturday, March 23, 2013

Print/Mencetak Sebagian Halaman Saja dengan JavaScript

Gambar untuk dialog pencetakan pada Google Chrome
Mencetak sebagian halaman dengan JavaScript

Berbeda dengan dasar window.print() yang akan mencetak keseluruhan halaman, fungsi ini akan mencetak halaman pada bagian-bagian tertentu saja. Cara kerjanya adalah fungsi ini akan mencetak duplikat konten area di dalam iframe pencetakan.

Dua buah elemen, yaitu <textarea> dan <iframe> dibuat untuk keperluan ini. Area teks digunakan untuk menyimpan kode CSS pencetakan, sedangkan iframe digunakan untuk menampung salinan bagian halaman yang ingin dicetak. Saat salinan bagian halaman tersebut sudah masuk ke dalam iframe yang kita sembunyikan wujudnya, hal yang perlu kita lakukan selanjutnya adalah mencetak konten iframe tersebut, bukan halaman yang sedang aktif:

<textarea id="printing-css" style="display:none;">.no-print{display:none}</textarea>
<iframe id="printing-frame" name="print_frame" src="about:blank" style="display:none;"></iframe>
<script>
//<![CDATA[
function printDiv(elementId) {
    var a = document.getElementById('printing-css').value;
    var b = document.getElementById(elementId).innerHTML;
    window.frames["print_frame"].document.title = document.title;
    window.frames["print_frame"].document.body.innerHTML = '<style>' + a + '</style>' + b;
    window.frames["print_frame"].window.focus();
    window.frames["print_frame"].window.print();
}
//]]>
</script>

Aktivasi bisa dilakukan dengan cara memicu fungsi printDiv(elementId) pada tautan atau tombol, dimana elementId adalah ID dari area khusus yang ingin dicetak:

<a class="no-print" href="javascript:printDiv('area-1');">Print</a>

...

<div id="area-1">Teks ini akan tercetak di kertas...</div>
<div id="area-2">Tapi tidak untuk teks ini.</div>

Lihat Demo

Kode CSS pencetakan yang digunakan Saya sarankan adalah kode CSS yang pernah Saya tuliskan di sini, untuk memastikan agar tampilan halaman yang dicetak tertata dengan rapi. Atau kosongkan saja textarea tersebut dan biarkan User Agent Stylesheet pada masing-masing peramban menangani tampilan elemen yang ada.

Alternatif lain, Anda juga bisa menggunakan CSS eksternal jika Anda merasa bahwa textarea tanpa makna di atas hanya akan mengganggu kebersihan kode sumber web Anda:

<iframe id="printing-frame" name="print_frame" src="about:blank" style="display:none;"></iframe>
<script>
//<![CDATA[
function printDiv(elementId) {
    var a = "/path/to/printing-css.css";
    var b = document.getElementById(elementId).innerHTML;
    window.frames["print_frame"].document.title = document.title;
    window.frames["print_frame"].document.body.innerHTML = '<link rel="stylesheet" href="' + a + '">' + b;
    window.frames["print_frame"].window.focus();
    window.frames["print_frame"].window.print();
}
//]]>
</script>

Hasilnya akan terlihat jelas pada peramban Google Chrome yang notabene memiliki komunikasi pencetakan halaman yang berbeda dengan peramban lainnya.

Labels: , , ,

11 Comments:

At Tuesday, March 26, 2013 at 1:34:00 PM GMT+7, Blogger Ilham Ibnu Purnomo said...

Wah, tutorialnya keren nih om.. makasih ya

 
At Thursday, March 28, 2013 at 12:41:00 PM GMT+7, Blogger Mr.Randy said...

bang beda antara yg pertama n yg kedua itu apa? btw yg kedua gak mesti make <div id="area-1">Teks ini akan tercetak di kertas...</div>
<div id="area-2">Tapi tidak untuk teks ini.</div>
itu lagi

 
At Thursday, March 28, 2013 at 2:09:00 PM GMT+7, Blogger Taufik Nurrohman said...

Itu cuma contoh. Karena Saya mengeksekusi fungsi ke elemen dengan ID area-1, sesuai judulnya, hanya mencetak sebagian area saja yang memiliki ID tertentu, maka cuma area pertama saja yang akan tercetak. Sesuai dengan ini:

<a href="javascript:printDiv('area-1');">

Belum dong ya?

 
At Tuesday, May 7, 2013 at 2:43:00 AM GMT+7, Blogger Unknown said...

jadi tiap postingan harus manual ya gan??
:(

 
At Friday, April 25, 2014 at 4:39:00 PM GMT+7, Blogger androv said...

Mantab gan... Thanks berat!! :D
sangat membantu :-bd

 
At Friday, June 20, 2014 at 9:34:00 PM GMT+7, Blogger Eddy Chandra said...

permisi gan
cara menghungkan semua filenya gimana ?
tolong share project lengkapnya gan :)

 
At Friday, August 22, 2014 at 3:03:00 PM GMT+7, Blogger Radinul said...

Terima Kasih Banyak Gan ., Sangat Membantu gan ., !!!

 
At Wednesday, October 15, 2014 at 11:49:00 AM GMT+7, Blogger Syakir Rahman said...

Akhirnya ketemu juga caranya.. Terima kasih banyak Pak :)

 
At Tuesday, January 6, 2015 at 10:52:00 PM GMT+7, Blogger Musik express said...

work om.. terima kasih ya

 
At Saturday, July 25, 2015 at 2:01:00 PM GMT+7, Blogger irwans said...

di internet Eksplorer gk jalan ya Gan ? solusinya Gan

 
At Monday, August 26, 2019 at 11:24:00 PM GMT+7, Blogger lenny said...

Alhamdulilah bisa. makasih kak

 

Post a Comment

<< Home