Forums : Xul, Xbl, JS...

Aller à la discussion :  Plus récente Plus ancienne

# Xulrunner et Impressions

Envoyé par : mainman

Date : 10/12/2005 14:41

Bonjour à tous,

Je développe une appli avec Xulrunner ou l'impression de documents est cruciale. Et comme le développement se passe de façon plutot rapide et hachée, je ne m'étais pas encore penché sur la question des impressions. Les documents que je dois imprimer peuvent tous être converti en HTML si il le faut (j'ai lu dans un post de Laurent que les fenêtres XUL ou objet XUL - <tree> - ne peuvent pas être imprimées - logique). Donc je me suis lancé dans l'impression :

var browserContractID = "@mozilla.org/embedding/browser/nsWebBrowser;1";
var browser = Components.classes[browserContractID].createInstance(
	Components.interfaces.nsIInterfaceRequestor);
var browserPrint = browser.getInterface(Components.interfaces.nsIWebBrowserPrint);

Mais lors la dernière instruction, avant même de rattacher mon document à imprimer, une exception est levée:

[Exception... "Component returned failure code: 0x80004002 (NS_NOINTERFACE) [nsIInterfaceRequestor.getInterface]"
nsresult: "0x80004002 (NS_NOINTERFACE)"  location: "JS frame :: chrome://.../content/winsearch.js :: printWindow :: line 145"
data: no]

Après maintes recherches sur Google, sûrement insuffisantes, je n'arrive pas à créer mon objet BrowserPrint. Cela est peut-etre du à des differences de composants entre Firefox et Xulruner...

Merci de vos réponses éventuelles.

Bon WE à tous,

Renaud

# Re: Xulrunner et Impressions

Envoyé par : laurentj

Date : 10/12/2005 15:02

Il n'est pas indiqué que l'objet nsWebBrowser implémentait l'interface nsIWebBrowserPrint :http://www.xulplanet.com/references/xpco(..)

À moins qu'il ne puisse délivrer un objet implementant cette interface seulement si il y a un document..

# Re: Xulrunner et Impressions

Envoyé par : mainman

Date : 10/12/2005 18:38

Tu as raison, je m'étais inspiré d'un exemple que j'ai ré-appliqué dans un mauvais contexte. Mais sais-tu comment imprimer un document ? Rien là dessus dans le forum. Cela pourrait être intéressant si quelqu'un à la façon de faire.

Merci, Renaud

# Re: Xulrunner et Impressions

Envoyé par : mainman

Date : 11/12/2005 11:01

Oups ! J'ai trouvé sur le forum ce que je cherchais ... J'avais oublié d'enlever le filtre sur les "30 derniers jours".

# Re: Xulrunner et Impressions

Envoyé par : Utilisateur anonyme

Date : 13/12/2005 14:01

Tu peux nous donner le lien direct vers la solution ? Ou au pire réexpliquer rapidement ?

# Re: Xulrunner et Impressions

Envoyé par : mainman

Date : 14/12/2005 11:27

Bonjour,

Je préfére faire un topo sur la façon de faire, c'est si simple que je m'en mord les doigts d'avoir perdu du temps la dessus. Je m'étais dis que l'impression de documents passait forcément par XPCOM. Que nenni ! JavaScript et sa capacité à l'abstraction nous en dispense. Il suffit d'ouvrir notre document dans un <browser /> ou dans une <iframe /> et de récupérer l'objet XULElement correspondant, de récupérer son contenu et lancer la méthode print():

document.getElementById("if").contentWindow.print();

Sur Linux KDE (je ne parle que par expérience, à confirmer sous Windows et Mac, mais le comportement doit-être le même), apparait une fenêtre de lancement de l'impression avec la possibilité de jouer sur les options. Et voilà !

Donc dans mon cas :

window.open("chrome://xxx/content/print.xul",
            "content-print",
            "chrome,centerscreen,resizable=0,dependent,minimizable"	
            );

Dans la fenetre :

<button label="Print" oncommand="printAll()" />
<iframe id="if" flex="1" src="http://xulfr.org" />
<browser id="br" src="http://xulfr.org" flex="1" />

Et sur le printAll() :

function printAll () {
//  document.getElementById("if").contentWindow.print();
    document.getElementById("br").contentWindow.print();
}

Après il est sûrement possible de compliquer le truc et d'agir sur des options de manière très fine (cf la réf. XPCOM). Mais des recherches sur le Web ne m'ont rien de donner de très probant, et pour cause, cela est tellement simple d'utiliser la méthode print() d'un objet Window.

Bons essais !

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.