printDiv (divId) : una soluzione generalizzata per stampare qualsiasi div su qualsiasi pagina.
Ho avuto un problema simile ma volevo (a) essere in grado di stampare l'intera pagina o (b) stampare una delle diverse aree specifiche. La mia soluzione, grazie a gran parte di quanto sopra, consente di specificare qualsiasi oggetto div da stampare.
La chiave di questa soluzione è aggiungere una regola appropriata al foglio di stile del supporto di stampa in modo che il div richiesto (e il suo contenuto) venga stampato.
Innanzitutto, crea i css di stampa necessari per sopprimere tutto (ma senza la regola specifica per consentire l'elemento che desideri stampare).
<style type="text/css" media="print">
body {visibility:hidden; }
.noprintarea {visibility:hidden; display:none}
.noprintcontent { visibility:hidden; }
.print { visibility:visible; display:block; }
</style>
Nota che ho aggiunto nuove regole di classe:
- noprintarea ti consente di sopprimere la stampa di elementi all'interno della tua divisione, sia il contenuto che il blocco.
- noprintcontent ti permette di sopprimere la stampa di elementi all'interno della tua divisione: il contenuto viene soppresso ma l'area allocata viene lasciata vuota.
- stampa consente di avere elementi che vengono visualizzati nella versione stampata ma non nella pagina dello schermo. Questi avranno normalmente "display: none" per lo stile dello schermo.
Quindi inserire tre funzioni JavaScript. Il primo attiva e disattiva semplicemente il foglio di stile dei supporti di stampa.
function disableSheet(thisSheet,setDisabled)
{ document.styleSheets[thisSheet].disabled=setDisabled; }
Il secondo fa il vero lavoro e il terzo pulisce in seguito. Il secondo (printDiv) attiva il foglio di stile dei supporti di stampa, quindi aggiunge una nuova regola per consentire la stampa del div desiderato, emette la stampa e quindi aggiunge un ritardo prima delle pulizie finali (altrimenti gli stili possono essere ripristinati prima che la stampa sia effettivamente fatto.)
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);
}
Le funzioni finali eliminano la regola aggiunta e impostano nuovamente lo stile di stampa su disabilitato in modo da poter stampare l'intera pagina.
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);
}
L'unica altra cosa da fare è aggiungere una riga all'elaborazione onload in modo che lo stile di stampa sia inizialmente disabilitato, consentendo così la stampa di tutta la pagina.
<body onLoad='disableSheet(0,true)'>
Quindi, da qualsiasi parte del documento, è possibile stampare un div. Rilascia semplicemente printDiv ("theedivid") da un pulsante o altro.
Un grande vantaggio per questo approccio fornisce una soluzione generale per la stampa di contenuti selezionati all'interno di una pagina. Consente inoltre l'uso di stili esistenti per gli elementi stampati, incluso il div contenente.
NOTA: nella mia implementazione, questo deve essere il primo foglio di stile. Modificare i riferimenti del foglio (0) con il numero di foglio appropriato se è necessario farlo successivamente nella sequenza del foglio.