Cómo ejecutar y desplegar IronPDF .NET en Azure Function

This article was translated from English: Does it need improvement?
Translated
View the article in English
Azure 1 related to Cómo ejecutar y desplegar IronPDF .NET en Azure Function

Sí. IronPDF se puede utilizar para generar, manipular y leer documentos PDF en Azure. IronPDF ha sido rigurosamente probado en múltiples plataformas Azure, incluyendo sitios web MVC, Azure Functions y muchos más.


Tutorial de cómo hacerlo

Instalar el paquete de IronPDF

Las aplicaciones Azure Function tienen tres entornos distintos: Linux, Windows y Container. Este artículo explica cómo configurar IronPDF en los tres entornos. Entre estos, se recomienda el Azure Function App Container porque proporciona un entorno aislado. Para comenzar, seleccionemos el paquete adecuado para instalar.

Contenedor de aplicaciones de funciones de Azure

El contenedor de la aplicación de función de Azure implica mínimos problemas, por lo que es la forma recomendada de implementar IronPDF.

Instalación del paquete IronPdf.Linux

Configurar Archivo Docker

Configure el archivo Docker basándose en la distribución de Linux que está utilizando. Consulte este artículo para obtener instrucciones detalladas.

Aplicación de función de Azure (Windows)

Para usar el paquete estándar IronPDF, asegúrate de que la opción Ejecutar desde el archivo de paquete esté desmarcada. Habilitar esta opción implementa el proyecto como un archivo ZIP, lo que interfiere con la configuración de archivos de IronPDF. Si prefiere habilitar la opción Ejecutar desde archivo de paquete, instale el paquete IronPdf.Slim en su lugar.

Install-Package IronPdf
Azure Package File related to Aplicación de función de Azure (Windows)

Aplicación de función de Azure (Linux)

Para Azure Function App (Linux), el proyecto se despliega como un archivo ZIP por defecto, y este comportamiento no se puede desactivar. Esto es similar a habilitar la opción Ejecutar desde archivo de paquete en Azure Function App (Windows).

Instalación del paquete IronPdf.Slim

Seleccione las opciones correctas de Azure

Elegir el nivel de alojamiento correcto

Azure Basic B1 es el nivel mínimo de alojamiento requerido para las necesidades de renderizado de nuestros usuarios finales. Si está creando un sistema de alto rendimiento, esto puede necesitar ser actualizado.

AdvertenciaNota: No seleccionar un Tipo de Plan de plan de servicio de aplicación puede resultar en que IronPDF no pueda renderizar documentos PDF.

Elegir el nivel de alojamiento adecuado Azure Tier

Configuración for .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 asegurar que libgdiplus esté instalado en la máquina
  2. Agregue lo siguiente al archivo .csproj para su proyecto .NET 6:
<GenerateRuntimeConfigurationFiles>true</GenerateRuntimeConfigurationFiles>
<GenerateRuntimeConfigurationFiles>true</GenerateRuntimeConfigurationFiles>
XML
  1. Crea un archivo en tu proyecto llamado runtimeconfig.template.json y complétalo con lo siguiente:
{
  "configProperties": {
    "System.Drawing.EnableUnixSupport": true
  }
}
  1. Finalmente, agregue la siguiente línea al inicio de su programa:
System.AppContext.SetSwitch("System.Drawing.EnableUnixSupport", true);
System.AppContext.SetSwitch("System.Drawing.EnableUnixSupport", true);
System.AppContext.SetSwitch("System.Drawing.EnableUnixSupport", True)
$vbLabelText   $csharpLabel

Ejemplo de código de función Azure

Este ejemplo convierte HTML a PDF y automáticamente genera entradas de registro en el registrador integrado de Azure (ver ILogger log).

