Cómo convertir páginas Razor a PDFs en ASP .NET Core Web App

Cómo convertir Razor Pages a PDF en ASP.NET Core C# App

This article was translated from English: Does it need improvement?
Translated
View the article in English

IronPDF permite la conversión fluida de Razor Pages (.cshtml files) a documentos PDF en aplicaciones ASP.NET Core usando el método RenderRazorToPdf, simplificando la generación de PDF a partir de contenido web con soporte completo para C# y renderizado HTML.

Una Razor Page es un archivo con una extensión .cshtml que combina C# y HTML para generar contenido web. En ASP.NET Core, las Razor Pages son una forma más sencilla de organizar el código de las aplicaciones web, por lo que resultan ideales para páginas sencillas de solo lectura o que realizan entradas de datos sencillas.

Una Aplicación Web ASP.NET Core es una aplicación web construida utilizando ASP.NET Core, un marco multiplataforma para desarrollar aplicaciones web modernas.

IronPDF simplifica el proceso de crear archivos PDF a partir de Páginas Razor dentro de un proyecto de Aplicación Web ASP.NET Core. Esto facilita la generación de PDF en ASP.NET Core Web Apps.

Inicio rápido: Convierta Razor Pages a PDF en segundos

Convierta sus Razor Pages en PDF de alta calidad en una aplicación ASP.NET Core. Al usar el método RenderRazorToPdf, puedes transformar archivos CSHTML en documentos PDF, optimizando tu flujo de trabajo y mejorando la distribución de documentos. Esta guía le guiará por los sencillos pasos necesarios para conseguirlo en cuestión de minutos.

  1. Instala IronPDF con el Administrador de Paquetes NuGet

    PM > Install-Package IronPdf
  2. Copie y ejecute este fragmento de código.

    // Install-Package IronPdf.Extensions.Razor
    var pdf = new IronPdf.ChromePdfRenderer().RenderRazorToPdf("Views/Home/Index.cshtml");
  3. Despliegue para probar en su entorno real

    Comienza a usar IronPDF en tu proyecto hoy mismo con una prueba gratuita

    arrow pointer

Introducción

Razor Pages ofrece una forma potente e intuitiva de crear contenido web dinámico en aplicaciones ASP.NET Core. Cuando se combinan con las capacidades de renderizado de IronPDF, los desarrolladores pueden crear documentos PDF profesionales directamente a partir de su contenido web. Este enfoque elimina la compleja lógica de generación de PDF y le permite utilizar sus conocimientos existentes de HTML y CSS.

La integración entre IronPDF y Razor Pages es especialmente valiosa para generar informes, facturas, certificados y cualquier otro documento que requiera una presentación dinámica de los datos. Al utilizar la misma sintaxis de Razor con la que ya está familiarizado, puede mantener la coherencia entre las vistas web y las salidas PDF.

En España, los ISVs que desarrollan soluciones de facturación electrónica conforme a VeriFactu o portales de envío a FACe adoptan habitualmente ASP.NET Core con Razor Pages como capa de presentación. IronPDF permite generar el PDF de cortesía adjunto al XML Facturae directamente desde plantillas Razor, integrando los campos obligatorios exigidos por la AEAT (NIF, CIF, base imponible, tipo IVA, número de serie) sin modificar la lógica de negocio existente.

¿Qué paquetes NuGet necesito para la conversión de Razor a PDF?

El paquete IronPdf.Extensions.Razor es una extensión del paquete principal IronPdf. Tanto los paquetes IronPdf.Extensions.Razor como IronPdf son necesarios para renderizar Razor Pages a documentos PDF en una aplicación web ASP.NET Core. Para obtener instrucciones de instalación detalladas, visita nuestra guía de visión general de instalación.

# Command to install IronPdf.Extensions.Razor package using NuGet Package Manager
Install-Package IronPdf.Extensions.Razor
# Command to install IronPdf.Extensions.Razor package using NuGet Package Manager
Install-Package IronPdf.Extensions.Razor
SHELL
Biblioteca C# NuGet para PDF

Instalar con NuGet

