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.

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.

  1. Instala IronPDF con el Administrador 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

    Comienza a usar 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 servicio de aplicación, es posible que IronPDF no pueda procesar 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 su aplicación de Azure Functions, asegúrese de que Run from package file NO esté seleccionado. 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 garantizar que libgdiplus esté instalado en la máquina
  2. Añade lo siguiente al archivo .csproj para tu proyecto .NET 6:
    <GenerateRuntimeConfigurationFiles>true</GenerateRuntimeConfigurationFiles>
    <GenerateRuntimeConfigurationFiles>true</GenerateRuntimeConfigurationFiles>
    XML
  3. Cree un archivo en su proyecto llamado runtimeconfig.template.json y complételo 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 integrado de Azure (consulte 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 supone un trabajo considerable para cualquier ordenador, similar a abrir y renderizar una página web en el propio equipo. Se utiliza un motor de navegador real , por lo que debemos realizar las provisiones necesarias y esperar tiempos de renderizado similares a los de un ordenador de escritorio de potencia 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. Utilice siempre niveles de alojamiento adecuados : B1 o superiores para un rendimiento confiable
  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,803,474 | Versión: 2026.3 recién lanzado
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.