Envoyé par : GuiOhm
Date : 13/09/2007 10:19
Bonjour à tous (-:
Je dispose d'une fenêtre XUL contenant un élément <browser> dont je souhaite imprimer le contenu. J'aimerais inclure dans cette impression un pied de page contenant Nbre de pages / Total, comme il est possible de faire lors d'une impression Firefox standard.
Après quelques recherches , il semble que cela se fasse via les attributs footerStrLeft/Center/Right d'un objet nsIPrintSettings. Malheureusement, à l'impression je n'ai que le contenu normal du browser, sans pied de page..
Voici le modèle de code JS utilisé:
function myPrint() { var browser = document.getElementById("content").contentWindow; var req = browser.QueryInterface(Components.interfaces.nsIInterfaceRequestor); var webprint = req.getInterface(Components.interfaces.nsIWebBrowserPrint); var settings = Components.classes["@mozilla.org/gfx/printsettings-services;1"] .getService(Components.interfaces.nsIPrintSettingsService") .newPrintSettings; Components.classes["@mozilla.org/gfx/printsettings-services;1"] .getService(Components.interfaces.nsIPrintSettingsService") .initPrintSettingsFromPrinter(printername,settings); settings.printerName = printername; //OK settings.numCopies = numberofcopies; //OK settings.docURL = ""; // ? settings.marginTop = 1; //OK settings.marginBottom = 1; //OK settings.headerStrLeft = "haut gauche"; //KO settings.headerStrCenter = "haut centre"; //KO settings.headerStrRight = "haut droite"; //KO settings.footerStrLeft = "bas gauche"; //KO settings.footerStrCenter = "bas centre"; //KO settings.footerStrRight = "&PT"; //KO settings.printCommand = "print.sh"; //OK settings.printSilent = true; //OK settings.showPrintProgress = false; //OK wbprint.print(settings, null); };
Si j'affiche avec un alert les paramètres (header/footer)Str(Left/Center/Right), ils sont bien mis aux bonnes valeurs, mais rien n'apparaît à l'impression. Si je ne les mets pas à jour pour garder ceux par défauts, ceux-ci ont pour valeurs:
Mais ils ne sont pas plus pris en compte.
Y a-t-il quelque part un moyen d'activer/désactiver la prise en compte de ces attributs particuliers (sachant que tous les autres attributs utilisés semblent très bien fonctionner) ? Je précise que je travaille sous Firefox 1.5.
Merci d'avance pour vos éventuelles remarques (-:
Envoyé par : aMan
Date : 15/09/2007 04:42
Je vais dire quelques chose qui va peut être parraitre bête (il est 4h30 du mat en même temps....
si tu placé tes
settings.printerName = printername; //OK
avant
Components.classes["@mozilla.org/gfx/printsettings-services;1"] .getService(Components.interfaces.nsIPrintSettingsService") .initPrintSettingsFromPrinter(printername,settings);
ca marche pas mieux ???
(si c'est pas ça, alors désolé)
Envoyé par : GuiOhm
Date : 17/09/2007 17:17
Déjà, merci de te casser la tête à répondre à 4h30 du matin !
Cependant, l'ordre que j'utilise fonctionne (en fait je soupçonne qu'un appel à initPrintSettingsFromPrinter(printername, settings) est suffisant, mais cela ne met pas à jour le settings.printerName je l'avais fait à la main a posteriori). Mais le tien est en effet beaucoup plus logique, donc je l'ai appliqué ^^
Par contre, j'ai trouvé l'origine de mon problème. En fait ces attributs sont bien actifs, mais Firefox "colle" vraiment ces entêtes/pied de page au bord de la feuille, et du coup ils ne sont pas imprimés (mais visibles avec un Print to File en PostScript). C'est donc une question de marges.. mais pas n'importe lesquelles ! Celles qu'on peut positionner avec File > Page Setup, qui correspondent au groupe PrintSettings.margin{bottom/top/right/left} ne concernent que le contenu de la page, et pas ces entêtes... Ce sont celles qu'on peut définir dans la boite de dialogue d'impression qui servent.
Après des recherches dans printjoboptions.js , j'ai trouvé le code suivant, qui semble fonctionner:
var gPrefs = Components.classes["@mozilla.org/preferences-service;1"] .getService(Components.classes.nsIPrefBranch); gprefs.setIntPref("print.printer_"+printername+".print_edge_bottom",28);
A décliner en top, right et left bien sûr. En espérant que ça serve à quelqu'un d'autre un jour...
Envoyé par : GuiOhm
Date : 18/09/2007 09:26
Bon, j'arrive donc maintenant à afficher des entêtes et pieds de page comme je veux. Je souhaiterais maintenant avoir accès au nombre total de pages de l'impression, pour faire l'équivalent du remplacement de &PT dans un PrintSettings.{header/footer}Str{Left/Center/Right} mais sans être contraint par ce qui est codé dans Firefox (n de N pour une locale fr et n of N pour une locale en_US par exemple). Malheureusement je ne trouve pas la chaîne à insérer pour avoir un remplacement à l'impression... Et à moins que je ne me trompe, si je mets &PT, je ne pourrai jamais avoir un accès direct à la chaine concernée après remplacement, si ?
Pour l'instant je peux le trouver en ouvrant un aperçu d'impression, en récupérant l'attribut nsIWebBrowserPrint.printPreviewNumPages puis en fermant l'aperçu, mais ça a un impact visuel sur ma fenêtre (disparition puis réapparition après parfois 1 ou 2 secondes du contenu de mon <browser>).
Si quelqu'un a une idée, ou un moyen de "calculer" ce nombre de pages à imprimer sans "effet de bord"...
Il n'est plus possible de poster des messages dans ce forum.
Copyright © 2003-2013 association xulfr, 2013-2016 Laurent Jouanneau - Informations légales.
Mozilla® est une marque déposée de la fondation Mozilla.
Mozilla.org™, Firefox™, Thunderbird™, Mozilla Suite™ et XUL™
sont des marques de la fondation Mozilla.