Install-Package IronPdf.Extensions.Razor

¿Cómo convierto páginas Razor a PDF en ASP.NET Core?

Necesitará un proyecto de aplicación web ASP.NET Core para convertir Razor Pages en archivos PDF. El proceso implica crear un modelo para tus datos, configurar una Razor Page para mostrar esos datos y luego usar el método RenderRazorToPdf de IronPDF para generar la salida PDF.

¿Por qué necesito una clase modelo para la generación de PDF?

Las clases modelo son la columna vertebral de la representación de datos en tus Razor Pages. Proporcionan una forma estructurada de pasar datos de la lógica del controlador a la vista, garantizando la seguridad de tipos y la capacidad de mantenimiento. Al generar PDF, estos modelos son aún más importantes, ya que definen la estructura exacta de los datos que aparecerán en el documento final.

  • Crea una nueva carpeta en el proyecto y nómbrala "Models".
  • Agrega una clase estándar de C# a la carpeta y nómbrala Person. Esta clase servirá como un modelo para datos individuales. Utiliza el siguiente fragmento de código:
:path=/static-assets/pdf/content-code-examples/how-to/cshtml-to-pdf-razor-model.cs
namespace RazorPageSample.Models
{
    public class Person
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string Title { get; set; }
        public string Description { get; set; }
    }
}
Namespace RazorPageSample.Models
	Public Class Person
		Public Property Id() As Integer
		Public Property Name() As String
		Public Property Title() As String
		Public Property Description() As String
	End Class
End Namespace
$vbLabelText   $csharpLabel

¿Cómo configuro una página Razor para la conversión de PDF?

Agrega una Razor Page vacía a la carpeta "Páginas" y nómbrala persons.cshtml.

  • Modifica el archivo recién creado Persons.cshtml usando el ejemplo de código proporcionado a continuación.

El código siguiente muestra la información en el navegador. Fíjate en cómo la sintaxis Razor permite una integración perfecta del código C# dentro de HTML, lo que lo hace perfecto para generar contenido dinámico que pueda convertirse a PDF:

@page
@using RazorPageSample.Models;
@model RazorPageSample.Pages.PersonsModel
@{
}

<table class="table">
    <tr>
        <th>Name</th>
        <th>Title</th>
        <th>Description</th>
    </tr>
    @foreach (var person in ViewData["personList"] as List<Person>)
    {
        <tr>
            <td>@person.Name</td>
            <td>@person.Title</td>
            <td>@person.Description</td>
        </tr>
    }
</table>

<form method="post">
    <button type="submit">Print</button>
</form>
@page
@using RazorPageSample.Models;
@model RazorPageSample.Pages.PersonsModel
@{
}

<table class="table">
    <tr>
        <th>Name</th>
        <th>Title</th>
        <th>Description</th>
    </tr>
    @foreach (var person in ViewData["personList"] as List<Person>)
    {
        <tr>
            <td>@person.Name</td>
            <td>@person.Title</td>
            <td>@person.Description</td>
        </tr>
    }
</table>

<form method="post">
    <button type="submit">Print</button>
</form>
HTML

Renderizar páginas Razor a PDF

A continuación, el código a continuación primero instancia la clase ChromePdfRenderer. Pasar this al método RenderRazorToPdf es suficiente para convertir esta Razor Page en un documento PDF.

Tiene acceso completo a las funciones disponibles en RenderingOptions. Estas funciones incluyen la capacidad de aplicar números de página al PDF generado, establecer margenes personalizados y añadir texto personalizado, así como encabezados y pies de página HTML. También puede configurar metadatos para sus PDF con el fin de garantizar la correcta identificación y búsqueda de documentos.

  • Abre el desplegable para el archivo Persons.cshtml para ver el archivo Persons.cshtml.cs.
  • Modifica el Persons.cshtml.cs con el código a continuación.
using IronPdf.Razor;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using RazorPageSample.Models;

namespace RazorPageSample.Pages
{
    public class PersonsModel : PageModel
    {
        [BindProperty(SupportsGet = true)]
        public List<Person> Persons { get; set; }