[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";

    // Enable logging
    IronPdf.Logging.Logger.LoggingMode = IronPdf.Logging.Logger.LoggingModes.Custom;
    IronPdf.Logging.Logger.CustomLogger = log;

    // Configure IronPdf settings
    IronPdf.Installation.LinuxAndDockerDependenciesAutoConfig = true;
    IronPdf.Installation.AutomaticallyDownloadNativeBinaries = true;
    IronPdf.Installation.ChromeGpuMode = IronPdf.Engines.Chrome.ChromeGpuModes.Disabled;
    IronPdf.Installation.CustomDeploymentDirectory = "/tmp";

    try
    {
        log.LogInformation("About to render PDF...");
        ChromePdfRenderer renderer = new ChromePdfRenderer();
        // Render PDF from a URL
        var pdf = renderer.RenderUrlAsPdf("https://www.google.com/");
        log.LogInformation("Finished rendering PDF...");
        return new FileContentResult(pdf.BinaryData, "application/pdf") { FileDownloadName = "google.pdf" };
    }
    catch (Exception e)
    {
        log.LogError(e, "Error while rendering PDF");
        return new OkObjectResult($"Error while rendering PDF: {e}");
    }
}
[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";

    // Enable logging
    IronPdf.Logging.Logger.LoggingMode = IronPdf.Logging.Logger.LoggingModes.Custom;
    IronPdf.Logging.Logger.CustomLogger = log;

    // Configure IronPdf settings
    IronPdf.Installation.LinuxAndDockerDependenciesAutoConfig = true;
    IronPdf.Installation.AutomaticallyDownloadNativeBinaries = true;
    IronPdf.Installation.ChromeGpuMode = IronPdf.Engines.Chrome.ChromeGpuModes.Disabled;
    IronPdf.Installation.CustomDeploymentDirectory = "/tmp";

    try
    {
        log.LogInformation("About to render PDF...");
        ChromePdfRenderer renderer = new ChromePdfRenderer();
        // Render PDF from a URL
        var pdf = renderer.RenderUrlAsPdf("https://www.google.com/");
        log.LogInformation("Finished rendering PDF...");
        return new FileContentResult(pdf.BinaryData, "application/pdf") { FileDownloadName = "google.pdf" };
    }
    catch (Exception e)
    {
        log.LogError(e, "Error while rendering PDF");
        return new OkObjectResult($"Error while rendering PDF: {e}");
    }
}
<FunctionName("PrintPdf")>
Public Shared Async Function Run(<HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route := Nothing)> ByVal req As HttpRequest, ByVal log As ILogger, ByVal context As ExecutionContext) As Task(Of IActionResult)
	log.LogInformation("Entered PrintPdf API function...")

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

	' Enable logging
	IronPdf.Logging.Logger.LoggingMode = IronPdf.Logging.Logger.LoggingModes.Custom
	IronPdf.Logging.Logger.CustomLogger = log

	' Configure IronPdf settings
	IronPdf.Installation.LinuxAndDockerDependenciesAutoConfig = True
	IronPdf.Installation.AutomaticallyDownloadNativeBinaries = True
	IronPdf.Installation.ChromeGpuMode = IronPdf.Engines.Chrome.ChromeGpuModes.Disabled
	IronPdf.Installation.CustomDeploymentDirectory = "/tmp"

	Try
		log.LogInformation("About to render PDF...")
		Dim renderer As New ChromePdfRenderer()
		' Render PDF from a URL
		Dim pdf = renderer.RenderUrlAsPdf("https://www.google.com/")
		log.LogInformation("Finished rendering PDF...")
		Return New FileContentResult(pdf.BinaryData, "application/pdf") With {.FileDownloadName = "google.pdf"}
	Catch e As Exception
		log.LogError(e, "Error while rendering PDF")
		Return New OkObjectResult($"Error while rendering PDF: {e}")
	End Try
End Function
$vbLabelText   $csharpLabel

Crear un proyecto usando la plantilla de Azure Function en Visual Studio puede resultar en un código ligeramente diferente. Debido a estas diferencias, incluso con el mismo paquete instalado, un proyecto podría funcionar mientras que el otro no. Si esto ocurre, establezca la propiedad CustomDeploymentDirectory a "/tmp".

Entender cada configuración de instalación

  • LinuxAndDockerDependenciesAutoConfig: Esta configuración verifica e intenta descargar todas las dependencias necesarias para el motor de Chrome. Es requerido cuando se usan sistemas sin interfaz gráfica, como Linux. En sistemas de contenedor, las dependencias generalmente se enumeran en el Dockerfile; por lo tanto, puede establecer esto en falso.
  • AutomaticallyDownloadNativeBinaries: Esta opción descarga el binario Chrome nativo en tiempo de ejecución. Es requerido cuando se usa el paquete IronPdf.Slim.
  • CustomDeploymentDirectory: Esta configuración es necesaria para sistemas con acceso de escritura limitado.

Asuntos conocidos

El renderizado de fuentes SVG no está disponible en los planes de alojamiento compartido

Una limitación que hemos encontrado es que 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 que estas plataformas de alojamiento compartido no tienen permitido acceder a objetos gráficos GDI+ de Windows por razones de seguridad.

Recomendamos usar un Contenedor Docker de Windows o Linux o quizás un VPS en Azure para navegar este problema donde se requiere la mejor renderización de fuentes.

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 tu propia máquina. Se utiliza un motor de navegador real, por lo tanto, necesitamos provisionar adecuadamente y esperar tiempos de renderizado similares a los de una máquina de escritorio de poder similar.

Creación de un ticket de solicitud de soporte de ingeniería

Para crear un ticket de solicitud, consulte la guía 'Cómo Hacer una Solicitud de Soporte Técnico para IronPDF'

Despliegue en España: Azure Spain Central y Spain North

Microsoft Azure dispone de dos regiones en territorio español: Spain Central (Madrid) y Spain North (Bilbao). Para equipos de desarrollo en España que generan documentos PDF con datos fiscales o personales, usar estas regiones permite cumplir con los requisitos de residencia de datos de la LOPDGDD y las recomendaciones de la AEPD.

Cargas de trabajo Azure para VeriFactu y Facturae

Los ISV que desarrollan software de facturación conforme a la AEAT pueden desplegar Azure Functions con IronPDF para generar los PDFs asociados a sus flujos de VeriFactu y Facturae. Recomendaciones específicas:

  • Usar la región Spain Central para minimizar la latencia de los servicios conectados al portal de la AEAT y a las plataformas de SII (Suministro Inmediato de Información).
  • El plan de alojamiento B1 o superior es necesario para la renderización fiable de PDFs de facturas con tablas de datos y logotipos corporativos.
  • Para flujos de facturación de alto volumen (por ejemplo, emisión masiva de facturas Facturae al portal FACe), considerar el plan Premium P1v3 que evita los tiempos de arranque en frío.

Nota: IronPDF actúa como componente de generación de PDF dentro del software de facturación. La certificación VeriFactu corresponde al sistema de facturación completo, no a la biblioteca de PDF de forma aislada.

Cumplimiento LOPDGDD en Azure Functions

Cuando las Azure Functions procesan PDFs que contienen datos personales (facturas con NIF/CIF, expedientes médicos, documentos contractuales):

  • Configurar CustomDeploymentDirectory = "/tmp" y garantizar que el directorio temporal se limpia tras cada invocación para no retener datos personales.
  • Evaluar el cifrado de Azure Blob Storage al archivar los PDFs generados si estos contienen datos sujetos a la LOPDGDD.
  • La AEPD recomienda documentar los flujos de datos que involucran procesamiento de PDFs en el Registro de Actividades de Tratamiento (RAT) exigido por el RGPD.

Alternativa sin AGPL en Azure

Los equipos que evalúan iText como alternativa deben considerar que su licencia AGPL obliga a publicar el código fuente de la aplicación que lo integra, salvo licencia comercial. En Azure Functions expuestas como API, esta obligación aplica al código desplegado. IronPDF ofrece licencia comercial sin restricciones copyleft.

