Imprimer un div en utilisant javascript dans l'application d'une page d'angularJS
j'ai une application web d'une page utilisant angularJS. J'ai besoin d'imprimer un div de la page. J'ai essayé le code suivant:
la page contient peu de div (print.html)
<div>
<div>
Do not print
</div>
<div id="printable">
Print this div
</div>
<button ng-click="printDiv('printableArea');">Print Div</button>
</div>
le contrôleur a le script suivant:
$scope.printDiv = function(divName) {
var printContents = document.getElementById(divName).innerHTML;
var originalContents = document.body.innerHTML;
document.body.innerHTML = printContents;
window.print();
document.body.innerHTML = originalContents;
}
ce code affiche la div désirée mais il y a un problème.
la déclaration document.body.innerHTML = originalContents;
remplace le corps de l'ensemble de la demande puisqu'il s'agit d'un SPA. Ainsi, lorsque je rafraîchis la page ou cliquez à nouveau sur le bouton Imprimer, l'ensemble du contenu de la page est effacée.
6 réponses
$scope.printDiv = function(divName) {
var printContents = document.getElementById(divName).innerHTML;
var popupWin = window.open('', '_blank', 'width=300,height=300');
popupWin.document.open();
popupWin.document.write('<html><head><link rel="stylesheet" type="text/css" href="style.css" /></head><body onload="window.print()">' + printContents + '</body></html>');
popupWin.document.close();
}
Deux fonctions conditionnelles sont nécessaires: un pour Google Chrome, et une seconde pour les autres navigateurs.
$scope.printDiv = function (divName) {
var printContents = document.getElementById(divName).innerHTML;
var originalContents = document.body.innerHTML;
if (navigator.userAgent.toLowerCase().indexOf('chrome') > -1) {
var popupWin = window.open('', '_blank', 'width=600,height=600,scrollbars=no,menubar=no,toolbar=no,location=no,status=no,titlebar=no');
popupWin.window.focus();
popupWin.document.write('<!DOCTYPE html><html><head>' +
'<link rel="stylesheet" type="text/css" href="style.css" />' +
'</head><body onload="window.print()"><div class="reward-body">' + printContents + '</div></html>');
popupWin.onbeforeunload = function (event) {
popupWin.close();
return '.\n';
};
popupWin.onabort = function (event) {
popupWin.document.close();
popupWin.close();
}
} else {
var popupWin = window.open('', '_blank', 'width=800,height=600');
popupWin.document.open();
popupWin.document.write('<html><head><link rel="stylesheet" type="text/css" href="style.css" /></head><body onload="window.print()">' + printContents + '</html>');
popupWin.document.close();
}
popupWin.document.close();
return true;
}
Vous pouvez maintenant utiliser la bibliothèque appelée angulaires-print
j'ai fait de cette façon:
$scope.printDiv = function (div) {
var docHead = document.head.outerHTML;
var printContents = document.getElementById(div).outerHTML;
var winAttr = "location=yes, statusbar=no, menubar=no, titlebar=no, toolbar=no,dependent=no, width=865, height=600, resizable=yes, screenX=200, screenY=200, personalbar=no, scrollbars=yes";
var newWin = window.open("", "_blank", winAttr);
var writeDoc = newWin.document;
writeDoc.open();
writeDoc.write('<!doctype html><html>' + docHead + '<body onLoad="window.print()">' + printContents + '</body></html>');
writeDoc.close();
newWin.focus();
}
C'est ce qui a fonctionné pour moi dans Chrome et Firefox! Cela ouvrira la petite fenêtre d'impression et la fermera automatiquement une fois que vous aurez cliqué sur Imprimer.
var printContents = document.getElementById('div-id-selector').innerHTML;
var popupWin = window.open('', '_blank', 'width=800,height=800,scrollbars=no,menubar=no,toolbar=no,location=no,status=no,titlebar=no,top=50');
popupWin.window.focus();
popupWin.document.open();
popupWin.document.write('<!DOCTYPE html><html><head><title>TITLE OF THE PRINT OUT</title>'
+'<link rel="stylesheet" type="text/css" href="app/directory/file.css" />'
+'</head><body onload="window.print(); window.close();"><div>'
+ printContents + '</div></html>');
popupWin.document.close();
Je ne pense pas qu'il soit nécessaire d'écrire autant de gros codes.
je viens d'installer le paquet de bower à impression angulaire et tout est prêt.
il suffit de l'injecter dans le module et vous êtes prêt à aller Utilisez des directives d'impression pré-compilées & le plaisir est que vous pouvez également cacher quelques div si vous ne voulez pas imprimer
http://angular-js.in/angularprint/
Mine de travail est génial .