[Tips]Crear PDF con ASP.NET MVC y RazorPDF

Hola, hace poco escribí un articulo sobre una consulta recurrente de como crear PDF en ASP.NET, y es que es algo que utilizamos bastante en el día día. Ahora es la oportunidad de MVC, ya que también llegan varias preguntas de ello. Para esto vamos a utilizar un package de Nuget que se llama RazorPDF, que internamente utilizada iTextSharp, puedes ver documentación de esta librería acá: https://www.nuget.org/packages/RazorPDF

Ahora veamos un ejemplo simple paso a paso, relacionado con el ejemplo del articulo anterior, la idea es generar lo mismo, pero ahora con MVC, asi que vamos por parte.

Primero vamos a crear el proyecto MVC, voy a crear una aplicación básica:

image

Luego instalamos el paquete Nuget:

image

Si todo salió bien, veremos que se instalaron todas las dependencias:

image

La vista

image

 

Esta vista la he creado con el siguiente código, como no estoy usando un modelo tipado, no voy a utilizar los helpers para ese propósito, así que simplemente es un formulario, en donde indico cuales son los campos:

@{

    Layout = "~/Views/Shared/_Layout.cshtml";

}

<!DOCTYPE html>

<html>

<head>

    <title>RazorPDF Demo </title>

</head>

<body>

    <h2>Ejemplo de creación de PDF con RazorPDF </h2>

    <div>

        @using (Html.BeginForm("Ejemplo", "PDF",

           FormMethod.Post, new { id = "formulario" }))

        {

            <p>

                <label for="tx_nombre">Nombre</label>

                <input type="text" id="tx_nombre" name="tx_nombre" required />

            </p>

            <p>

                <label for="tx_apellido">Apellido</label>

                <input type="text" id="tx_apellido" name="tx_apellido" required />

            </p>

            <p>

                <label for="tx_edad">Edad</label>

                <input type="number" id="tx_edad" name="tx_edad" required />

            </p>

            <input type="submit" value="Generar PDF" />

          

        }

    </div>

</body>

</html>

El controlador

Ahora veremos el código, vamos a crear un controlador que se llame PDFController:

public class PDFController : Controller

{

   public ActionResult Index()

   {

      return View();

   }

    

[AcceptVerbs("POST")]

public object Ejemplo(string tx_nombre, string tx_apellido, string tx_edad)

  {

    var pdf = new RazorPDF.PdfResult(null, "EjemploPdf");

    pdf.ViewBag.Title = "Titulo del Reporte";

    pdf.ViewBag.Nombre = tx_nombre;

    pdf.ViewBag.Apellido = tx_apellido;

    pdf.ViewBag.Edad = tx_edad;

    return pdf;

  }

}

 

Como puedes ver, tenemos un controlador que recibe desde un formulario (POST) un parámetro nombre, apellido y edad, esto lo hice para que tengas la guía de cuando quieras crear un informe en pdf con parámetros de búsqueda. Se instancia un objeto PdfResult, el primero parámetro es el objeto que puedes pasarle como argumento como no estoy utilizando ninguna, queda en null, el segundo parámetro es el nombre de la vista que tiene el informe. Además Le asigno al viewbag de este PdfResult para luego mostrarlo en el informe y se retorna el objeto pdf.

Ahora corresponde revisar la vista EjemploPDF, que va  a contener la estructura del informe PDF.

Archivo EjeploPdf

Este código XML define la estructura del PDF a generar, como vez, agrego los datos desde el controlador mediante el objeto ViewBag, además podemos setear la fuente y agregar una imagen:

 

<itext creationdate="@DateTime.Now.ToString()" producer="RazorPDF">

<paragraph style="font-family: Helvetica; font-size: 18; font-style: italic;">

       <chunk red="255" green="0" blue="0">@ViewBag.Title</chunk>

</paragraph>

<paragraph>

    <chunk style="font-family:Times;font-weight:bold;">Fecha Reporte: </chunk>

    <chunk style="font-family:Times;">@DateTime.Now.ToString("MM/dd/yyyy")</chunk>

</paragraph>

<paragraph>

    <chunk style="font-family:Times;font-weight:bold;">Nombre: </chunk>

    <chunk style="font-family:Times;">@ViewBag.Nombre</chunk>

</paragraph>

<paragraph>

    <chunk style="font-family:Times;font-weight:bold;">Apellido: </chunk>

    <chunk style="font-family:Times;">@ViewBag.Apellido</chunk>

</paragraph>

<paragraph>

    <chunk style="font-family:Times;font-weight:bold;">Edad: </chunk>

    <chunk style="font-family:Times;">@ViewBag.Edad</chunk>

</paragraph>

<newline />

<image url="@Context.Server.MapPath("~/Content/imagen.jpg")"/>

<paragraph style="font-family: Helvetica; font-size: 18; font-style: italic;">

       <chunk red="255" green="0" blue="0">By @@Chalalo</chunk>

</paragraph>

</itext>

Ahora al momento de ejecutarlo, ingresar datos al formulario y luego presionar sobre el botón “Genera PDF”, logramos el siguiente PDF.

image

Como puedes ver, bastante sencillo y útil.
Nos vemos en un próximo post!
Saludos,
@chalalo

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *