Report di stampa da database a Ms Word con Asp

Siti dinamici con ASP
Impara a creare siti dinamici professionali con ASP

Scritto da Luca Ruggiero nella sezione Asp

Introduzione

Nello sviluppo di un'applicazione Web è sempre molto importante permettere all'utente di disporre di una funzione di stampa. E' risaputo che il browser Web non offre la migliore qualità per un Report di dati cartaceo (anche se si può fare il possibile con qualche trucco in Dhtml), quindi in questo Articolo vedremo come ottenere un miglior servizio di stampa sfruttando il più adatto, rispetto al browser, Ms Word.

Per un miglior apprendimento consiglio, ai meno pratici, la lettura del Tip Scrittura di un file Ms Word.

Struttura del database

Per quest'applicazione non è importante quale DBMS utilizzare, diciamo che Ms Access 2000 è perfeto allo scopo.
Supponiamo quindi di avere il database stampa.mdb con la tabella utenti da cui andare a prelevare i dati da mettere in formato stampa; i campi che questa tabella conterrà saranno, ad esempio, id, nome e cognome. Inserite dunque qualche dato di prova.

Pagina di scelta del record da stampare

Creiamo il file da cui sarà possibile scegliere il record da stampare, chiamiamolo index.asp e disponiamolo nella stessa cartella in cui si trova il database. Il compito di questo file è quello di stampare a video tutti i record e, grazie ad un link univoco per ciascun record, permettere all'utente di inviare in stampa i dati che si desidera stampare in formato cartaceo.

Di seguito presento il codice:

<%@LANGUAGE = JScript%>
<html>
...

<%
    var Cn = new ActiveXObject("ADODB.Connection");
    Cn.Open("driver={Microsoft Access Driver (*.mdb)};dbq=" + Server.MapPath("stampa.mdb"));
    var Mostra = Cn.Execute("SELECT * FROM utenti");
    Response.Write("<table border='1'>");
    while (!Mostra.EOF)
    {
        with (Response)
        {
            Write("<tr>");
            Write("<td><a href='stampa.asp?id=" + Mostra("id") + "' target='_blank'>Stampa</a></td>");
            Write("<td>" + Mostra("nome") + "</td>");
            Write("<td>" + Mostra("cognome") + "</td>");
            Write("</tr>");
        }
        Mostra.MoveNext();
    }
    Response.Write("</table>");
    Cn.Close();
%>

...
</html>
Il codice appena presentato stampa a video indiscriminatamente tutti i record dal database, corredando ognuno col link verso il file stampa.asp, passando come parametro identificativo l'id contatore del database in una QueryString.

Esecuzione della stampa

Il file stampa.asp si occupa, come già detto, di processare i dati e di visualizzarli su di un file Ms Word.

Di seguito il codice:
<%@LANGUAGE = JScript%>
<%
    Response.Buffer = true;

    var id = parseInt(Request.QueryString("id"));
    var Cn = new ActiveXObject("ADODB.Connection");

    Cn.Open("driver={Microsoft Access Driver (*.mdb)};dbq=" + Server.MapPath("stampa.mdb"));
    var Mostra = Cn.Execute("SELECT * FROM utenti WHERE id = " + id);

    // Genero il file stampa.rtf
    Response.ContentType = "application/msword";
    Response.AddHeader("content-disposition", "inline; filename=stampa.rtf");

    // Creo graficamente il file Ms Word
    with (Response)
    {
        Write("ID: " + Mostra("id") + "
");
        Write("Nome: " + Mostra("nome") + "
");
        Write("Cognome: " + Mostra("cognome"));
    }

    Cn.Close();

    // Un po di pulizia...
    Response.Flush;
    Response.End;
%>
Conclusioni

Per un corretto funzionamento è necessario che sul server Web in cui viene eseguita l'applicazione vi sia istallata una versione di Ms Word preferibilmente non inferiore alla 2000.

Questo tipo di creazione di un file Ms Word è ildale per un'applicazione del genere. Il file .rtf (o voloendo .doc) non viene creato fisicamente sul server, ma viene conservato in una locazione di memoria virtuale e muore appena l'utente lo chiude, ad esempio dopo aver eseguito la stampa.

Questo particolare processo evita problemi di concorrenzialità negli accessi.

I più cliccati della sezione Asp

:: Un semplice form mail in Asp (52.099)

:: Creazione di un Guestbook in Asp (50.976)

:: Creazione di un'area di accesso riservato in Asp (45.578)

:: Connessione ad un database MySql con Asp (25.230)

:: Connessione ad un database Microsoft SQL Server con Asp (24.401)

:: Asp e database (23.292)

:: Differenza tra i metodi get e post e recupero dei dati, attraverso Asp (22.665)

:: Una semplice area di accesso riservato senza DB in Asp (21.557)

:: Riscrivere le URL con Asp (19.949)

:: Creazione di un Sondaggio in Asp (19.224)

IN EVIDENZA
DOWNLOAD