Caro(a) Leitor(a), gostaria de falar hoje sobre como fazer download de PDF usando buffer sem mostrar o caminho ao usuário final pelo browser. São poucas linhas que precisam ser escritas, só é necessário prestar atenção no funcionamento e na ideia.

Usado no artigo:
Linguagem C#
Ferramenta de desenvolvimento Visual Studio 2012
Tipo da aplicação Web: ASP.NET.

A ideia principal é bem simples. O usuário clica na imagem para fazer download do arquivo em PDF já criado e armazenado em algum local dentro do servidor web. Lembrando que o usuário não pode saber o endereço do arquivo, deve apenas pegar o arquivo aparecendo no “browser”.

O primeiro passo é: a imagem que o usuário final clica com o mouse deve ser do tipo ImageButton (componente da ferramenta Visual Studio 2012). A listagem 1 mostra o exemplo.

Listagem 1 – Código da ImageButton

<asp:ImageButton_ ID="imgEdicao06"_ CssClass="image"_ Width="220"_

BorderWidth="1px" runat="server" ImageUrl="capas/capa-201206.png"

AlternateText="Magazine" ToolTip="Edição 05 - Magazine" OnClick="imgEdicao06_Click"/>

Esse componente (Listagem 1) mostra a imagem no atributo ImageUrl e ao clicar na imagem, o evento acionado é o OnClick. Esse evento chama a classe de C# para fazer download. 

Caso queira fazer uma contagem de quantos cliques as pessoas estão dando, é melhor colocar alguma regra antes do download, mas isso é uma regra mais específica. Eu mesmo coloquei um sistema de contador para saber quantos cliques estão dando para fazer download. 

O segundo passo é: como o endereço do PDF está gravado dentro do banco de dados, preciso pegar o endereço para que o buffer seja feito. Neste momento, não vou mostrar como se conectar no banco de dados e fazer um select para pegar a informação, existem vários outros artigos no site www.ecode10.com que mostram como fazer isso.

O retorno dos dados estão dentro de um DataSet ou DataTable, você escolha o que é melhor pra você. A listagem 2 mostra como fazer o buffer.

Listagem 2 – Fazendo o buffer para download do PDF.

//pegando a string de do pdf

string pdfPath = dtSet.Tables[0].Rows[0][0].ToString();

 

//criando uma variável para download – componente WebClient()

WebClient client = new WebClient();

 

//fazendo download do pdf pelo endereço pego anteriormente

Byte[] buffer = client.DownloadData(pdfPath);

 

Response.ContentType = "application/pdf";

Response.AddHeader("content-length", buffer.Length.ToString());

 

//escrevendo o buffer na tela do usuário, onde aparece o PDF

Response.BinaryWrite(buffer);


Note-se que cada linha da listagem 2 explica de maneira rápida o que faz. O componente utilizado para download é o WebClient da ferramenta Visual Studio 2012. O conteúdo que precisa ser mostrado é o Application/PDF por isso que no final o que é gerado na tela é o PDF sem mostrar o endereço. 

Na Url mostra apenas o nome da página onde o usuário estava antes. Um exemplo típico disso é o download da revista eCode10 Magazine no site www.ecode10.com. Espero que tenha gostado e qualquer dúvida pode entrar em contato pelo site pessoal www.mauriciojunior.org