Salut,
Voila j'essaie depuis un moment d'imprimer le contenu d'un div sur un click et seulement celui-ci, quelque soit son niveau d'imbrication.
Je sais qu'il existe la solution qui consiste à créer une feuille css pour l'impression, mais celle-ci ne peut me satisfaire car elle serrait trop fastidieuse et je veux pouvoir, par exemple, inclure deux boutons d'impression sur une même page et que ces deux boutons lance des impressions sur des div différents.
Dans un premier temps j'ai tenté la méthode suivante:
NB: les codes qui suivent requiers la librairie Prototype.js
Cette méthode marche parfaitement pour IE, mais pas pour FF (Il me semble avoir compris que c'était un problème récurant aux navigateurs type gecko due à l'architecture du DOM). Les childs pourtant supprimés ou cachés apparaissent à l'impression.
J'ai donc cherché à passer par un autre moyen, en utilisant une nouvelle fenêtre:
Et là super cela marche aussi sous Firefox, seulement il y a un MAIS et pas des moindres.
Le div à imprimer comporte des graphiques et ces derniers sont créés à partir de balises canvas (utilisation d'un émulateur canvas pour IE). Et évidement mes graphes sont vides au passage dans la nouvelle fenêtre. Logique car le code html d'un canvas est 'vide'.
Connaissez vous une méthodes pour imprimer un seul div quelque soit sont contenu?
Sinon si le passage par un nouvelle fenêtre est obligatoire pour Firefox; Comment puis-je faire un insert au body de la nouvelle fenêtre? en espérant que cela résolve mon problème.
Du genre:
NB: ce code n'est pas correct
Modifié par Glopp (01 Jun 2009 - 14:05)
Voila j'essaie depuis un moment d'imprimer le contenu d'un div sur un click et seulement celui-ci, quelque soit son niveau d'imbrication.
Je sais qu'il existe la solution qui consiste à créer une feuille css pour l'impression, mais celle-ci ne peut me satisfaire car elle serrait trop fastidieuse et je veux pouvoir, par exemple, inclure deux boutons d'impression sur une même page et que ces deux boutons lance des impressions sur des div différents.
Dans un premier temps j'ai tenté la méthode suivante:
NB: les codes qui suivent requiers la librairie Prototype.js
Event.observe(submitPrint,'click', function(e){
/*On récupère les childs du body*/
var childsBody = $(document.body).childElements();
/*Puis on les fait disparaitre ou retirer du body*/
childsBody.each(function(child) {
child.hide();
//child.remove();
});
/*On insère le div à imprimer dans le body*/
$(document.body).insert(divPrint);
/*On lance l'impression*/
window.print();
/*On replace le div à son ancien emplacement*/
parent_divPrint.insert(divPrint);
/*Enfin on fait réapparaitre ou on réinsère les childs du body*/
childsBody.each(function(child) {
child.show();
//$(document.body).insert(child);
});
}.bind(this));
Cette méthode marche parfaitement pour IE, mais pas pour FF (Il me semble avoir compris que c'était un problème récurant aux navigateurs type gecko due à l'architecture du DOM). Les childs pourtant supprimés ou cachés apparaissent à l'impression.
J'ai donc cherché à passer par un autre moyen, en utilisant une nouvelle fenêtre:
Event.observe(submitPrint,'click', function(e){
var DocumentContainer = divPrint;
/*On ouvre une nouvelle fenêtre*/
var WindowObject = window.open('', "dataPrint",
"width=700,height=300,top=150,left=150");
/*On écrit le code html du div à imprimer*/
WindowObject.document.write(DocumentContainer.innerHTML);
WindowObject.document.close();
/*On donne le focus à la fenêtre et on lance une impression de son contenu*/
WindowObject.focus();
WindowObject.print();
/*Enfin on ferme la nouvelle fenêtre*/
WindowObject.close();
}.bind(this));
Et là super cela marche aussi sous Firefox, seulement il y a un MAIS et pas des moindres.
Le div à imprimer comporte des graphiques et ces derniers sont créés à partir de balises canvas (utilisation d'un émulateur canvas pour IE). Et évidement mes graphes sont vides au passage dans la nouvelle fenêtre. Logique car le code html d'un canvas est 'vide'.
Connaissez vous une méthodes pour imprimer un seul div quelque soit sont contenu?
Sinon si le passage par un nouvelle fenêtre est obligatoire pour Firefox; Comment puis-je faire un insert au body de la nouvelle fenêtre? en espérant que cela résolve mon problème.
Du genre:
NB: ce code n'est pas correct
WindowObject.document.body.insert(DocumentContainer);
Modifié par Glopp (01 Jun 2009 - 14:05)