Comment imprimer le div indiqué (sans désactiver manuellement tous les autres contenus de la page)?
Je veux éviter une nouvelle boîte de dialogue d'aperçu, donc la création d'une nouvelle fenêtre avec ce contenu n'est pas utile.
La page contient quelques tableaux, l'un d'eux contient le div que je veux imprimer - le tableau est conçu avec des styles visuels pour le Web, qui ne devraient pas s'afficher en version imprimée.
javascript
css
printing
dhtml
noesgard
la source
la source
Réponses:
Voici une solution générale, utilisant uniquement CSS , que j'ai vérifié pour fonctionner.
Les approches alternatives ne sont pas si bonnes. L'utilisation
display
est délicate car si un élément adisplay:none
alors aucun de ses descendants ne s'affichera non plus. Pour l'utiliser, vous devez changer la structure de votre page.L'utilisation
visibility
fonctionne mieux car vous pouvez activer la visibilité pour les descendants. Les éléments invisibles affectent toujours la mise en page, donc je me déplacesection-to-print
en haut à gauche pour qu'il s'imprime correctement.la source
position:fixed
place. Cependant, Chrome et Safari tronqueraient également le contenu, surtout après la première page. Donc , ma solution finale était de définir à la fois la cible et tous ses parents , àoverflow:visible; position:absolute !important; top:0;left:0
#section-to-print
correspond à la section elle-même;#section-to-print *
correspond à chaque sous-élément de la section. Cette règle rend donc la section et tout son contenu visibles.J'ai une meilleure solution avec un code minimal.
Placez votre partie imprimable à l'intérieur d'un div avec un identifiant comme celui-ci:
Ensuite, ajoutez un événement comme un onclick (comme indiqué ci-dessus) et passez l'id du div comme je l'ai fait ci-dessus.
Créons maintenant un javascript vraiment simple:
Remarquez à quel point c'est simple? Pas de popups, pas de nouvelles fenêtres, pas de style fou, pas de bibliothèques JS comme jquery. Le problème avec les solutions vraiment compliquées (la réponse n'est pas compliquée et pas ce à quoi je fais référence) est le fait qu'elle ne se traduira JAMAIS sur tous les navigateurs, jamais! Si vous souhaitez rendre les styles différents, faites comme indiqué dans la réponse cochée en ajoutant l'attribut media à un lien de feuille de style (media = "print").
Pas de peluches, léger, ça marche.
la source
.click
. C'est dommage, car le code est si léger.Jusqu'à présent, toutes les réponses sont assez erronées - elles impliquent soit d'ajouter
class="noprint"
à tout, soit de gâcher l'display
intérieur#printable
.Je pense que la meilleure solution serait de créer un wrapper autour des trucs non imprimables:
Bien sûr, ce n'est pas parfait car cela implique de déplacer un peu les choses dans votre HTML ...
la source
Avec jQuery, c'est aussi simple que cela:
la source
Pourriez-vous utiliser une feuille de style d'impression et utiliser CSS pour organiser le contenu que vous souhaitez imprimer? Lisez cet article pour plus de pointeurs.
la source
Cela fonctionne bien:
Notez que cela ne fonctionne qu'avec la "visibilité". "display" ne le fera pas. Testé en FF3.
la source
Je n'ai pas vraiment aimé ces réponses dans leur ensemble. Si vous avez une classe (disons printableArea) et que vous l'avez comme enfant immédiat du corps, vous pouvez faire quelque chose comme ceci dans votre CSS d'impression:
Pour ceux qui recherchent printableArea dans un autre endroit, vous devez vous assurer que les parents de printableArea sont affichés:
L'utilisation de la visibilité peut entraîner de nombreux problèmes d'espacement et des pages blanches. C'est parce que la visibilité maintient l'espace des éléments, le rend simplement caché, où l'affichage le supprime et permet à d'autres éléments de prendre son espace.
La raison pour laquelle cette solution fonctionne est que vous ne saisissez pas tous les éléments, seulement les enfants immédiats du corps et que vous les cachez. Les autres solutions ci-dessous avec affichage css, masquent tous les éléments, ce qui affecte tout à l'intérieur du contenu printableArea.
Je ne suggérerais pas javascript car vous auriez besoin d'un bouton d'impression sur lequel l'utilisateur clique et les boutons d'impression standard du navigateur n'auraient pas le même effet. Si vous avez vraiment besoin de le faire, ce que je ferais serait de stocker le html du corps, de supprimer tous les éléments indésirables, d'imprimer, puis de rajouter le html. Comme mentionné cependant, j'éviterais cela si vous le pouvez et utilisez une option CSS comme ci-dessus.
REMARQUE: vous pouvez ajouter n'importe quel CSS dans le CSS d'impression en utilisant des styles en ligne:
Ou comme j'utilise habituellement est une balise de lien:
la source
Indiquez l'élément que vous souhaitez imprimer
printMe
.Incluez ce script dans votre balise head:
Appelez la fonction
la source
hm ... utilisez le type de feuille de style pour l'impression ... par exemple:
print.css:
la source
la source
Étape 1: Écrivez le javascript suivant dans votre balise head
Étape 2: appelez la fonction PrintMe ('DivID') par un événement onclick.
la source
Avec CSS 3, vous pouvez utiliser les éléments suivants:
la source
J'ai récupéré le contenu en utilisant JavaScript et créé une fenêtre que je pouvais imprimer à la place ...
la source
La méthode de Sandro fonctionne très bien.
Je l'ai modifié pour permettre d'autoriser plusieurs liens printMe, en particulier à utiliser dans les pages à onglets et à développer le texte.
function processPrint(printMe){
<- appeler une variable icivar printReadyElem = document.getElementById(printMe);
<- supprimé les guillemets autour de printMe pour demander une variable<a href="javascript:void(processPrint('divID'));">Print</a>
<- en passant l'ID div à imprimer à la fonction pour transformer la variable printMe en ID div. des guillemets simples sont nécessairesla source
printDiv (divId) : Une solution généralisée pour imprimer n'importe quel div sur n'importe quelle page.
J'ai eu un problème similaire mais je voulais (a) pouvoir imprimer la page entière, ou (b) imprimer n'importe laquelle de plusieurs zones spécifiques. Ma solution, grâce à une grande partie de ce qui précède, vous permet de spécifier n'importe quel objet div à imprimer.
La clé de cette solution est d'ajouter une règle appropriée à la feuille de style du support d'impression afin que le div demandé (et son contenu) soit imprimé.
Tout d'abord, créez le css d'impression requis pour tout supprimer (mais sans la règle spécifique pour autoriser l'élément que vous souhaitez imprimer).
Notez que j'ai ajouté de nouvelles règles de classe:
Insérez ensuite trois fonctions JavaScript. Le premier active et désactive simplement la feuille de style de support d'impression.
Le second fait le vrai travail et le troisième nettoie ensuite. Le second (printDiv) active la feuille de style de support d'impression, puis ajoute une nouvelle règle pour permettre au div souhaité d'imprimer, émet l'impression, puis ajoute un délai avant le nettoyage final (sinon les styles peuvent être réinitialisés avant que l'impression ne soit réellement terminé.)
Les fonctions finales suppriment la règle ajoutée et redéfinissent le style d'impression sur désactivé pour que la page entière puisse être imprimée.
La seule autre chose à faire est d'ajouter une ligne à votre traitement de chargement afin que le style d'impression soit initialement désactivé, permettant ainsi l'impression de la page entière.
Ensuite, de n'importe où dans votre document, vous pouvez imprimer un div. Il suffit de lancer printDiv ("thedivid") à partir d'un bouton ou autre.
Un gros plus pour cette approche, il fournit une solution générale pour imprimer le contenu sélectionné à partir d'une page. Il permet également d'utiliser des styles existants pour les éléments imprimés - y compris le div contenant.
REMARQUE: dans mon implémentation, ce doit être la première feuille de style. Remplacez les références de feuille (0) par le numéro de feuille approprié si vous devez le faire plus tard dans la séquence de feuilles.
la source
@Kevin Florida Si vous avez plusieurs divs avec la même classe, vous pouvez l'utiliser comme ceci:
J'utilisais le type de contenu interne Colorbox
la source
Dans mon cas, j'ai dû imprimer une image à l'intérieur d'une page. Lorsque j'ai utilisé la solution votée, j'avais 1 page vierge et l'autre montrant l'image. J'espère que cela aidera quelqu'un.
Voici le css que j'ai utilisé:
Mon html est:
la source
Meilleur CSS pour s'adapter à la hauteur de l'espace vide:
la source
La meilleure façon d'imprimer un Div particulier ou n'importe quel élément
la source
Utilisez une feuille de style spéciale pour l'impression
puis ajoutez une classe, c'est-à-dire "noprint" à chaque balise dont vous ne souhaitez pas imprimer le contenu.
Dans l'utilisation CSS
la source
Si vous souhaitez uniquement imprimer cette div, vous devez utiliser l'instruction:
la source
La fonction printDiv () est sortie plusieurs fois, mais dans ce cas, vous perdez tous vos éléments de liaison et valeurs d'entrée. Donc, ma solution est de créer un div pour tout ce qui s'appelle "body_allin" et un autre en dehors du premier appelé "body_print".
Ensuite, vous appelez cette fonction:
la source
Vous pouvez utiliser un style CSS distinct qui désactive tous les autres contenus sauf celui avec l'id "printarea".
Voir CSS Design: Going to Print pour plus d'explications et d'exemples.
la source
J'avais plusieurs images chacune avec un bouton et je devais cliquer sur un bouton pour imprimer chaque div avec une image. Cette solution fonctionne si j'ai désactivé le cache dans mon navigateur et que la taille de l'image ne change pas dans Chrome:
la source
Une approche de plus sans affecter la page en cours et il persiste également le CSS lors de l'impression. Ici, le sélecteur doit être un sélecteur de div spécifique dont le contenu doit être imprimé.
Ici, le temps imparti montre que les CSS externes y sont appliqués.
la source
J'ai essayé bon nombre des solutions proposées, aucune d'entre elles ne fonctionnait parfaitement. Ils perdent les liaisons CSS ou JavaScript. J'ai trouvé une solution parfaite et facile qui ne perd ni les liaisons CSS ni JavaScript.
HTML:
Javascript:
la source
Je suis très en retard à cette fête, mais j'aimerais proposer une autre approche. J'ai écrit un petit module JavaScript appelé PrintElements pour imprimer dynamiquement des parties d'une page Web.
Il fonctionne en itérant à travers les éléments de noeud sélectionnés, et pour chaque noeud, il parcourt l'arborescence DOM jusqu'à l'élément BODY. À chaque niveau, y compris le niveau initial (qui est le niveau du nœud à imprimer), il attache une classe de marqueur (
pe-preserve-print
) au nœud actuel. Attache ensuite une autre classe marqueur (pe-no-print
) à tous les frères et sœurs du nœud actuel, mais uniquement s'il n'y a pas depe-preserve-print
classe dessus. En tant que troisième acte, il attache également une autre classe aux éléments d'ancêtre préservéspe-preserve-ancestor
.Un css supplémentaire en impression morte simple masquera et affichera les éléments respectifs. Certains avantages de cette approche sont que tous les styles sont conservés, cela n'ouvre pas une nouvelle fenêtre, il n'est pas nécessaire de se déplacer sur de nombreux éléments DOM, et généralement il n'est pas invasif avec votre document d'origine.
Voir la démo ou lire l'article correspondant pour plus de détails .
la source
Vous pouvez utiliser ceci: http://vikku.info/codesnippets/javascript/print-div-content-print-only-the-content-of-an-html-element-and-not-the-whole-document/
Ou utilisez
visibility:visible
etvisibility:hidden
css propriété avec@media print{}
'display: none' masquera tous les 'display: block' imbriqués. Ce n'est pas une solution.
la source
J'ai trouvé la solution.
la source
Sur la base de la réponse de @Kevin Florida, j'ai fait en sorte d'éviter que le script de la page actuelle ne soit désactivé à cause du contenu écrasé. J'utilise un autre fichier appelé "printScreen.php" (ou .html). Enveloppez tout ce que vous voulez imprimer dans une div "printSource". Et avec javascript, ouvrez une nouvelle fenêtre que vous avez créée auparavant ("printScreen.php") puis récupérez le contenu dans "printSource" de la fenêtre supérieure.
Voici le code.
Fenêtre principale :
Ceci est "printScreen.php" - un autre fichier pour récupérer le contenu à imprimer
la source