        // Handle GET request to load initial data
        public void OnGet()
        {
            Persons = new List<Person>
            {
                new Person { Name = "Alice", Title = "Mrs.", Description = "Software Engineer" },
                new Person { Name = "Bob", Title = "Mr.", Description = "Software Engineer" },
                new Person { Name = "Charlie", Title = "Mr.", Description = "Software Engineer" }
            };

            ViewData["personList"] = Persons;
        }

        // Handle POST request to convert Razor page to PDF
        public IActionResult OnPost()
        {
            Persons = new List<Person>
            {
                new Person { Name = "Alice", Title = "Mrs.", Description = "Software Engineer" },
                new Person { Name = "Bob", Title = "Mr.", Description = "Software Engineer" },
                new Person { Name = "Charlie", Title = "Mr.", Description = "Software Engineer" }
            };

            ViewData["personList"] = Persons;

            ChromePdfRenderer renderer = new ChromePdfRenderer();

            // Render Razor Page to PDF document
            PdfDocument pdf = renderer.RenderRazorToPdf(this);

            // Return the generated PDF file with appropriate content headers
            Response.Headers.Add("Content-Disposition", "inline");
            return File(pdf.BinaryData, "application/pdf", "razorPageToPdf.pdf");

            // Optionally view the output PDF in browser (uncomment below line if needed)
            // return File(pdf.BinaryData, "application/pdf");
        }
    }
}
using IronPdf.Razor;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using RazorPageSample.Models;

namespace RazorPageSample.Pages
{
    public class PersonsModel : PageModel
    {
        [BindProperty(SupportsGet = true)]
        public List<Person> Persons { get; set; }

        // Handle GET request to load initial data
        public void OnGet()
        {
            Persons = new List<Person>
            {
                new Person { Name = "Alice", Title = "Mrs.", Description = "Software Engineer" },
                new Person { Name = "Bob", Title = "Mr.", Description = "Software Engineer" },
                new Person { Name = "Charlie", Title = "Mr.", Description = "Software Engineer" }
            };

            ViewData["personList"] = Persons;
        }

        // Handle POST request to convert Razor page to PDF
        public IActionResult OnPost()
        {
            Persons = new List<Person>
            {
                new Person { Name = "Alice", Title = "Mrs.", Description = "Software Engineer" },
                new Person { Name = "Bob", Title = "Mr.", Description = "Software Engineer" },
                new Person { Name = "Charlie", Title = "Mr.", Description = "Software Engineer" }
            };

            ViewData["personList"] = Persons;

            ChromePdfRenderer renderer = new ChromePdfRenderer();

            // Render Razor Page to PDF document
            PdfDocument pdf = renderer.RenderRazorToPdf(this);

            // Return the generated PDF file with appropriate content headers
            Response.Headers.Add("Content-Disposition", "inline");
            return File(pdf.BinaryData, "application/pdf", "razorPageToPdf.pdf");

            // Optionally view the output PDF in browser (uncomment below line if needed)
            // return File(pdf.BinaryData, "application/pdf");
        }
    }
}
Imports IronPdf.Razor
Imports Microsoft.AspNetCore.Mvc
Imports Microsoft.AspNetCore.Mvc.RazorPages
Imports RazorPageSample.Models

Namespace RazorPageSample.Pages
	Public Class PersonsModel
		Inherits PageModel

		<BindProperty(SupportsGet := True)>
		Public Property Persons() As List(Of Person)

		' Handle GET request to load initial data
		Public Sub OnGet()
			Persons = New List(Of Person) From {
				New Person With {
					.Name = "Alice",
					.Title = "Mrs.",
					.Description = "Software Engineer"
				},
				New Person With {
					.Name = "Bob",
					.Title = "Mr.",
					.Description = "Software Engineer"
				},
				New Person With {
					.Name = "Charlie",
					.Title = "Mr.",
					.Description = "Software Engineer"
				}
			}

			ViewData("personList") = Persons
		End Sub

		' Handle POST request to convert Razor page to PDF
		Public Function OnPost() As IActionResult
			Persons = New List(Of Person) From {
				New Person With {
					.Name = "Alice",
					.Title = "Mrs.",
					.Description = "Software Engineer"
				},
				New Person With {
					.Name = "Bob",
					.Title = "Mr.",
					.Description = "Software Engineer"
				},
				New Person With {
					.Name = "Charlie",
					.Title = "Mr.",
					.Description = "Software Engineer"
				}
			}

			ViewData("personList") = Persons

			Dim renderer As New ChromePdfRenderer()

			' Render Razor Page to PDF document
			Dim pdf As PdfDocument = renderer.RenderRazorToPdf(Me)

			' Return the generated PDF file with appropriate content headers
			Response.Headers.Add("Content-Disposition", "inline")
			Return File(pdf.BinaryData, "application/pdf", "razorPageToPdf.pdf")

			' Optionally view the output PDF in browser (uncomment below line if needed)
			' return File(pdf.BinaryData, "application/pdf");
		End Function
	End Class
End Namespace
$vbLabelText   $csharpLabel

El método RenderRazorToPdf devuelve un objeto PdfDocument que puede someterse a procesamiento y edición adicionales. Puedes exportar el PDF como PDFA o PDFUA, aplicar una firma digital al documento PDF renderizado, o fusionar y dividir documentos PDF. El método también permite rotar páginas, añadir anotaciones o marcadores y estampar marcas de agua personalizadas en el PDF.

Para mejorar la gestión de documentos, también puede comprimir los PDF para reducir el tamaño del archivo sin comprometer la calidad. Esto es especialmente útil cuando se trata de informes de gran tamaño o cuando el ancho de banda es un problema. Además, las amplias capacidades de edición que ofrece IronPDF están documentadas en nuestro completo tutorial de edición de PDF.

¿Cómo añado navegación a la página de generación de PDF?

La navegación es crucial para la experiencia del usuario en su aplicación ASP.NET Core. Al integrar la página de generación de PDF en la navegación principal, los usuarios pueden acceder fácilmente a la funcionalidad sin tener que escribir manualmente las URL.

  • Navega a la carpeta Pages -> carpeta Shared -> _Layout.cshtml. Coloca el elemento de navegación "Person" después de "Home".

Asegúrate de que el valor para el atributo asp-page coincida exactamente con el nombre de nuestro archivo, que en este caso es Persons. De este modo se garantiza el correcto enrutamiento dentro de su aplicación ASP.NET Core:

<header>
    <nav class="navbar navbar-expand-sm navbar-toggleable-sm navbar-light bg-white border-bottom box-shadow mb-3">
        <div class="container">
            <a class="navbar-brand" asp-area="" asp-page="/Index">RazorPageSample</a>
            <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target=".navbar-collapse" aria-controls="navbarSupportedContent"
                    aria-expanded="false" aria-label="Toggle navigation">
                <span class="navbar-toggler-icon"></span>
            </button>
            <div class="navbar-collapse collapse d-sm-inline-flex justify-content-between">
                <ul class="navbar-nav flex-grow-1">
                    <li class="nav-item">
                        <a class="nav-link text-dark" asp-area="" asp-page="/Index">Home</a>
                    </li>
                    <li class="nav-item">
                        <a class="nav-link text-dark" asp-area="" asp-page="/Persons">Person</a>
                    </li>
                    <li class="nav-item">
                        <a class="nav-link text-dark" asp-area="" asp-page="/Privacy">Privacy</a>
                    </li>
                </ul>
            </div>
        </div>
    </nav>
</header>
<header>
    <nav class="navbar navbar-expand-sm navbar-toggleable-sm navbar-light bg-white border-bottom box-shadow mb-3">
        <div class="container">
            <a class="navbar-brand" asp-area="" asp-page="/Index">RazorPageSample</a>
            <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target=".navbar-collapse" aria-controls="navbarSupportedContent"
                    aria-expanded="false" aria-label="Toggle navigation">
                <span class="navbar-toggler-icon"></span>
            </button>
            <div class="navbar-collapse collapse d-sm-inline-flex justify-content-between">
                <ul class="navbar-nav flex-grow-1">
                    <li class="nav-item">
                        <a class="nav-link text-dark" asp-area="" asp-page="/Index">Home</a>
                    </li>
                    <li class="nav-item">
                        <a class="nav-link text-dark" asp-area="" asp-page="/Persons">Person</a>
                    </li>
                    <li class="nav-item">
                        <a class="nav-link text-dark" asp-area="" asp-page="/Privacy">Privacy</a>
                    </li>
                </ul>
            </div>
        </div>
    </nav>
</header>
HTML

¿Qué ocurre cuando ejecuto la generación de PDF?

Aquí se muestra cómo ejecutar el proyecto y generar un documento PDF. Cuando haga clic en el enlace de navegación "Persona", verá los datos mostrados en formato de tabla. Al hacer clic en el botón "Imprimir" se activa el proceso de generación de PDF, convirtiendo la vista actual de Razor Page en un documento PDF descargable.

Visual Studio showing C# PersonsModel class with OnGet and OnPostAsync methods for PDF generation using IronPDF

El PDF generado mantiene todo el estilo y el formato de su página Razor, lo que garantiza un aspecto coherente entre la vista web y la salida PDF. Este enfoque es especialmente útil para generar informes, facturas o cualquier documento que requiera datos de la base de datos o de la lógica empresarial de su aplicación.

¿Dónde puedo descargar un ejemplo completo de aplicación web ASP.NET Core?

Puedes descargar el código completo para esta guía como un archivo comprimido, que puedes abrir en Visual Studio como un proyecto de Aplicación Web ASP.NET Core.

Razor Pages e IronPDF en el ecosistema de facturación electrónica española

ASP.NET Core con Razor Pages es el stack tecnológico preferido por los ISVs españoles que desarrollan nuevas soluciones de facturación electrónica, dado que combina la productividad del ecosistema Microsoft con la modernidad de .NET Core. IronPDF se integra de forma nativa en este entorno para cubrir los requisitos de generación de PDF exigidos por la normativa española.

Generación de PDFs de facturas VeriFactu desde plantillas Razor

VeriFactu exige que cada factura electrónica tenga una representación gráfica en PDF que contenga el código QR de verificación y los datos obligatorios del registro de alta. Con IronPDF y RenderRazorToPdf, la plantilla Razor de factura puede incluir el QR generado, los datos fiscales del emisor y receptor con sus NIFs, la referencia al sistema de alta de la AEAT y el literal "VERI*FACTU" requerido cuando aplica. El PDF resultante puede firmarse con un certificado PAdES emitido por la FNMT antes de su archivado, cumpliendo así con los requisitos de trazabilidad.

Integración con FACe para facturas del sector público

Las empresas que facturan al sector público español a través de FACe (Punto de Acceso General de Facturas Electrónicas) deben generar archivos Facturae (XML) con un PDF de cortesía adjunto. En una aplicación ASP.NET Core con Razor Pages, la plantilla Razor puede estructurarse para generar el PDF de cortesía con los datos del modelo de factura, incluyendo el número de factura, la referencia del expediente de contratación pública y los importes detallados. RenderRazorToPdf convierte esta plantilla directamente en el PDF adjunto listo para su envío a FACe, con soporte para marcas de agua de borrador durante las pruebas y formato definitivo en producción.

Para más información sobre la configuración de plantillas Razor para documentos fiscales españoles, consulte la documentación de Encabezados y Pies de Página y Firmas Digitales de IronPDF.

Descargar el Proyecto Aplicación Web ASP.NET Core RazorPageSample.zip

Preguntas Frecuentes

¿Cómo puedo convertir Razor Pages a PDF en ASP.NET Core?

Puede convertir Razor Pages a PDF en ASP.NET Core utilizando el método RenderRazorToPdf de IronPDF. Simplemente instale el paquete IronPdf.Extensions.Razor y utilice ChromePdfRenderer para convertir sus archivos .cshtml directamente en documentos PDF.

¿Qué paquetes NuGet son necesarios para la conversión de Razor a PDF?

