USO DE IRONPDF

Crear PDF en C# a partir de un archivo HTML

Jordi Bardia
Jordi Bardia
24 de enero, 2022
Actualizado 20 de enero, 2024
Compartir:

IronPDF convierte documentos HTML a PDF mediante programación.

Cómo crear un PDF en C# - Ejemplo de HTML a PDF

Un ejemplo simple de esta técnica se puede descargar y ver como un ejemplo de PDF.

El código fuente de todo este artículo está disponible para C# como un Descarga del Código Fuente del Proyecto C# HTML a PDF.

El siguiente tutorial te guiará a través del proceso de usar IronPDF como un Generador de PDF en C#. Cubre lo básico así como muchos temas avanzados de C# PDF.

Tutorial de HTML a PDF

Esta demostración le muestra ejemplos de cómo utilizar IronPdf. Solicitar demostraciones adicionales de casos de uso a Iron Software.

La demostración consiste en ejemplos de Hello World, RenderHtmlAsPdf y RenderUrlAsPdf. Todos los ejemplos se encuentran en los proyectos correspondientes de la solución IronPDF Demo.

Paso 1: Instalación

Puedes instalar IronPdf a través de NuGet. El nombre del paquete es IronPDF NuGet Package.

O puede utilizar la Descarga Directa de la Biblioteca.

Paso 2: Hola Mundo

Una vez que tenga IronPDF instalado y referenciado en su proyecto, puede empezar a utilizarlo inmediatamente escribiendo un par de cadenas:

var ChromePdfRenderer = new ChromePdfRenderer();  // new instance of ChromePdfRenderer
var ChromePdfRenderer = new ChromePdfRenderer();  // new instance of ChromePdfRenderer
Dim ChromePdfRenderer As New ChromePdfRenderer() ' new instance of ChromePdfRenderer
$vbLabelText   $csharpLabel

entonces si necesitas convertir HTML en PDF

// html to turn into pdf
var html = @"<h1>Hello World!</h1><br><p>This is IronPdf.</p>";
// turn html to pdf
using var pdf = ChromePdfRenderer.RenderHtmlAsPdf(html);
// save resulting pdf into file
pdf.SaveAs(Path.Combine(Directory.GetCurrentDirectory(), "ChromePdfRenderer.Pdf"));
// html to turn into pdf
var html = @"<h1>Hello World!</h1><br><p>This is IronPdf.</p>";
// turn html to pdf
using var pdf = ChromePdfRenderer.RenderHtmlAsPdf(html);
// save resulting pdf into file
pdf.SaveAs(Path.Combine(Directory.GetCurrentDirectory(), "ChromePdfRenderer.Pdf"));
' html to turn into pdf
Dim html = "<h1>Hello World!</h1><br><p>This is IronPdf.</p>"
' turn html to pdf
Dim pdf = ChromePdfRenderer.RenderHtmlAsPdf(html)
' save resulting pdf into file
pdf.SaveAs(Path.Combine(Directory.GetCurrentDirectory(), "ChromePdfRenderer.Pdf"))
$vbLabelText   $csharpLabel

o si desea convertir una página web en un archivo PDF

// uri of the page to turn into pdf
var uri = new Uri("http://www.google.com/ncr");
// turn page into pdf
pdf = ChromePdfRenderer.RenderUrlAsPdf(uri);
// save resulting pdf into file
pdf.SaveAs(Path.Combine(Directory.GetCurrentDirectory(), "UrlToPdf.Pdf"));
// uri of the page to turn into pdf
var uri = new Uri("http://www.google.com/ncr");
// turn page into pdf
pdf = ChromePdfRenderer.RenderUrlAsPdf(uri);
// save resulting pdf into file
pdf.SaveAs(Path.Combine(Directory.GetCurrentDirectory(), "UrlToPdf.Pdf"));
' uri of the page to turn into pdf
Dim uri As New Uri("http://www.google.com/ncr")
' turn page into pdf
pdf = ChromePdfRenderer.RenderUrlAsPdf(uri)
' save resulting pdf into file
pdf.SaveAs(Path.Combine(Directory.GetCurrentDirectory(), "UrlToPdf.Pdf"))
$vbLabelText   $csharpLabel

¡Y eso es todo!

Los resultados correspondientes son:

Crear PDF en C# desde un archivo HTML, Figura 1: El resultado de convertir HTML en PDF

El resultado de convertir HTML en PDF**

Crear PDF en C# desde archivo HTML, Figura 2: El resultado de convertir una página web en un PDF

El resultado de convertir una página web en un PDF

El ejemplo de código se encuentra en el proyecto IronPDFDemo.HelloWorld.

