Stampare una pagina html

Come stampare una pagina html senza far apparire la finestra di selezione della stampante?

La soluzione che ho adottato comporta l'inclusione dell'activeX di Internet Explorer nel codice (Componente COM Microsoft Web Browser). Altre soluzioni fanno sempre apparire quella dannata printer dialog. Smile triste

Siccome l'html viene generato dinamicamente navigo sull'about:blank:

Object n = System.Reflection.Missing.Value;
axWebBrowser1.Navigate("about:blank", 
ref n, ref n, ref n, ref n);

Sull'evento NavigateComplete2 vado ad iniettare l'html dentro l'oggetto:

private void axWebBrowser1_NavigateComplete2(object sender
                    , AxSHDocVw.DWebBrowserEvents2_NavigateComplete2Event e)
{
    
object[] psa = {this.Html}; // Variabile Stringa che contiene l'html
    
mshtml.IHTMLDocument2 hDoc2 = (mshtml.IHTMLDocument2)axWebBrowser1.Document;
    
    hDoc2.clear(); 
// Pulisco la pagina

    
hDoc2.write(psa); // Scrivo il contenuto
    
hDoc2.close(); // Chiudo la pagina
}

A questo punto chiamo il seguente metodo per stampare la pagina senza richiesta di selezione da parte dell'utente (stampante di default). Il terzo parametro della ExecWB serve per far si che il thread resti in attesa fino a completamento della stampa, in questo modo siamo certi che all'uscita da questo metodo l'oggetto è eliminabile senza problemi perchè ha completato il suo lavoro:

public void Print()
{
    Object o    = 
System.Reflection.Missing.Value;
    
short  flag = 0x02;
    
object printWait = (object)flag;
    
int stat    = 0;
    
int enabled = 0;

    enabled = ((
int)SHDocVw.OLECMDF.OLECMDF_ENABLED 
            + (
int)SHDocVw.OLECMDF.OLECMDF_SUPPORTED);

    
// Attendo che il servizio richiesto sia disponibile
    
do 
    
{
        Application.DoEvents();
        stat = (
int)axWebBrowser1.QueryStatusWB(SHDocVw.OLECMDID.OLECMDID_PRINT);
    } 
while(stat != enabled);

    axWebBrowser1.ExecWB(SHDocVw.OLECMDID.OLECMDID_PRINT
                        , SHDocVw.OLECMDEXECOPT.OLECMDEXECOPT_DONTPROMPTUSER
                        , 
ref printWait
                        , 
ref o);
}

 

that's all folks

powered by IMHO 1.2 with Emoticon Formatter

Print | posted on giovedì 3 febbraio 2005 11:38

Copyright © Gabriele Gaggi

Design by Bartosz Brzezinski

Design by Phil Haack Based On A Design By Bartosz Brzezinski