Je veux imprimer le contenu d'une div en utilisant jQuery. Cette question est déjà posée dans SO, mais je ne trouve pas la réponse correcte (de travail).
C'est mon HTML:
<div id='printarea'>
<p>This is a sample text for printing purpose.</p>
<input type='button' id='btn' value='Print'>
</div>
<p>Do not print.</p>
Ici, je veux imprimer le contenu de la div printarea
.
J'ai essayé ceci:
$("#btn").click(function () {
$("#printarea").print();
});
Mais cela donne une erreur de console quand le bouton est cliqué:
Uncaught TypeError: $ (...). Print n’est pas une fonction
Mais quand j'essaye d'imprimer la page entière en utilisant
window.print();
ça fonctionne. Mais je veux seulement imprimer le contenu d'une div particulière. J'ai vu la réponse $("#printarea").print();
dans de nombreux endroits, mais cela ne fonctionne pas.
Certaines recherches sur jQuery ont échoué, je suis donc passé à JavaScript (merci pour votre suggestion Anders ).
Et ça marche bien ...
HTML
<div id='DivIdToPrint'>
<p>This is a sample text for printing purpose.</p>
</div>
<p>Do not print.</p>
<input type='button' id='btn' value='Print' onclick='printDiv();'>
JavaScript
function printDiv()
{
var divToPrint=document.getElementById('DivIdToPrint');
var newWin=window.open('','Print-Window');
newWin.document.open();
newWin.document.write('<html><body onload="window.print()">'+divToPrint.innerHTML+'</body></html>');
newWin.document.close();
setTimeout(function(){newWin.close();},10);
}
https://github.com/jasonday/printThis
$("#myID").printThis();
Grand plugin Jquery pour faire exactement ce que vous voulez
Sans utiliser aucun plugin, vous pouvez opter pour cette logique.
$("#btn").click(function () {
//Hide all other elements other than printarea.
$("#printarea").show();
window.print();
});
Si vous voulez faire cela sans un plugin supplémentaire (comme printThis ), je pense que cela devrait fonctionner. L'idée est d'avoir un div spécial qui sera imprimé, tandis que tout le reste est caché en utilisant CSS. C'est plus facile à faire si la div est un enfant direct de la balise body, vous devrez donc déplacer ce que vous voulez imprimer sur une div comme celle-ci. S Commencez donc par créer un div avec id print-me
comme enfant direct de votre balise body. Ensuite, utilisez ce code pour imprimer le div:
$("#btn").click(function () {
//Copy the element you want to print to the print-me div.
$("#printarea").clone().appendTo("#print-me");
//Apply some styles to hide everything else while printing.
$("body").addClass("printing");
//Print the window.
window.print();
//Restore the styles.
$("body").removeClass("printing");
//Clear up the div.
$("#print-me").empty();
});
Les styles dont vous avez besoin sont les suivants:
@media print {
/* Hide everything in the body when printing... */
body.printing * { display: none; }
/* ...except our special div. */
body.printing #print-me { display: block; }
}
@media screen {
/* Hide the special layer from the screen. */
#print-me { display: none; }
}
La raison pour laquelle nous ne devrions appliquer les styles @print
que lorsque la classe printing
est présente est que la page doit être imprimée normalement si l'utilisateur imprime la page en sélectionnant File -> Print
.
utiliser cette bibliothèque: Print.JS
avec cette bibliothèque, vous pouvez imprimer à la fois HTML et PDF.
<form method="post" action="#" id="printJS-form">
...
</form>
<button type="button" onclick="printJS('printJS-form', 'html')">
Print Form
</button>
Aucune des solutions ci-dessus ne fonctionne parfaitement. Elles perdent CSS ou doivent inclure/modifier un fichier CSS externe. J'ai trouvé une solution parfaite pour ne pas perdre votre CSS ni modifier/ajouter du CSS externe.
HTML:
<div id='printarea'>
<p>This is a sample text for printing purpose.</p>
<input type='button' id='btn' value='Print' onclick='printFunc();'>
</div>
<p>Do not print.</p
JQuery:
function printFunc() {
var divToPrint = document.getElementById('printarea');
var htmlToPrint = '' +
'<style type="text/css">' +
'table th, table td {' +
'border:1px solid #000;' +
'padding;0.5em;' +
'}' +
'</style>';
htmlToPrint += divToPrint.outerHTML;
newWin = window.open("");
newWin.document.write("<h3 align='center'>Print Page</h3>");
newWin.document.write(htmlToPrint);
newWin.print();
newWin.close();
}
Imprimer uniquement l'élément sélectionné sur le codepen
HTML:
<div class="print">
<p>Print 1</p>
<a href="#" class="js-print-link">Click Me To Print</a>
</div>
<div class="print">
<p>Print 2</p>
<a href="#" class="js-print-link">Click Me To Print</a>
</div>
JQuery:
$('.js-print-link').on('click', function() {
var printBlock = $(this).parents('.print').siblings('.print');
printBlock.hide();
window.print();
printBlock.show();
});
J'ai essayé toutes les approches non-plug-in ici, mais toutes ont entraîné l'impression de pages vierges après le contenu ou d'autres problèmes. Voici ma solution:
Html:
<body>
<div id="page-content">
<div id="printme">Content To Print</div>
<div>Don't print this.</div>
</div>
<div id="hidden-print-div"></div>
</body>
Jquery:
$(document).ready(function () {
$("#hidden-print-div").html($("#printme").html());
});
Css:
#hidden-print-div {
display: none;
}
@media print {
#hidden-print-div {
display: block;
}
#page-content {
display: none;
}
}
Le code ci-dessous de codepen a fonctionné pour moi comme je le voulais,
function printData()
{
var divToPrint=document.getElementById("printTable");
newWin= window.open("");
newWin.document.write(divToPrint.outerHTML);
newWin.print();
newWin.close();
}
$('button').on('click',function(){
printData();
})
Voici un lien codepen
Jetez un coup d'oeil à ceci Plugin
Rend votre code aussi simple que possible -> $('SelectorToPrint').printElement();
Je met à jour cette fonction
vous pouvez maintenant imprimer n’importe quel tag ou partie de la page avec son style complet
doit inclure le fichier jquery.js
HTML
<div id='DivIdToPrint'>
<p>This is a sample text for printing purpose.</p>
</div>
<p>Do not print.</p>
<input type='button' id='btn' value='Print' onclick='printtag("DivIdToPrint");' >
JavaScript
function printtag(tagid) {
var hashid = "#"+ tagid;
var tagname = $(hashid).prop("tagName").toLowerCase() ;
var attributes = "";
var attrs = document.getElementById(tagid).attributes;
$.each(attrs,function(i,elem){
attributes += " "+ elem.name+" ='"+elem.value+"' " ;
})
var divToPrint= $(hashid).html() ;
var head = "<html><head>"+ $("head").html() + "</head>" ;
var allcontent = head + "<body onload='window.print()' >"+ "<" + tagname + attributes + ">" + divToPrint + "</" + tagname + ">" + "</body></html>" ;
var newWin=window.open('','Print-Window');
newWin.document.open();
newWin.document.write(allcontent);
newWin.document.close();
// setTimeout(function(){newWin.close();},10);
}