USANDO IRON SUITE

Crear PDF en C# a partir de Archivo HTML

IronPDF convierte HTML a documentos PDF programáticamente.

Cómo crear un PDF en C#: ejemplo de HTML a PDF

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

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 te guía a través de ejemplos de cómo usar IronPdf. Solicitar demostraciones adicionales de casos de uso a Iron Software.

La demostración consiste en Hola Mundo, ejemplos de RenderHtmlAsPdf y RenderUrlAsPdf. Todos los ejemplos se pueden encontrar bajo los proyectos correspondientes en la solución IronPDF Demo.

Paso 1: Instalación

Puedes instalar IronPdf ya sea a través de NuGet. The package name is IronPDF NuGet Package.

Or you can use the Direct Library Download.

Paso 2: Hola mundo

Una vez que tienes IronPDF instalado y referenciado en tu proyecto, puedes comenzar a usarlo de inmediato escribiendo un par de cadenas:

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

Luego, si necesitas convertir HTML a PDF:

// Define HTML content to turn into PDF
var html = @"<h1>Hello World!</h1><br><p>This is IronPdf.</p>";

// Render the HTML string as a PDF
using var pdf = chromePdfRenderer.RenderHtmlAsPdf(html);

// Save the resulting PDF to a file
pdf.SaveAs(Path.Combine(Directory.GetCurrentDirectory(), "ChromePdfRenderer.Pdf"));
// Define HTML content to turn into PDF
var html = @"<h1>Hello World!</h1><br><p>This is IronPdf.</p>";

// Render the HTML string as a PDF
using var pdf = chromePdfRenderer.RenderHtmlAsPdf(html);

// Save the resulting PDF to a file
pdf.SaveAs(Path.Combine(Directory.GetCurrentDirectory(), "ChromePdfRenderer.Pdf"));
' Define HTML content to turn into PDF
Dim html = "<h1>Hello World!</h1><br><p>This is IronPdf.</p>"

' Render the HTML string as a PDF
Dim pdf = chromePdfRenderer.RenderHtmlAsPdf(html)

' Save the resulting PDF to a file
pdf.SaveAs(Path.Combine(Directory.GetCurrentDirectory(), "ChromePdfRenderer.Pdf"))
$vbLabelText   $csharpLabel

O si quieres 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");

// Render the webpage as a PDF
using var pdf = chromePdfRenderer.RenderUrlAsPdf(uri);

// Save the resulting PDF to a 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");

// Render the webpage as a PDF
using var pdf = chromePdfRenderer.RenderUrlAsPdf(uri);

// Save the resulting PDF to a 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")

' Render the webpage as a PDF
Dim pdf = chromePdfRenderer.RenderUrlAsPdf(uri)

' Save the resulting PDF to a file
pdf.SaveAs(Path.Combine(Directory.GetCurrentDirectory(), "UrlToPdf.Pdf"))
$vbLabelText   $csharpLabel

¡Y eso es todo! Los resultados correspondientes son:

Crear PDF en C# desde archivo HTML, Figura 1: El resultado de convertir HTML a PDF El resultado de convertir HTML a 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

Por favor, encuentra el ejemplo de código bajo el proyecto IronPDFDemo.HelloWorld.

Paso 3: RenderHtmlAsPdf

Ejemplo 1

Para evaluar un ejemplo más realista, imagina una factura HTML que necesita convertirse en un PDF. Aquí está el código de cómo hacer eso.

Nota: Puedes encontrar la factura HTML bajo el proyecto IronPDFDemo.DemoWebSite (~/Static/TestInvoice1.html). Por favor, ten en cuenta que la factura tiene CSS personalizado para el tipo de medio "print".

La factura original se ve así en el navegador:

Crear PDF en C# desde archivo HTML, Figura 4:


Para convertir esto en un archivo PDF, se utilizan códigos similares al ejemplo de HolaMundo anterior, siendo la diferencia el 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! Por favor, encuentra el ejemplo de código bajo el proyecto IronPDFDemo.RenderHtmlAdPdfDemo.

