Cómo generar HTML a PDF con .NET en Azure

Cómo utilizar C# para HTML-to-PDF con IronPDF en Azure Function

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

IronPDF genera, manipula y lee documentos PDF en plataformas Azure, incluidos sitios web MVC y Azure Functions. Esta guía muestra cómo implementar la conversión de HTML a PDF en Azure Functions con la configuración y optimización adecuadas para entornos de producción.

Si estás ejecutando Azure Functions dentro de un contenedor Docker, por favor consulta este Tutorial de Azure Docker Linux en su lugar.

como-título:2(Inicio rápido: Conversión de HTML a PDF con IronPDF en Azure)

Comience a convertir HTML a PDF en sus aplicaciones Azure utilizando IronPDF. Esta guía rápida muestra cómo convertir una URL en un documento PDF utilizando los métodos de la API de IronPDF. Este ejemplo muestra la sencillez de IronPDF para integrar funciones PDF en soluciones Azure. Sigue el ejemplo para empezar a generar PDF sin perder el formato y poner en marcha tu proyecto Azure rápidamente.

Nuget IconEmpieza a crear PDF con NuGet ahora:

  1. Instalar IronPDF con el gestor de paquetes NuGet

    PM > Install-Package IronPdf

  2. Copie y ejecute este fragmento de código.

    var pdf = new IronPdf.ChromePdfRenderer()
        .RenderHtmlAsPdf("<h1>Hello Azure!</h1>")
        .SaveAs("output-azure.pdf");
  3. Despliegue para probar en su entorno real

    Empieza a utilizar IronPDF en tu proyecto hoy mismo con una prueba gratuita
    arrow pointer

Tutorial de cómo hacerlo

¿Cómo configuro mi proyecto?

¿Qué paquete IronPDF debo instalar?

El primer paso es instalar IronPDF usando NuGet:

Install-Package IronPdf

Alternativamente, instala manualmente el .dll usando el enlace de descarga directa de IronPDF para Azure.

Para opciones de instalación más avanzadas, consulte nuestra completa Guía de paquetes NuGet.

¿Qué opciones de Azure necesito configurar?

¿Qué nivel de alojamiento Azure debo elegir?

Azure Basic B1 es el nivel de alojamiento mínimo requerido para las necesidades de renderización. Si está creando un sistema de alto rendimiento, esto puede necesitar ser actualizado. El nivel B1 proporciona recursos suficientes para Chrome PDF Rendering Engine que impulsa la conversión de HTML a PDF de IronPDF.

AdvertenciaSi no se selecciona un tipo de plan de Plan de servicios de aplicaciones, IronPDF puede no renderizar los documentos PDF.

Formulario de creación de Azure Function App con la opción App service plan resaltada en el desplegable Plan Type

¿Por qué debo desmarcar la opción "Ejecutar desde archivo de paquete"

Al publicar tu aplicación Azure Functions, asegúrate de que Run from package file NO esté seleccionada. Esta opción crea una implementación de sólo lectura que impide que IronPDF extraiga las dependencias de tiempo de ejecución necesarias durante la ejecución.

El cuadro de diálogo de publicación de Azure Functions muestra la opción

¿Cómo se configura .NET 6?

Microsoft eliminó recientemente las bibliotecas de imágenes de .NET 6+, rompiendo muchas API heredadas. Por lo tanto, es necesario configurar su proyecto para permitir aún estas llamadas a API heredadas.

  1. En Linux, configure Installation.LinuxAndDockerDependenciesAutoConfig=true; para asegurarse de que libgdiplus está instalado en el equipo
  2. Añade lo siguiente al archivo .csproj para tu proyecto .NET 6:
    <GenerateRuntimeConfigurationFiles>true</GenerateRuntimeConfigurationFiles>
    <GenerateRuntimeConfigurationFiles>true</GenerateRuntimeConfigurationFiles>
    XML
  3. Crea un archivo en tu proyecto llamado runtimeconfig.template.json y complétalo con lo siguiente:

    {
      "configProperties": {
        "System.Drawing.EnableUnixSupport": true
      }
    }
  4. Finalmente, añade la siguiente línea al inicio de tu programa para habilitar el soporte de Unix para System.Drawing:
    System.AppContext.SetSwitch("System.Drawing.EnableUnixSupport", true);
    System.AppContext.SetSwitch("System.Drawing.EnableUnixSupport", true);
    $vbLabelText   $csharpLabel