Paso 3: RenderHtmlAsPdf

Ejemplo 1

Para evaluar un ejemplo más real, imagine una factura HTML que debe convertirse en PDF. Aquí está el código de cómo hacerlo.

Nota: Puede encontrar el HTML de la factura en el proyecto IronPDFDemo.DemoWebSite (~/Static/TestInvoice1.html). Tenga en cuenta que la factura tiene CSS personalizado para el tipo de medio "print".

La factura de origen tiene este aspecto en el navegador:

Crear PDF en C# a partir de archivo HTML, Figura 4:


Para convertir esto en un archivo PDF, se utilizan códigos similares a los del ejemplo HelloWorld anterior, con la diferencia del archivo HTML de origen.

// read html from file
var html = File.ReadAllText(Path.Combine(Directory.GetCurrentDirectory(), "TestInvoice1.html"));
var ChromePdfRenderer = new ChromePdfRenderer();
using var pdf = ChromePdfRenderer.RenderHtmlAsPdf(html);
pdf.SaveAs(Path.Combine(Directory.GetCurrentDirectory(), "ChromePdfRendererExample1.Pdf"));
// read html from file
var html = File.ReadAllText(Path.Combine(Directory.GetCurrentDirectory(), "TestInvoice1.html"));
var ChromePdfRenderer = new ChromePdfRenderer();
using var pdf = ChromePdfRenderer.RenderHtmlAsPdf(html);
pdf.SaveAs(Path.Combine(Directory.GetCurrentDirectory(), "ChromePdfRendererExample1.Pdf"));
' read html from file
Dim html = File.ReadAllText(Path.Combine(Directory.GetCurrentDirectory(), "TestInvoice1.html"))
Dim ChromePdfRenderer As New ChromePdfRenderer()
Dim pdf = ChromePdfRenderer.RenderHtmlAsPdf(html)
pdf.SaveAs(Path.Combine(Directory.GetCurrentDirectory(), "ChromePdfRendererExample1.Pdf"))
$vbLabelText   $csharpLabel

El resultado es:

Crear PDF en C# desde archivo HTML, Figura 5: Generar un archivo PDF desde HTML

Generar un archivo PDF desde HTML

¡Se ve genial! El ejemplo de código se encuentra en el proyecto IronPDFDemo.RenderHtmlAdPdfDemo.

También puede ver esta pregunta en Cómo usar documentos HTML o cadenas con matrices de bytes en IronPDF

Ejemplo 2

Esta sección ayudará a personalizar el PDF resultante del Ejemplo 1. Por ejemplo, añadirá márgenes personalizados, una cabecera con el título del documento, un pie de página con la fecha de creación y los números de página, y algo de CSS personalizado para el tipo de medio "print" que tiene una factura estándar. Para hacer esto, se inicializa una instancia de ChromePdfRenderOptions y se pasa al constructor ChromePdfRenderer.

var pdfRenderingOptions= new ChromePdfRenderOptions()
{
    MarginTop = 50,
    MarginBottom = 50,
    TextHeader = new TextHeaderFooter()
    {
        CenterText = "{pdf-title}",
        DrawDividerLine = true,
        FontSize = 16
    },
    TextFooter = new TextHeaderFooter()
    {
        LeftText = "{date} {time}",
        RightText = "Page {page} of {total-pages}",
        DrawDividerLine = true,
        FontSize = 14
    },
    CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print
};
var chromePdfRenderer = new ChromePdfRenderer(pdfRenderingOptions);
var pdfRenderingOptions= new ChromePdfRenderOptions()
{
    MarginTop = 50,
    MarginBottom = 50,
    TextHeader = new TextHeaderFooter()
    {
        CenterText = "{pdf-title}",
        DrawDividerLine = true,
        FontSize = 16
    },
    TextFooter = new TextHeaderFooter()
    {
        LeftText = "{date} {time}",
        RightText = "Page {page} of {total-pages}",
        DrawDividerLine = true,
        FontSize = 14
    },
    CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print
};
var chromePdfRenderer = new ChromePdfRenderer(pdfRenderingOptions);
Dim pdfRenderingOptions= New ChromePdfRenderOptions() With {
	.MarginTop = 50,
	.MarginBottom = 50,
	.TextHeader = New TextHeaderFooter() With {
		.CenterText = "{pdf-title}",
		.DrawDividerLine = True,
		.FontSize = 16
	},
	.TextFooter = New TextHeaderFooter() With {
		.LeftText = "{date} {time}",
		.RightText = "Page {page} of {total-pages}",
		.DrawDividerLine = True,
		.FontSize = 14
	},
	.CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print
}
Dim chromePdfRenderer As New ChromePdfRenderer(pdfRenderingOptions)
$vbLabelText   $csharpLabel

Consejo: En lugar de pasar opciones como parámetro en el constructor, puedes establecer el campo correspondiente para una instancia de ChromePdfRenderer:

var chromePdfRenderer = new ChromePdfRenderer();
chromePdfRenderer.RenderingOptions = pdfRenderingOptions;
var chromePdfRenderer = new ChromePdfRenderer();
chromePdfRenderer.RenderingOptions = pdfRenderingOptions;
Dim chromePdfRenderer As New ChromePdfRenderer()
chromePdfRenderer.RenderingOptions = pdfRenderingOptions
$vbLabelText   $csharpLabel

Nota: Las funciones de encabezado y pie de página tienen funcionalidad de fusión, lo que significa que todos los campos de fusión ({page}, {total-pages}, {url}, {date}, {time}, {html-title}, {pdf-title}) pueden ser rellenados con los datos correspondientes.

El resto del código es el mismo que en el ejemplo 1. El resultado es:

Crear PDF en C# desde archivo HTML, Figura 6: Generar una factura con encabezado y pie de página

Generar una factura con encabezado y pie de página

Los márgenes personalizados, encabezados, pies de página y CSS para el tipo de medio "print" ya están en su sitio. El ejemplo de código se encuentra en el proyecto IronPDFDemo.RenderHtmlAdPdfDemo. Pueden encontrarse más configuraciones en la referencia de la API de IronPDF.

Paso 4: RenderUrlAsPdf

Puesta en marcha

Para ejecutar los ejemplos de esta sección es necesario alojar el IronPDFDemo.DemoWebSite localmente. Para hacerlo en IIS Express:

  1. Ir a DemoWebSite

  2. Haga clic con el botón derecho del ratón > Establecer como proyecto de inicio

  3. Iniciar sin depuración (Ctrl+F5)

  4. Navega a tu {baseurl}/Static/TestInvoice1.html para asegurarte de que está funcionando. Esta es la URL http://localhost:51169/Static/TestInvoice1.html (será la misma para usted si no cambia la configuración correspondiente del proyecto).

Ejemplo 1

En esta sección, la factura alojada DemoWebSite se convierte en un PDF utilizando el mismo código que en el ejemplo HelloWorld. La diferencia radica en la URL alojada:

var uri = new Uri("http://localhost:51169/Static/TestInvoice1.html");
var urlToPdf = new ChromePdfRenderer();
using var pdf = urlToPdf.RenderUrlAsPdf(uri);
pdf.SaveAs(Path.Combine(Directory.GetCurrentDirectory(), "UrlToPdfExample1.Pdf"));
var uri = new Uri("http://localhost:51169/Static/TestInvoice1.html");
var urlToPdf = new ChromePdfRenderer();
using var pdf = urlToPdf.RenderUrlAsPdf(uri);
pdf.SaveAs(Path.Combine(Directory.GetCurrentDirectory(), "UrlToPdfExample1.Pdf"));
Dim uri As New Uri("http://localhost:51169/Static/TestInvoice1.html")
Dim urlToPdf = New ChromePdfRenderer()
Dim pdf = urlToPdf.RenderUrlAsPdf(uri)
pdf.SaveAs(Path.Combine(Directory.GetCurrentDirectory(), "UrlToPdfExample1.Pdf"))
$vbLabelText   $csharpLabel

El resultado es:

Crear PDF en C# desde un archivo HTML, Figura 7: Generar un sitio web alojado en PDF

Generar un sitio web alojado en un PDF

Es genial y tiene el aspecto esperado. Por favor encuentre el ejemplo de código dentro del proyecto IronPDFDemo.RenderUrlAsPdfDemo.

Ejemplo 2

Muchos sitios web suelen estar protegidos por un método de autenticación. Esta sección utiliza un nombre de usuario y una contraseña proporcionados durante el proceso de representación de un archivo PDF con algunas personalizaciones: márgenes personalizados, una cabecera con el título del documento, un pie de página con la fecha de creación y las páginas, y CSS personalizado para el tipo de medio "print". La URL para la factura es http://localhost:51169/Invoice.

Acceder a http://localhost:51169/Invoice resulta en el formulario "Se requiere autenticación":

Crear PDF en C# desde archivo HTML, Figura 8: Formulario de autenticación requerida

Formulario de autenticación requerida

Nota: Las credenciales son "testUser"/"testPassword".

¿Cómo evitar la autenticación? Al configurar HttpLoginCredentials:

