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"
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.