¿Cuándo debo utilizar Docker en Azure?

Una forma de ganar control, acceso a fuentes SVG, y la capacidad de controlar el rendimiento en Azure es usar aplicaciones y funciones de IronPDF dentro de Contenedores Docker. Este enfoque proporciona un mejor control sobre el entorno de ejecución y elimina muchas limitaciones específicas de cada plataforma.

Tenemos un tutorial completo de IronPDF Azure Docker para instancias Linux y Windows, y se recomienda su lectura.

¿Cómo es el código de la función Azure?

Este ejemplo envía automáticamente entradas de registro al registrador Azure integrado (véase ILogger log). Para obtener información detallada sobre las configuraciones de registro, consulte nuestra Guía de registro personalizado.

[FunctionName("PrintPdf")]
public static async Task<IActionResult> Run(
    [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req,
    ILogger log, ExecutionContext context)
{
    log.LogInformation("Entered PrintPdf API function...");

    // Apply license key
    IronPdf.License.LicenseKey = "IRONPDF-MYLICENSE-KEY-1EF01";

    // Configure logging
    IronPdf.Logging.Logger.LoggingMode = IronPdf.Logging.Logger.LoggingModes.Custom;
    IronPdf.Logging.Logger.CustomLogger = log;
    IronPdf.Logging.Logger.EnableDebugging = false;

    // Configure IronPdf settings
    Installation.LinuxAndDockerDependenciesAutoConfig = false;
    Installation.ChromeGpuMode = IronPdf.Engines.Chrome.ChromeGpuModes.Disabled;

    try
    {
        log.LogInformation("About to render pdf...");

        // Create a renderer and render the URL as PDF
        ChromePdfRenderer renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderUrlAsPdf("https://www.google.com/");

        log.LogInformation("Finished rendering pdf...");

        // Return the rendered PDF as a file download
        return new FileContentResult(pdf.BinaryData, "application/pdf") { FileDownloadName = "google.pdf" };
    }
    catch (Exception e)
    {
        log.LogError(e, "Error while rendering pdf");
    }

    return new OkObjectResult("OK");
}
[FunctionName("PrintPdf")]
public static async Task<IActionResult> Run(
    [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req,
    ILogger log, ExecutionContext context)
{
    log.LogInformation("Entered PrintPdf API function...");

    // Apply license key
    IronPdf.License.LicenseKey = "IRONPDF-MYLICENSE-KEY-1EF01";

    // Configure logging
    IronPdf.Logging.Logger.LoggingMode = IronPdf.Logging.Logger.LoggingModes.Custom;
    IronPdf.Logging.Logger.CustomLogger = log;
    IronPdf.Logging.Logger.EnableDebugging = false;

    // Configure IronPdf settings
    Installation.LinuxAndDockerDependenciesAutoConfig = false;
    Installation.ChromeGpuMode = IronPdf.Engines.Chrome.ChromeGpuModes.Disabled;

    try
    {
        log.LogInformation("About to render pdf...");

        // Create a renderer and render the URL as PDF
        ChromePdfRenderer renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderUrlAsPdf("https://www.google.com/");

        log.LogInformation("Finished rendering pdf...");

        // Return the rendered PDF as a file download
        return new FileContentResult(pdf.BinaryData, "application/pdf") { FileDownloadName = "google.pdf" };
    }
    catch (Exception e)
    {
        log.LogError(e, "Error while rendering pdf");
    }

    return new OkObjectResult("OK");
}
$vbLabelText   $csharpLabel

Ejemplo avanzado de renderizado de cadenas HTML

Para situaciones más complejas que impliquen HTML personalizado con estilo CSS, puede utilizar las funciones HTML String to PDF:

[FunctionName("RenderHtmlWithCss")]
public static async Task<IActionResult> RenderHtmlWithCss(
    [HttpTrigger(AuthorizationLevel.Function, "post", Route = null)] HttpRequest req,
    ILogger log)
{
    log.LogInformation("Processing HTML to PDF request");

    // Read HTML content from request body
    string htmlContent = await new StreamReader(req.Body).ReadToEndAsync();

    // Configure renderer with custom options
    var renderer = new ChromePdfRenderer()
    {
        RenderingOptions = new ChromePdfRenderOptions()
        {
            MarginTop = 20,
            MarginBottom = 20,
            MarginLeft = 10,
            MarginRight = 10,
            CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print,
            PrintHtmlBackgrounds = true,
            CreatePdfFormsFromHtml = true
        }
    };

    try
    {
        // Add custom CSS
        string styledHtml = $@"
            <html>
            <head>
                <style>
                    body {{ font-family: Arial, sans-serif; padding: 20px; }}
                    h1 {{ color: #2c3e50; }}
                    .highlight {{ background-color: #f1c40f; padding: 5px; }}
                </style>
            </head>
            <body>
                {htmlContent}
            </body>
            </html>";

        var pdf = renderer.RenderHtmlAsPdf(styledHtml);

        return new FileContentResult(pdf.BinaryData, "application/pdf") 
        { 
            FileDownloadName = "styled-document.pdf" 
        };
    }
    catch (Exception ex)
    {
        log.LogError(ex, "Failed to render HTML to PDF");
        return new BadRequestObjectResult("Error processing HTML content");
    }
}
[FunctionName("RenderHtmlWithCss")]
public static async Task<IActionResult> RenderHtmlWithCss(
    [HttpTrigger(AuthorizationLevel.Function, "post", Route = null)] HttpRequest req,
    ILogger log)
{
    log.LogInformation("Processing HTML to PDF request");

    // Read HTML content from request body
    string htmlContent = await new StreamReader(req.Body).ReadToEndAsync();

    // Configure renderer with custom options
    var renderer = new ChromePdfRenderer()
    {
        RenderingOptions = new ChromePdfRenderOptions()
        {
            MarginTop = 20,
            MarginBottom = 20,
            MarginLeft = 10,
            MarginRight = 10,
            CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print,
            PrintHtmlBackgrounds = true,
            CreatePdfFormsFromHtml = true
        }
    };

    try
    {
        // Add custom CSS
        string styledHtml = $@"
            <html>
            <head>
                <style>
                    body {{ font-family: Arial, sans-serif; padding: 20px; }}
                    h1 {{ color: #2c3e50; }}
                    .highlight {{ background-color: #f1c40f; padding: 5px; }}
                </style>
            </head>
            <body>
                {htmlContent}
            </body>
            </html>";

        var pdf = renderer.RenderHtmlAsPdf(styledHtml);

        return new FileContentResult(pdf.BinaryData, "application/pdf") 
        { 
            FileDownloadName = "styled-document.pdf" 
        };
    }
    catch (Exception ex)
    {
        log.LogError(ex, "Failed to render HTML to PDF");
        return new BadRequestObjectResult("Error processing HTML content");
    }
}
$vbLabelText   $csharpLabel

Para gestionar licencias en sus Azure Functions, consulte nuestra documentación Using License Keys.

¿Cuáles son los problemas conocidos?

¿Por qué las fuentes SVG no se muestran en los planes de alojamiento compartido?

Una limitación es que la visión general de la plataforma de alojamiento Azure no soporta servidores cargando fuentes SVG, como las fuentes de Google, en sus niveles de aplicaciones web compartidas más baratos. Esto se debe a las restricciones de seguridad que impiden el acceso a objetos gráficos de Windows GDI+.

Recomendamos usar una guía de Contenedor Docker para Windows o Linux para IronPDF o tal vez un VPS en Azure para sortear este problema donde se requiere la mejor renderización de fuentes.

¿Por qué Azure Free Tier Hosting es lento?

Los niveles gratuitos y compartidos de Azure, y el plan de consumo, no son adecuados para la renderización de PDF. Recomendamos el plan de alojamiento B1 de Azure/plan Premium, que es el que usamos nosotros mismos. El proceso de HTML to PDF es un 'trabajo' significativo para cualquier computadora, similar a abrir y renderizar una página web en su propia máquina. Se utiliza un motor de navegador real, por lo tanto, necesitamos aprovisionar acorde y esperar tiempos de renderización similares a los de una máquina de escritorio de poder similar.

¿Cómo puedo depurar Azure Functions localmente?

Para el desarrollo y las pruebas locales, consulte nuestra guía sobre Debugging Azure Functions Project on Local Machine. Esto ayuda a identificar y resolver problemas antes de desplegar en Azure.

¿Dónde puedo encontrar los registros de Azure?

A la hora de solucionar problemas de generación de PDF, los registros de Azure son muy valiosos. Consulte nuestra guía Azure Log Files para obtener instrucciones sobre cómo acceder e interpretar los registros específicos de las operaciones de IronPDF.

¿Cómo puedo crear una solicitud de soporte técnico?

Para crear un ticket de solicitud, consulte la guía Cómo realizar una solicitud de soporte de ingeniería para IronPDF.

Mejores prácticas para la producción

  1. Utiliza siempre niveles de alojamiento adecuados - B1 o superior para un rendimiento fiable
  2. Configure el registro correctamente - Utilice Azure Application Insights para la supervisión de la producción
  3. Manejar excepciones con elegancia - Implementar lógica de reintento para fallos transitorios
  4. Optimizar el contenido HTML - Minimizar los recursos externos y utilizar imágenes codificadas en base64 cuando sea posible
  5. Prueba a fondo - Valida la generación de PDF localmente antes de la implementación en Azure
  6. Monitorizar el uso de recursos - Realizar un seguimiento del consumo de memoria y CPU para escalar adecuadamente

Preguntas Frecuentes

¿Cuál es el nivel mínimo de alojamiento Azure necesario para la generación de PDF?

IronPDF requiere el nivel B1 de Azure Basic como nivel mínimo de alojamiento para las necesidades de renderización de PDF. El nivel B1 proporciona recursos suficientes para el motor de renderizado de PDF de Chrome que impulsa las capacidades de conversión de HTML a PDF de IronPDF.

¿Qué paquete debo instalar para Azure Functions basado en Windows?

Para Azure Functions basadas en Windows, instale el paquete IronPdf de NuGet. Este paquete está optimizado para entornos Windows y proporciona capacidades completas de generación de PDF con el motor de renderizado de Chrome.

¿Cómo convierto HTML a PDF en Azure Functions?

Puede convertir HTML a PDF con una sola línea de código utilizando ChromePdfRenderer de IronPDF. Simplemente crea una nueva instancia y llama a RenderHtmlAsPdf() con tu contenido HTML, luego guarda el archivo PDF resultante.

¿Qué ocurre si no selecciono el plan App Service correcto?

Si no se selecciona un tipo de plan de servicio App, IronPDF puede no renderizar los documentos PDF. La configuración adecuada del entorno de alojamiento Azure es esencial para que el motor de renderización de PDF funcione correctamente.

¿Por qué debe desmarcarse la opción "Ejecutar desde archivo de paquete" al publicar?

Al publicar la aplicación Azure Functions, la opción "Ejecutar desde archivo de paquete" debe estar desmarcada para garantizar que IronPDF pueda acceder y utilizar correctamente sus componentes de renderización y dependencias en el entorno Azure.

¿Puedo utilizar Azure Functions basadas en Linux para la generación de PDF?

Sí, para Azure Functions basadas en Linux, utilice el paquete IronPdf.Linux de NuGet. Este paquete está optimizado específicamente para entornos Linux y ofrece las mismas capacidades de generación de PDF.

¿Y si necesito un mayor rendimiento en la generación de PDF?

Para los sistemas de alto rendimiento, es posible que necesite actualizar más allá del nivel B1. IronPDF se adapta a sus recursos Azure, lo que le permite gestionar mayores demandas de generación de PDF seleccionando niveles de rendimiento superiores.

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
¿Listo para empezar?
Nuget Descargas 17,012,929 | Versión: 2025.12 recién lanzado