Desenvolvimento - C#

Imprimindo um Panel com C#

Nesse artigo veremos como imprimir apenas um panel usando a linguagem c#.

por Mauricio Junior



Caro(a) Leitor(a), hoje eu vou mostrar como imprimir o conteúdo que está dentro de um objeto panel do ASP.NET. Muitos sistemas feitos em C# precisam de uma impressão customizada, em alguns momentos, o cliente precisa imprimir partes do relatório web ou partes da página web. Quando você, desenvolvedor, se deparar com esse tipo de funcionalidad, então utilize o que vou descrever aqui.

A página web possui mais informações no topo e na lateral, só que o cliente quer clicar no botão imprimir e o que deve sair na impressora é o miolo da página. A melhor maneira de fazer isso é usando o objeto panel.

Utilizado:

  • Ferramenta Visual Studio .NET
  • Linguagem C#.NET
  • Tipo de projeto ASP.NET.

O primeiro passo é criar uma página .ASPX com todo o conteúdo que deseja. As vezes esse conteúdo precisa vir do banco de dados, xml ou qualquer outra fonte de dados. Depois de colocar as informações solicitados pelo cliente, coloque um objeto panel na parte onde deseja imprimir.

Na listagem 1, mostro como firmar informações dentro do panel. Caso queira colocar uma barra de rolagem no panel, basta adicionar os atributos Width, Height e ScrollBars. Esses atributos eu mostro na listagem 1 também.

Listagem 1: Panel com dados

<asp:Panel ID="pnlImpressao" runat="server" Width="690px" Height="350px" ScrollBars="Auto">
<br />
Meus dados, informações: 
Data: 12/01/2013
Nome: Mauricio Junior
Site: www.mauriciojunior.org 
Processado: Sim
</asp:Panel>

Note que as informações estão dentro do objeto <panel>. No final, o objeto está sendo fechado, </panel>. Existem outras informações antes do panel e depois do panel, mas a impressão será programada para que apenas os dados dentro do objeto sejam impressos.

O próximo passo é o botão, preciso colocar um botão responsável pela impressão dos dados, lembrando que o cliente sempre escolhe a impresssora instalada no seu computador. O botão, é bem simples e ao mesmo tempo inteligente. Para imprimir corretamente, vou utilizar o JavaScript, isso mesmo, JavaScript. O botão chama a função JavaScript que processa e imprimi apenas o necessário.

O melhor de tudo é que no mesmo clique do botão pode ser acionado um métod em C# para gravar auditoria, gravar no banco de dados quem imprimiu os dados, que horas e quais informações. É uma idéia.

O botão imprimir possui algumas propriedades específicas como: OnClienteClick e OnClick. A primeira propriedade chama uma função JavaScript, enquanto que a segunda chama um método em C#.

A listagem 2 mostra o botão programado.

Listagem 2: Botão imprimir customizado.

<asp:Button ID="btnImprimir" runat="server" Text="Imprimir" OnClientClick="javascript:imprimePanel()" OnClick="btnImprimir_Click"/>

Nenhuma das duas propriedades ainda foram criadas, vamos começar da primeira propriedade que chama a função criada na linguagem Javascript. A função precisa pegar o objeto panel, abrir uma janela única, gerar o innerHtml para depois imprimir.

Isso funciona com objeto imagem ou qualquer tipo de dado. A listagem 3 mostra como fazer.

Listagem 3: Criando função JavaScript.

<script language="javascript" type="text/jscript">
function imprimePanel() {
var printContent = document.getElementById("<%=pnlImpressao.ClientID%>");
       var windowUrl = 'about:blank';
       var uniqueName = new Date();
       var windowName = 'Print' + uniqueName.getTime();
       var printWindow = window.open(windowUrl, windowName, 'left=50000,top=50000,width=0,height=0');

       printWindow.document.write(printContent.innerHTML);
       printWindow.document.close();
       printWindow.focus();
       printWindow.print();
       printWindow.close();
}

</script>

Note que a função começa com a palavra function, depois o objeto é pego pelo nome usando tags do .NET (<%=pnlImpressao.ClientID%>). Para pegar o nome de qualquer objeto dentro do JavaScript, é necessário usar o ClientID, isso porque alguns objetos possuem o nome diferente quando o html é jogado na tela.

Para colocar o panel único, é necessário declarar algumas variáveis com parâmetros dinâmicos. Note que a variável WindowName possui o nome Print mais um tempo, esse tempo é da máquina do cliente. As variáveis são usadas no comando Open.

Para finalizar, escrevo os dados da variável printContent dentro da tela nova, fecho o documento, mando imprimir e depois fecho a janela.

Depois de gerar uma janela nova, imprimir os dados e chamar a impressora pelo comando print; tenho que chamar o método em C# chamado btnImprimir_Click() para gravar dados em uma tabela de auditoria do sistema. Eu escrevi um artigo que fala sobre auditoria nos sistemas. É importante saber e entender, veja o link:

O próximo passo é criar o método que grava a auditoria no banco de dados. Não vou mostrar como gravar no banco de dados, vou mostrar apenas o método passando parâmetro. A listagem 4 mostra o código C#.

Listagem 4 : Método C# que grava auditoria.

protected void btnImprimir_Click(object sender, EventArgs e)
{
gravaAuditoria(dados);
}

Seguem as telas funcionando, acredito que, com elas você tenha uma visão melhor do funcionamento.

A figura 1 mostra a tela principal com o botão de imprimir.

Página principal

Figura 1: Página principal

A figura 2 mostra o resultado depois que clica no botão imprimir. A tela que aparece é a os dados, apenas uma parte da página e não toda a página.

Imprimir apenas a parte

Figura 2: Imprimir apenas a parte

Eu fico por aqui e espero que tenha gostado. Lembro que essa funcionalidade roda em qualquer browser. Qualquer dúvida, favor entrar em contato pelo site www.mauriciojunior.org .

Mauricio Junior

Mauricio Junior - Formado pela Faculdade Anhanguera, Especialista pela FGV (Fundação Getúlio Vargas), Pós-Graduação em Docência Superior e cursando Mestrado na UNB Engenharia Elétrica; . Tenho 29 anos e possuo sete livros publicados pela editora Ciência Moderna e sou editor do Linha de Código.
Sou Certificado Microsoft MCP, MCAD e MVP, faço parte da comunidade ASPNETI.COM, onde publico artigos, vídeos, ebooks e livros Publico artigos, vídeos e podcast em outras comunidades. Trabalho como Analista de Sistemas / Desenvolvedor na empresa ATP S/A.
Blog:
blog.mauriciojunior.org
Site pessoal: www.mauriciojunior.org