ASP .NET MVC 3 - Gerando PDF (C#)
Neste artigo eu vou mostrar como podemos gerar arquivos PDF usando a library iTextSharp em uma aplicação ASP .NET MVC.
A library iTextSharp é gratuita e pode ser obtida no seguinte endereço: http://sourceforge.net/projects/itextsharp/.
Então primeiro faça o download da
library para poder referenciá-la em seu projeto web. Eu fiz o
download da library e a descompactei na pasta:
C:\Program Files
(x86)\itextsharp-all-5.1.2\itextsharp-dll-core-5.1.2
Abra o Visual Web Developer 2010 Express Edition e no menu File->New Project crie um novo projeto do tipo ASP .NET MVC 3 Web Application; informe o nome GerandoPDF e clique em OK;
Selecione o template Internet Application e o View Engine ASPX e clique em OK;
Será exibida na janela Solution Explorer a estrutura do projeto criado conforme a figura abaixo:
Vamos aproveitar a estrutura criada e alterar alguns arquivos para realizar a tarefa proposta.
Vamos também incluir uma referência a library itextSharp em nosso projeto.
Clique no menu Project -> Add Reference e na janela Add Reference selecione a aba Browse e localiza a dll do itextsharp na pasta onde você instalou o arquivo:
Definindo o Model
Vamos criar um novo arquivo chamado PDFResult que herda de ActionResult na pasta Model que irá permitir a geração dos arquivos PDF.
Clique com o botão direito do mouse sobre a pasta Models e selecione Add->Class; A seguir informe o nome PDFResult.cs e clique em OK;
Digite o código abaixo no arquivo criado:
using System.IO; using System.Web; using System.Web.Mvc; using iTextSharp.text; namespace PdfResult.Models { public class PdfResult : ActionResult { public override void ExecuteResult(ControllerContext context) { HtmlToPdfBuilder builder = new HtmlToPdfBuilder(PageSize.LETTER); HtmlPdfPage page1 = builder.AddPage(); page1.AppendHtml("<h1>Super DVD .NET 2012</h1>"); page1.AppendHtml("<p>A sua porta de entrada na plataforma .NET<br>"); page1.AppendHtml("Projetos completos abertos para estudo<br>"); page1.AppendHtml("Livros, Apostilas, Exemplos, Utilitários CA</p>"); page1.AppendHtml("<table><tr><td><b>Produto</b></td><td><b>Preço</b></td></tr>"); page1.AppendHtml("<tr><td>SUPER DVD .NET</td><td>R$ 70,00</td></tr></table>"); byte[] file = builder.RenderPdf(); byte[] buffer = new byte[4096]; HttpResponseBase response = context.HttpContext.Response; response.ContentType = "application/pdf"; MemoryStream pdfStream = new MemoryStream(file); while (true) { int read = pdfStream.Read(buffer, 0, buffer.Length); if (read == 0) break; response.OutputStream.Write(buffer, 0, read); } response.End(); } } } |
No código acima temos :
O método ExecuteResult onde primeiro estamos criando uma instância da classe HtmlToPdfBuilder. Esta classe foi desenvolvida por Hugo Bonacci e esta sendo usada para criar uma página no arquivo PDF. Convertemos o PDF em um array de bytes para ser alavancado para o navegador; definimos o tamanho do buffer declaramos o tipo de conteúdo do nosso stream e criamos um stream que será enviado a requisição.
Definindo o Controller
Vamos aproveitar a classe HomeController e vamos criar um novo método chamado GetPdf. Essa Action será uma PdfResult. Como nós codificamos a geração do PDF diretamente no ActionResult, tudo o que precisamos fazer é declarar o método.
Vamos aproveitar o arquivo HomeController existente na pasta Controller e incluir o método GetPdf() neste arquivo conforme abaixo:
using System.Web.Mvc; using Gerando_PDF.Models; namespace Gerando_PDF.Controllers { public class HomeController : Controller { public ActionResult Index() { ViewBag.Message = "Gerando PDF com ASP .NET MVC"; return View(); } public PdfResult GetPdf() { return new PdfResult(); } public ActionResult About() { return View(); } } } |
O método criado retorna um PDF;
Definindo a View
Com a nossa nova Action declarada, podemos tratar da visualização e para isso vamos simplesmente criar um link para a Action que irá gerar um PDF para nós.
Para definir a visualização vamos aproveitar o arquivo Index.aspx existente na pasta Views->Home e alterar o seu conteúdo conforme abaixo:
<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage" %> <asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server"> Home Page </asp:Content> <asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server"> <h2><%: ViewBag.Message %></h2> <p> Clique aqui <%= Html.ActionLink("Super DVD .NET","GetPdf", "Home") %> para obter o arquivo PDF! </p> </asp:Content> |
Estamos usando um ActionLink para criar um link que chama o método GetPdf o qual irá gerar o arquivo PDF e exibir no navegador:
Executando o projeto iremos obter o resultado abaixo onde vemos a imagem exibida na página:
Clicando no link - Super DVD .NET - o arquivo PDF será gerado e exibido conforme figura a seguir:
É claro que você pode digitar na url o comando /Home/GetPdf para obter o mesmo resultado.
Pegue o projeto completo aqui: Gerando_PDF.zip
Gál 5:22
Mas o fruto do Espírito é: o amor, o gozo, a paz, a longanimidade, a benignidade, a bondade, a fidelidade.Referências:
ASP .NET MVC - Compreendendo Models, Views e Controllers ...