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

Sí. IronPDF puede utilizarse para generar, manipular y leer documentos PDF en Azure. IronPDF ha sido probado a fondo en múltiples plataformas Azure, incluyendo sitios web MVC, Azure Functions y muchos más.
Cómo hacer un generador PDF en Azure Function
- Instalar la biblioteca C# para generar PDFs en Azure
- Elija el nivel de alojamiento Azure Basic B1 o superior
- Desmarca la opción
Run from package file
al publicar - Siga las instrucciones de configuración recomendadas
- Utilice el código de ejemplo para crear un generador PDF utilizando Azure
Tutorial
Instalar paquete IronPdf
Las aplicaciones de funciones de Azure tienen tres entornos distintos: Linux, Windows y Contenedor. Este artículo explica cómo configurar IronPdf en los tres entornos. Entre estos, se recomienda Azure Function App Container porque proporciona un entorno aislado. Para comenzar, seleccionemos el paquete apropiado para instalar.
Aplicación de Funciones de Azure en Contenedor
La aplicación de contenedor Azure Function App implica un mínimo de complicaciones, lo que la convierte en la forma recomendada para implementar IronPdf.
- Paquete IronPdf.Linux
Install-Package IronPdf.Linux
Configurar archivo Docker
Configura el archivo Docker según la distribución de Linux que estés utilizando. Por favor, consulte este artículo para obtener instrucciones detalladas.
Aplicación de Funciones de Azure (Windows)
Para utilizar el paquete estándar de IronPdf, asegúrese de que la opción Ejecutar desde archivo de paquete esté desmarcada. Habilitar esta opción despliega el proyecto como un archivo ZIP, lo que interfiere con la configuración de archivos de IronPdf. Si prefieres habilitar la opción Ejecutar desde archivo de paquete, instala el paquete IronPdf.Slim en su lugar.
- paquete IronPdf
Install-Package IronPdf

Aplicación de Función de Azure (Linux)
Para Azure Function App (Linux), el proyecto se implementa como un archivo ZIP por defecto, y este comportamiento no se puede desactivar. Esto es similar a habilitar la opción Ejecutar desde el archivo de paquete en Azure Function App (Windows).
- Paquete IronPdf.Slim
Install-Package IronPdf.Slim
Seleccione las opciones Azure correctas
Elegir el nivel de alojamiento correcto
Azure Basic B1 es el nivel de alojamiento mínimo requerido para las necesidades de renderizado de nuestros usuarios finales. Si está creando un sistema de alto rendimiento, puede que sea necesario actualizarlo.
Antes de proceder

Configuración para .NET 6
Microsoft ha eliminado recientemente las bibliotecas de imágenes de .NET 6+, rompiendo muchas API heredadas. Por lo tanto, es necesario configurar el proyecto para que siga permitiendo estas llamadas a API heredadas.
-
En Linux, configure
Installation.LinuxAndDockerDependenciesAutoConfig=true;
para asegurar quelibgdiplus
esté instalado en la máquina. -
Agrega lo siguiente al archivo .csproj de tu proyecto .NET 6:
<GenerateRuntimeConfigurationFiles>true</GenerateRuntimeConfigurationFiles>
- Crea un archivo en tu proyecto llamado
runtimeconfig.template.json
y complétalo con lo siguiente:
{
"configProperties": {
"System.Drawing.EnableUnixSupport": true
}
}
- Finalmente, añade la siguiente línea al comienzo de tu programa:
System.AppContext.SetSwitch("System.Drawing.EnableUnixSupport", true);
Ejemplo de código de función Azure
Este ejemplo genera automáticamente entradas de registro al 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 log
IronPdf.Logging.Logger.LoggingMode = IronPdf.Logging.Logger.LoggingModes.Custom;
IronPdf.Logging.Logger.CustomLogger = log;
// Configure IronPdf
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
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", e);
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 log
IronPdf.Logging.Logger.LoggingMode = IronPdf.Logging.Logger.LoggingModes.Custom;
IronPdf.Logging.Logger.CustomLogger = log;
// Configure IronPdf
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
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", e);
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 log
IronPdf.Logging.Logger.LoggingMode = IronPdf.Logging.Logger.LoggingModes.Custom
IronPdf.Logging.Logger.CustomLogger = log
' Configure IronPdf
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
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", e)
Return New OkObjectResult($"Error while rendering pdf: {e}")
End Try
End Function
Crear un proyecto utilizando la plantilla de Función de Azure 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, por favor configure la propiedad CustomDeploymentDirectory a "/tmp".
Comprenda cada configuración de instalación
- LinuxAndDockerDependenciesAutoConfig: Esta configuración verifica e intenta descargar todas las dependencias necesarias para el Chrome Engine. Es requerida cuando se utilizan sistemas sin GUI, como Linux. En los sistemas de contenedores, las dependencias suelen estar listadas en el Dockerfile; por lo tanto, puedes establecer esto en falso.
- AutomaticallyDownloadNativeBinaries: Esta opción descarga el binario nativo de Chrome en tiempo de ejecución. Es necesario al usar el paquete IronPdf.Slim.
- CustomDeploymentDirectory: Esta configuración es necesaria para sistemas con acceso de escritura limitado.
Problemas 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 Azure no admite servidores que carguen fuentes SVG, como Google Fonts, en sus niveles más económicos de aplicaciones web compartidas. Esto se debe a que estas plataformas de alojamiento compartido no pueden acceder a los objetos gráficos GDI+ de Windows por motivos de seguridad.
Recomendamos usar un Contenedor Docker de Windows o Linux o quizás un VPS en Azure para abordar este problema donde se requiere el mejor renderizado de fuentes.
El alojamiento gratuito de Azure es lento
Los niveles gratuitos y compartidos de Azure, así como el plan de consumo, no son adecuados para el renderizado de PDF. Recomendamos Azure B1 hosting/Plan Premium, que es lo que utilizamos nosotros mismos. El proceso de HTML a 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 en consecuencia y esperar tiempos de renderizado similares a una máquina de escritorio de potencia similar.
Creación de un ticket de solicitud de soporte técnico
Para crear un ticket de solicitud, consulte la guía 'Cómo hacer una solicitud de asistencia técnica para IronPDF'