Attention : Le contenu de ces pages n'a pas été mis à jour depuis longtemps. Il est probablement obsolète pour Firefox 4.0/Gecko 4.0 et supérieur. Pour du contenu plus récent, allez consulter developer.mozilla.org.

Print manager

Gestionnaire d'impression avec XulRunner

Même si le gestionnaire n'est pas encore entièrement configuré pour fonctionner avec XulRunner, il est cependant disponible avec le Toolkit. En attendant, il permet quand même d'avoir rapidement accès au mêmes fonctionnalités que la gestion de l'impression sous Firefox, à condition de procéder à quelques légères modifications.

Modifier « PrintUtils.js »

L'impression est gérée via l'objet JS « PrintUtils » qui se trouve dans « global/content/printUtils.js » dans le chrome du Toolkit. Il est nécessaire de récupérer ce fichier et de le placer dans le chrome de son application après avoir effectué les modification suivantes :

 enterPrintPreview: function ()
 {
    ...
    // show the toolbar after we go into print preview mode so
    // that we can initialize the toolbar with total num pages
    printPreviewTB = document.createElementNS(XUL_NS, "toolbar");
    printPreviewTB.setAttribute("printpreview", true);
    printPreviewTB.setAttribute("id", "print-preview-toolbar");
    // Ajouter la ligne suivante (l.197):
    getBrowser().parentNode.insertBefore(printPreviewTB, getBrowser());
    ...
  }

Aperçu avant impression

L'aperçu avant impression est activé sur l'élément <iframe> ou <browser> qui contient le document à imprimer. Dans Firefox, une toolbar spéciale est insérée au-dessus de cet élément et permet d'avoir accès aux éléments de configuration de l'impression. Sous XulRunner, il suffit donc de créer une fenêtre spéciale qui contiendra le document à imprimer:

 <window
  xmlns="[[http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul]]"
  id="printPreview"
  title="Aperçu avant Impression"
  onload="onLoad();"
  ...
  >
   <script type="application/x-javascript" src="[[chrome://monappli/content/printUtils.js"/]]>
   <script type="application/x-javascript" src="[[chrome://monappli/content/printPreview.js"/]]>
   <browser id="content" src="[[about:blank]]" flex="1"/>
 </window>

« printPreview.js »

  var gBrowser;
  function getBrowser()
  {
    if (!gBrowser)
         gBrowser = document.getElementById("content");
    return gBrowser;
  }
  function onEnterPrintPreview()
  {
    // On peut modifier la fenêtre xul ici.
  }
  function onExitPrintPreview()
  {
    // On ferme la fenêtre ici si elle ne sert que pour la prévisualisation.
    window.close();
  }
  function onLoadContent()
  {
    // On lance la mode "preview"  dès le chargement du contenu
    PrintUtils.printPreview(onEnterPrintPreview, onExitPrintPreview);
  }
  function onUnloadContent()
  {
    //
  }
  function onLoad()
  {
    var args    = window.arguments;
    getBrowser().addEventListener("unload", onUnloadContent, true);
    getBrowser().addEventListener("load"  , onLoadContent, true);
    getBrowser().setAttribute("src","file://"+args[0]);
  }

La fenêtre sera alors ouverte par:

 openDialog(command, "PrintPreview", "chrome,resizable,dialog=no,dependent,centerscreen", url_du_document);

Attention, cela ne fonctionnera pas si la fenêtre est modale !

La barre d'outils

La barre d'outils est un composant xbl qui se trouve dans « global/content/printPreviewBindings.xml ». On peut tout à fait récupérer ce composant et le modifier à notre guise en n'oubliant pas de modifier le binding CSS et le cas échéant apporter les modifications appropriés à « PrintUtils.js ».

Pour Simplement imprimer le contenu d'un browser

Si vous n'avez pas besoin d'une configuration complexe de l'impression et voulez imprimer le contenu d'un browser, il faut ajouter le script suivant au fichier XUL le contenant :

	<script type="application/x-javascript" src="[[chrome://global/content/printUtils.js"/]]>

ou bien si vous avez fait les manipulations plus haut :

   <script type="application/x-javascript" src="[[chrome://monappli/content/printUtils.js"/]]>

Le script suivant réalise l'impression :

    var doc = browser;
    var req = doc.contentWindow.QueryInterface(Components.interfaces.nsIInterfaceRequestor);
    var wbprint = req.getInterface(Components.interfaces.nsIWebBrowserPrint);
    var settings = PrintUtils.getPrintSettings();
    wbprint.print(settings, null);

browser étant la référence à un élément XUL de type browser. J'ai testé cet exemple pour Windows. Pour linux, si vous utilisez KDE, vous aurez besoin d'ajouter des prefs du type :

    pref("print.printer_PostScript/default.print_command", "kprinter ${MOZ_PRINTER_NAME:+'-P'}${MOZ_PRINTER_NAME}");

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.