Stampare sul server con ASP.NET

di Cristian Civera, in ASP.NET, System.Drawing.Printing, VB.NET,

E' possibile stampare da una pagina ASP.NET con estrema facilità mediante l'uso della classe PrintDocument del namespace System.Drawing.Printing.
Ecco un esempio di come istanziare l'oggetto in questione e stampare una pagina contenente del testo, formattato come Arial e di colore nero:

<%@ import Namespace="System.Drawing" %>
<%@ import Namespace="System.Drawing.Printing" %>
<%@ import Namespace="System.Security.Principal" %>
<%@ import Namespace="System.Security" %>
<SCRIPT runat="server" Language="C#">

    private PrintDocument document;
    
    private void createPrinter()
    {
        document=new PrintDocument();
        //intercetto l'evento di stampa
        document.PrintPage+=new PrintPageEventHandler(onPrintPage);

        //imposto la stampante da usare
        document.PrinterSettings.PrinterName=printers.SelectedItem.Text;
        document.DocumentName="ASP.NET printer";
    }
    
    private void onPrintPage(object sender, PrintPageEventArgs e)
    {
        //l'oggetto graphics passato è il nostro foglio di stampa
        Graphics gr=e.Graphics;
        Font font=new Font("Arial",11);
        SolidBrush brush=new SolidBrush(Color.Black);

        //scrivo il testo con il font impostato
        gr.DrawString(txtToPrint.Text,font,brush,e.MarginBounds);
    }

    private void print_click(object sender, EventArgs e)
    {
        createPrinter();

        //controllo che il documento sia valido
                 //stampante corretta, impostazioni ecc
        if (document.PrinterSettings.IsValid)
            document.Print();
    }

    private void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
          //carico la lista di stampanti
          printers.DataSource=PrinterSettings.InstalledPrinters;
          printers.DataBind();
        }
    }

</SCRIPT>
<form runat="server">
Testo da stampare

<asp:TextBox id="txtToPrint" runat="server" TextMode="MultiLine" Rows="5" Columns="20" />


Stampante:

<asp:DropDownList id="printers" runat="server"/>
<asp:Button id="print" onclick="print_click" runat="server" Text="Stampa"/>
</form>

La proprietà InstalledPrinters dell'oggetto PrinterSettings contiene un array di stampanti disponibili.
In questo modo è possibile selezionare, nel nostro sempio, la stampante su cui effettuare la stampa.
E' inoltre possibile impostare varie proprietà del documento, come il numero delle copie, la dimensione del foglio o i margini, tramite le proprietà PrinterSettings e DefaultPageSettings dell'oggetto PrintDocument.
C'è da notare che di default l'utente con la quale vengono eseguite le operazioni è ASPNET, perciò sarà possibile utilizzare stampanti alle quali quest'ultimo abbia accesso.
Se non si ha accesso, generalmente verrà restituito l'errore: "A StartDocPrinter call was not issued".
Per finire, ovviamente la stampa avviene sulle stampanti del server su cui gira lo script, non di certo sui client che visualizzano la pagina.

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

I più letti di oggi