Preguntas Frecuentes

¿Cómo puedo alojar una biblioteca para generar PDFs en Azure?

Puedes alojar una biblioteca para generar PDFs como IronPDF en Azure configurando una Azure Function o un sitio web MVC. Asegúrate de tener instalados los paquetes necesarios de NuGet y configura tu entorno de acuerdo con los requisitos de la biblioteca.

¿Qué entornos de Azure son compatibles con una biblioteca de PDF?

IronPDF es compatible con múltiples entornos de Azure, incluidos sitios web MVC y Azure Functions. Está diseñado para funcionar sin problemas en diferentes plataformas proporcionadas por Azure.

¿Cuáles son los requisitos de alojamiento para una biblioteca de PDF en Azure?

Para un rendimiento óptimo al usar IronPDF en Azure, se recomienda usar al menos el nivel de alojamiento Azure Basic B1. Esto asegura recursos suficientes para renderizar PDFs eficientemente.

¿Cómo configuro una biblioteca de PDF para una aplicación Azure Function en Linux?

Para configurar IronPDF para una aplicación Azure Function en Linux, instala el paquete IronPdf.Slim. Implementa tu proyecto como un archivo ZIP y asegúrate de que todas las configuraciones estén correctamente establecidas para el entorno Linux.

¿Qué configuraciones se necesitan for .NET 6 al usar una biblioteca de PDF en Azure?

Al usar IronPDF con .NET 6 en Azure, actualiza la configuración de tu proyecto para permitir llamadas a API heredadas. Establece Installation.LinuxAndDockerDependenciesAutoConfig=true e incluye las configuraciones necesarias en los archivos de tu proyecto.

¿Por qué se recomienda un contenedor Docker para renderizar PDFs en Azure?

Se recomienda un contenedor Docker para renderizar PDFs en Azure porque proporciona un entorno más controlado, admite una mejor renderización de fuentes y evita las limitaciones de los planes de alojamiento compartido.

Causas de renderización lenta de PDFs en Azure Free Tier?

La renderización de PDFs es lenta en el nivel gratuito de Azure debido a los recursos de cómputo limitados. El proceso requiere un poder computacional significativo, similar a renderizar una página web, por lo que planes de mayor nivel como B1 o Premium son más adecuados.

¿Cómo puedo solucionar un proyecto de Azure Function que no funciona con una biblioteca de PDF?

Si tu proyecto Azure Function con IronPDF no funciona, verifica que la propiedad CustomDeploymentDirectory esté establecida en '/tmp', y asegúrate de que todos los paquetes y configuraciones necesarias estén correctamente instalados y configurados.

¿Qué opciones de soporte están disponibles para implementar una biblioteca de PDF en Azure?

Para soporte con la implementación de IronPDF en Azure, consulta la guía 'Cómo hacer una solicitud de soporte de ingeniería para IronPDF' en el sitio web de IronPDF para obtener asistencia detallada.

¿Qué región Azure debo usar para cumplir con la LOPDGDD al generar PDFs en España?

Para cumplir con la LOPDGDD y mantener los datos dentro de España, se recomienda usar la región Spain Central (Madrid) o Spain North (Bilbao). Estas regiones garantizan que los datos personales incluidos en los PDFs generados, como NIF/CIF o datos de clientes, no salgan del territorio español, conforme a las recomendaciones de la AEPD.

¿Se puede usar IronPDF en Azure Functions para flujos VeriFactu o Facturae?

Sí. IronPDF puede emplearse como componente de generación de PDF dentro de software de facturación que implemente VeriFactu o Facturae en Azure. La función genera el PDF de la factura; el sistema de facturación certificado es responsable de la firma AEAT y del registro en el SII. El plan B1 o superior garantiza el rendimiento necesario para la generación de PDFs de facturas en producción.

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