También consulta esta pregunta sobre Cómo usar documentos HTML o cadenas con arreglos 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, un encabezado con el título del documento, un pie de página con la fecha de creación y números de página y algo de CSS personalizado para el tipo de medio "print" que una factura estándar tiene. Para hacer esto, se inicializa una instancia de ChromePdfRenderOptions y se pasa al constructor de ChromePdfRenderer.

// Configure rendering options with margins, headers, and footers
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);
// Configure rendering options with margins, headers, and footers
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);
' Configure rendering options with margins, headers, and footers
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 características de encabezado y pie de página fusionan la funcionalidad, lo que significa que todos los campos de fusión ({page}, {total-pages}, {url}, {date}, {time}, {html-title}, {pdf-title}) se pueden poblar 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, encabezados, pies de página y CSS personalizados para el tipo de medio "print" están ahora en su lugar. Por favor, encuentra el ejemplo de código bajo el proyecto IronPDFDemo.RenderHtmlAdPdfDemo. Se pueden encontrar más configuraciones en la referencia API de IronPDF.

Paso 4: RenderUrlAsPdf

Configuración

Para ejecutar ejemplos de esta sección necesitas alojar IronPDFDemo.DemoWebSite localmente. Para hacer eso en IIS Express:

  1. Navega a DemoWebSite
  2. Haz clic derecho > Establecer como Proyecto de Inicio
  3. Inicia 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 ti si no cambias la configuración correspondiente del proyecto).

Ejemplo 1

En esta sección, la factura del DemoWebSite alojado se convierte en un PDF usando el mismo código que el ejemplo de HolaMundo. La diferencia reside en la URL alojada:

// URL of the hosted invoice webpage
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"));
// URL of the hosted invoice webpage
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"));
' URL of the hosted invoice webpage
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 archivo HTML, Figura 7: Generar un sitio web alojado en un PDF Generar un sitio web alojado en un PDF

Esto es genial y se ve como se esperaba. Por favor, encuentra el ejemplo de código dentro del proyecto IronPDFDemo.RenderUrlAsPdfDemo.

Ejemplo 2

Muchos sitios web a menudo están protegidos por un método de autenticación. Esta sección usa un nombre de usuario y contraseña proporcionados durante el proceso de renderización de un archivo PDF con alguna personalización: márgenes personalizados, un encabezado con el título del documento, un pie de página con la fecha de creación y páginas, y CSS personalizado para el tipo de medio "print". La URL para la factura está en http://localhost:51169/Invoice.

Acceder a http://localhost:51169/Invoice resulta en el formulario "Autenticación requerida":

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

Entonces, ¿cómo evitar la autenticación? Estableciendo HttpLoginCredentials:

// URL of the protected invoice webpage
var uri = new Uri("http://localhost:51169/Invoice");

// Configure renderer with login credentials to bypass authentication
var urlToPdf = new ChromePdfRenderer
{
    RenderingOptions = 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
    },

    // Set 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"));
// URL of the protected invoice webpage
var uri = new Uri("http://localhost:51169/Invoice");

// Configure renderer with login credentials to bypass authentication
var urlToPdf = new ChromePdfRenderer
{
    RenderingOptions = 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
    },

    // Set 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"));
' URL of the protected invoice webpage
Dim uri As New Uri("http://localhost:51169/Invoice")

' Configure renderer with login credentials to bypass authentication
Dim urlToPdf = New ChromePdfRenderer With {
	.RenderingOptions = 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
	},
	.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 Example2 de ChromePdfRenderer.

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 a un archivo PDF

Todo está en su lugar. Por favor, encuentra un ejemplo de código bajo el proyecto IronPDFDemo.RenderUrlAsPdfDemo. Si te preguntas cómo sería el resultado sin HttpLoginCredentials, aquí está:

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

Consulta también el Tutorial de .NET HTML a PDF de Jean

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