var uri = new Uri("http://localhost:51169/Invoice");
var urlToPdf = new ChromePdfRenderer
{
    PrintOptions = new ChromePdfRenderer()
    {
        MarginTop = 50,
        MarginBottom = 50,
        TextHeader = new TextHeaderFooter()
        {
            CenterText = "{pdf-title}",
            DrawDividerLine = true,
            FontSize = 16
        },
        TextFooter = new TextHeaderFooter()
        {
            LeftText = "{date} {time}",
            RightText = "Page {page} of {total-pages}",
            DrawDividerLine = true,
            FontSize = 14
        },
        CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print
    },
    // setting login credentials to bypass basic authentication
    LoginCredentials = new HttpLoginCredentials()
    {
        NetworkUsername = "testUser",
        NetworkPassword = "testPassword"
    }
};
using var pdf = urlToPdf.RenderUrlAsPdf(uri);
pdf.SaveAs(Path.Combine(Directory.GetCurrentDirectory(), "UrlToPdfExample2.Pdf"));
var uri = new Uri("http://localhost:51169/Invoice");
var urlToPdf = new ChromePdfRenderer
{
    PrintOptions = new ChromePdfRenderer()
    {
        MarginTop = 50,
        MarginBottom = 50,
        TextHeader = new TextHeaderFooter()
        {
            CenterText = "{pdf-title}",
            DrawDividerLine = true,
            FontSize = 16
        },
        TextFooter = new TextHeaderFooter()
        {
            LeftText = "{date} {time}",
            RightText = "Page {page} of {total-pages}",
            DrawDividerLine = true,
            FontSize = 14
        },
        CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print
    },
    // setting login credentials to bypass basic authentication
    LoginCredentials = new HttpLoginCredentials()
    {
        NetworkUsername = "testUser",
        NetworkPassword = "testPassword"
    }
};
using var pdf = urlToPdf.RenderUrlAsPdf(uri);
pdf.SaveAs(Path.Combine(Directory.GetCurrentDirectory(), "UrlToPdfExample2.Pdf"));
Dim uri As New Uri("http://localhost:51169/Invoice")
Dim urlToPdf = New ChromePdfRenderer With {
	.PrintOptions = New ChromePdfRenderer() With {
		.MarginTop = 50,
		.MarginBottom = 50,
		.TextHeader = New TextHeaderFooter() With {
			.CenterText = "{pdf-title}",
			.DrawDividerLine = True,
			.FontSize = 16
		},
		.TextFooter = New TextHeaderFooter() With {
			.LeftText = "{date} {time}",
			.RightText = "Page {page} of {total-pages}",
			.DrawDividerLine = True,
			.FontSize = 14
		},
		.CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print
	},
	.LoginCredentials = New HttpLoginCredentials() With {
		.NetworkUsername = "testUser",
		.NetworkPassword = "testPassword"
	}
}
Dim pdf = urlToPdf.RenderUrlAsPdf(uri)
pdf.SaveAs(Path.Combine(Directory.GetCurrentDirectory(), "UrlToPdfExample2.Pdf"))
$vbLabelText   $csharpLabel

Nota: Se utiliza la misma personalización que para el ejemplo ChromePdfRenderer Example2.

El resultado es:

Crear PDF en C# desde archivo HTML, Figura 9: Generar un sitio HTML con credenciales a un archivo PDF

Generar un sitio HTML con credenciales para un archivo PDF

Todo está en su sitio. Encontrará un ejemplo de código en el proyecto IronPDFDemo.RenderUrlAsPdfDemo. Si te estás preguntando cómo sería el resultado sin HttpLoginCredentials, aquí lo tienes:

Crear PDF en C# desde archivo HTML, Figura 10: Generar un archivo PDF vacío sin credenciales

Generar un archivo PDF vacío sin credenciales

También vea el tutorial de .NET HTML a PDF de Jean.

Además, IronPDF también puede interactuar con PDF de diferentes maneras:

Jordi Bardia
Ingeniero de software
Jordi es más competente en Python, C# y C++, cuando no está aprovechando sus habilidades en Iron Software; está programando juegos. Compartiendo responsabilidades en las pruebas de productos, el desarrollo de productos y la investigación, Jordi añade un inmenso valor a la mejora continua de los productos. La variada experiencia le mantiene desafiado y comprometido, y dice que es uno de sus aspectos favoritos de trabajar con Iron Software. Jordi creció en Miami, Florida, y estudió Informática y Estadística en la Universidad de Florida.
< ANTERIOR
Generación de archivos PDF en C#
SIGUIENTE >
Cómo ver archivos PDF en ASP.NET utilizando C# e IronPDF