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).
<style type="text/css" media="print">
body {visibility:hidden; }
.noprintarea {visibility:hidden; display:none}
.noprintcontent { visibility:hidden; }
.print { visibility:visible; display:block; }
</style>
Perhatikan bahwa saya telah menambahkan aturan kelas baru:
- noprintarea memungkinkan Anda untuk menekan pencetakan elemen di dalam konten Anda dan blok.
- noprintcontent memungkinkan Anda untuk menekan pencetakan elemen dalam div Anda konten ditekan tetapi dan area yang dialokasikan dibiarkan kosong.
- cetak memungkinkan Anda untuk memiliki item yang muncul dalam versi cetak tetapi tidak pada halaman layar. Ini biasanya akan memiliki "tampilan: tidak ada" untuk gaya layar.
Kemudian masukkan tiga fungsi JavaScript. Yang pertama hanya menghidupkan dan mematikan lembar gaya media cetak.
function disableSheet(thisSheet,setDisabled)
{ document.styleSheets[thisSheet].disabled=setDisabled; }
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.)
function printDiv(divId)
{
// Enable the print CSS: (this temporarily disables being able to print the whole page)
disableSheet(0,false);
// Get the print style sheet and add a new rule for this div
var sheetObj=document.styleSheets[0];
var showDivCSS="visibility:visible;display:block;position:absolute;top:30px;left:30px;";
if (sheetObj.rules) { sheetObj.addRule("#"+divId,showDivCSS); }
else { sheetObj.insertRule("#"+divId+"{"+showDivCSS+"}",sheetObj.cssRules.length); }
print();
// need a brief delay or the whole page will print
setTimeout("printDivRestore()",100);
}
Fungsi akhir menghapus aturan yang ditambahkan dan mengatur gaya cetak lagi untuk dinonaktifkan sehingga seluruh halaman dapat dicetak.
function printDivRestore()
{
// remove the div-specific rule
var sheetObj=document.styleSheets[0];
if (sheetObj.rules) { sheetObj.removeRule(sheetObj.rules.length-1); }
else { sheetObj.deleteRule(sheetObj.cssRules.length-1); }
// and re-enable whole page printing
disableSheet(0,true);
}
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.
<body onLoad='disableSheet(0,true)'>
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.