Necesita dos paquetes NuGet: IronPdf.Extensions.Razor (el paquete de extensión) e IronPDF (el paquete principal). Ambos paquetes son necesarios para convertir Razor Pages en documentos PDF en ASP.NET Core Web Apps.

¿Puedo utilizar datos dinámicos en mis Razor Pages al convertirlas a PDF?

Sí, IronPDF es totalmente compatible con datos dinámicos en Razor Pages. Puede utilizar código C#, vinculación de modelos y todas las funciones estándar de sintaxis de Razor al convertir a PDF, lo que lo hace ideal para generar informes, facturas y certificados con contenido dinámico.

¿Qué tipos de documentos puedo generar a partir de Razor Pages?

La conversión de Razor a PDF de IronPDF es perfecta para generar varios tipos de documentos, incluidos informes, facturas, certificados, recibos y cualquier otro documento que requiera una presentación dinámica de los datos, manteniendo el estilo HTML y CSS existente.

¿Con qué rapidez puedo implementar la conversión de Razor a PDF en mi proyecto?

Puede implementar la conversión de Razor a PDF en cuestión de minutos con IronPDF. El flujo de trabajo mínimo implica sólo 5 pasos: instalación de la biblioteca, adición de una clase modelo, creación de una página Razor, edición del archivo .cs para utilizar el método RenderRazorToPdf y ejecución de la aplicación.

¿La conversión mantiene mi estilo HTML y CSS?

Sí, IronPDF conserva el estilo HTML y CSS al convertir Razor Pages a PDF. Esto le permite mantener la coherencia entre sus vistas web y las salidas PDF utilizando el mismo estilo y diseño que ya ha creado.

¿Cómo genero el PDF de representación gráfica VeriFactu desde una Razor Page?

Con IronPDF y RenderRazorToPdf, su plantilla Razor de factura VeriFactu puede incluir el código QR de verificación, los datos fiscales obligatorios (NIF emisor/receptor, número de serie, fecha, importes) y el literal VERI*FACTU requerido. El PDF resultante puede firmarse con un certificado PAdES emitido por la FNMT antes de su archivado, cumpliendo los requisitos de trazabilidad de la AEAT.

¿Puedo usar Razor Pages con IronPDF para generar los PDFs de cortesía para FACe?

Sí. FACe acepta facturas Facturae (XML) con un PDF de cortesía adjunto. Usando RenderRazorToPdf con una plantilla Razor que contenga los datos del modelo de factura (referencia del expediente, importes detallados, datos del proveedor y comprador), puede generar el PDF adjunto listo para su envío a FACe sin necesidad de motores PDF adicionales en su aplicación ASP.NET Core.

Curtis Chau
Escritor Técnico

Curtis Chau tiene una licenciatura en Ciencias de la Computación (Carleton University) y se especializa en el desarrollo front-end con experiencia en Node.js, TypeScript, JavaScript y React. Apasionado por crear interfaces de usuario intuitivas y estéticamente agradables, disfruta trabajando con frameworks modernos y creando manuales bien ...

Leer más
Revisado por
Jeff Fritz
Jeffrey T. Fritz
Gerente Principal de Programas - Equipo de la Comunidad .NET
Jeff también es Gerente Principal de Programas para los equipos de .NET y Visual Studio. Es el productor ejecutivo de la serie de conferencias virtuales .NET Conf y anfitrión de 'Fritz and Friends', una transmisión en vivo para desarrolladores que se emite dos veces a la semana donde habla sobre tecnología y escribe código junto con la audiencia. Jeff escribe talleres, presentaciones, y planifica contenido para los eventos de desarrolladores más importantes de Microsoft, incluyendo Microsoft Build, Microsoft Ignite, .NET Conf y la Cumbre de Microsoft MVP.
¿Listo para empezar?
Nuget Descargas 19,014,616 | Versión: 2026.5 just released
Still Scrolling Icon

¿Aún desplazándote?

¿Quieres una prueba rápida? PM > Install-Package IronPdf
ejecutar una muestra Mira cómo tu HTML se convierte en PDF.