420 votes

Imprimer le contenu d'une DIV

Quel est le meilleur moyen d'imprimer le contenu d'un DIV ?

1 votes

Essayer d'imprimer l'élément ici

2 votes

Que voulez-vous dire par imprimer? Comme dans une imprimante physique?

0 votes

"Imprimer" comme sur une imprimante ? ou sur le document ?

636voto

Bill Paetzke Points 4683

Des changements légers par rapport à la version précédente - testés sur CHROME

function PrintElem(elem)
{
    var mywindow = window.open('', 'PRINT', 'height=400,width=600');

    mywindow.document.write('' + document.title  + '');
    mywindow.document.write('');
    mywindow.document.write('' + document.title  + '');
    mywindow.document.write(document.getElementById(elem).innerHTML);
    mywindow.document.write('');

    mywindow.document.close(); // nécessaire pour IE >= 10
    mywindow.focus(); // nécessaire pour IE >= 10*/

    mywindow.print();
    mywindow.close();

    return true;
}

12 votes

Ceci est une solution rapide. La solution idéale est d'utiliser un CSS séparé pour l'impression. Peut-être que vous pouvez développer sur les détails (exigences) de votre problème.

0 votes

Salut, merci. J'ai un fichier css séparé appelé main.css mais je n'ai aucun moyen de le lier à la nouvelle fenêtre.

11 votes

Vous pouvez faire référence à la feuille de style dans la fenêtre contextuelle. Ajoutez une autre ligne de code entre les balises : mywindow.document.write('');

217voto

BC. Points 9229

Je pense qu'il y a une meilleure solution. Faites en sorte que votre div à imprimer couvre l'ensemble du document, mais seulement lors de l'impression :

@media print {
    .myDivToPrint {
        background-color: white;
        height: 100%;
        width: 100%;
        position: fixed;
        top: 0;
        left: 0;
        margin: 0;
        padding: 15px;
        font-size: 14px;
        line-height: 18px;
    }
}

2 votes

Parfait, beaucoup plus agréable qu'une fenêtre contextuelle.

5 votes

Malheureusement, cela ne fonctionnera pas exactement comme prévu dans IE, voir ceci : stackoverflow.com/questions/975129/…

29 votes

Le contenu qui devrait déborder sur plusieurs pages semble être tronqué dans Chrome.

47voto

Erik Points 486

Remarque : Cela fait plus de 13 ans depuis que le plugin mentionné ci-dessous a été écrit, comme indiqué dans les commentaires. Il ne fonctionne plus en raison des modifications apportées à l'API de jQuery. N'hésitez pas à le copier et à soumettre une demande de modification !

Bien que cela ait été dit par @gabe, Si vous utilisez jQuery, vous pouvez utiliser mon plugin printElement.

Il y a un exemple, et plus d'informations sur le plugin.

L'utilisation est assez simple, il suffit de sélectionner un élément avec un sélecteur jQuery et de l'imprimer :

$("#myDiv").printElement();

J'espère que cela vous aide !

33 votes

8 ans plus tard, cela produira "a.browser is undefined" car l'appel .browser a été supprimé dans jquery 1.9.

1 votes

14 ans plus tard et ça ne fonctionne toujours pas :) Je n'ai pas touché à ce code depuis 2009, vous êtes toujours les bienvenus pour forker et soumettre une demande de tirage !

21voto

huston007 Points 219

À partir d'ici https://forums.asp.net/t/1261525.aspx

        function printdiv(printpage) {
            var headstr = "<html><head><title></title></head><body>";
            var footstr = "</body>";
            var newstr = document.all.item(printpage).innerHTML;
            var oldstr = document.body.innerHTML;
            document.body.innerHTML = headstr + newstr + footstr;
            window.print();
            document.body.innerHTML = oldstr;
            return false;
        }

    div imprimer

    //Page HTML //Autre contenu que vous ne voulez pas imprimer

        Le contenu du div que vous souhaitez imprimer

    //Autre contenu que vous ne voulez pas imprimer //Autre contenu que vous ne voulez pas imprimer

1 votes

Il est nécessaire de modifier pour diviser footerStr en 2 parties. parce que le navigateur utilise "" comme fin de page actuelle. var footstr1 = ""; var footerstr=footstr1 +footstr12;

13voto

Carl Russmann Points 1560

Créez une feuille de style pour l'impression séparée qui masque tous les autres éléments sauf le contenu que vous souhaitez imprimer. Marquez-le en utilisant 'media="print" lors de son chargement :

Cela vous permet d'avoir une feuille de style complètement différente chargée pour les impressions.

Si vous souhaitez forcer la boîte de dialogue d'impression du navigateur à apparaître pour la page, vous pouvez le faire comme ceci lors du chargement en utilisant JQuery :

$(function() { window.print(); });

ou déclenché par tout autre événement que vous souhaitez comme un utilisateur cliquant sur un bouton.

2 votes

Oui, cela fonctionnerait aussi ; c'est difficile - en fait, impossible - de savoir exactement ce qu'est le scénario.

0 votes

Je suis d'accord qu'un CSS séparé est la solution idéale. Et copier le contenu de la div dans une nouvelle fenêtre est une solution rapide.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X