ASP .NET - Imprimindo formulários e controles (C#)
Nesta dica eu reproduzo um artigo muito interessante de Raul Kumar que mostra como imprimir formulários e controles de uma página ASP .NET.
Foi criada uma classe chamada PrintWeb e um método chamado PrintWebControl que é usado para imprimir qualquer controle de servidor como GridView, DataGrid, Panel, TextBox, etc...
Vejamos como isso foi feito...
Abra o Visual Web Developer 2008 Express Edition e crie um novo web site (Menu File->New web site) e defina as seguintes opções:
Agora vamos criar a classe PrintWeb.cs da seguinte forma. No menu WebSite selecione Add New Item e selecione o template Class, escolha a linguagem C# e informe o nome PrintWeb.cs e clique no botão Add;
Será solicitada uam confirmação para incluir o arquivo na pasta App_Code, Confirme;
No arquivo PrintWeb.cs defina os seguintes namespace:
using System;
using System.Data;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.IO;
using System.Text;
A seguir defina o seguinte código:
public static void PrintWebControl(Control ctrl) { PrintWebControl(ctrl, string.Empty); } public static void PrintWebControl(Control ctrl, string Script) { StringWriter stringWrite = new StringWriter(); System.Web.UI.HtmlTextWriter htmlWrite = new System.Web.UI.HtmlTextWriter(stringWrite); if (ctrl is WebControl) { Unit w = new Unit(100, UnitType.Percentage); ((WebControl)ctrl).Width = w; } Page pg = new Page(); pg.EnableEventValidation = false; if (Script != string.Empty) { pg.ClientScript.RegisterStartupScript(pg.GetType(), "PrintJavaScript", Script); } HtmlForm frm = new HtmlForm(); pg.Controls.Add(frm); frm.Attributes.Add("runat", "server"); frm.Controls.Add(ctrl); pg.DesignerInitialize(); pg.RenderControl(htmlWrite); string strHTML = stringWrite.ToString(); HttpContext.Current.Response.Clear(); HttpContext.Current.Response.Write(strHTML); HttpContext.Current.Response.Write("<script>window.print();</script>"); HttpContext.Current.Response.End(); } |
Definimos dois métodos sobrecarregados PrintWebControl que usaremos para imprimir os controles da páginas ASP .NET.
Agora vamos definir na página Default.aspx alguns controles conforme o leiaute abaixo:
O código da página acima é mostrado abaixo: |
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title>Untitled Page</title> </head> <body> <form id="form1" runat="server"> <div> <asp:Panel ID="pnl1" runat="server"> <table cellpadding="4" cellspacing="4" width="50%" align="center"> <tr> <td align="center"> Cadastro</td> </tr> <tr> <td> <asp:Label ID="Label1" runat="server" Text="Email" Width="130px"></asp:Label> <asp:TextBox ID="TextBox1" runat="server" Width="207px"></asp:TextBox> </td> </tr> <tr> <td> <asp:Label ID="Label2" runat="server" Text="Nome" Width="130px"></asp:Label> <asp:TextBox ID="TextBox2" runat="server" Width="202px"></asp:TextBox> </td> </tr> <tr> <td> <asp:Label ID="Label6" runat="server" Text="Pais" Width="130px"></asp:Label> <asp:TextBox ID="TextBox5" runat="server"></asp:TextBox> </td> </tr> <tr> <td> <asp:Label ID="Label3" runat="server" Text="Telefone" Width="130px"></asp:Label> <asp:TextBox ID="TextBox3" runat="server"></asp:TextBox> </td> </tr> <tr> <td style="text-align: center"> <asp:Button ID="btnPrint" runat="server" OnClick="btnPrint_Click" Text="Imprimir" /> </td> </tr> </table> </asp:Panel> </div> </form> </body> </html> |
Esta página será exibida quando da execução do web site.
No arquivo code-behind Default.aspx.cs temos que definir o código do evento Click do botão de comando Imprimir:
protected void btnPrint_Click(object sender, EventArgs e) { Session["ctrl"] = pnl1; ClientScript.RegisterStartupScript(this.GetType(), "onclick", _ "<script language=javascript>window.open('Imprimir.aspx','Imprimir','height=300px,width=300px,scrollbars=1');</script>"); } |
Observe que definimos um código javascript para abrir uma página chamada Imprimir.aspx. Precisamos então criar a página Imprimir.aspx no menu WebSite->Add New Item e selecione Web Form e informe o nome Imprimir.aspx;
A seguir defina no arquivo Imprimir.aspx no evento Load o seguinte código:
protected void Page_Load(object sender, EventArgs e) { Control ctrl = (Control)Session["ctrl"]; Printweb.PrintWebControl(ctrl); } |
Com isso estamos prontos para testar a nossa aplicação:
Ao ser iniciada a aplicação apresenta a página Default.aspx conforme abaixo:
Clicando no botão Imprimir a página Imprimir.aspx exibira o formulário a ser impresso e janela de diálogo Imprimir;
Ao clicar no botão para imprimir o formulário será impresso com os controles da página.
Pegue o projeto completo aqui: imprimirASPNET.zip
Aguarde mais artigos sobre ASP .NET...
Referências: