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


Tutorial

Instalar paquete IronPdf

Las aplicaciones de función 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.

-IronPdf.Linux paquete

Install-Package IronPdf.Linux

Configurar archivo Docker

Configura el archivo Docker según la distribución de Linux que estés utilizando. Consulteeste artículo para obtener instrucciones detalladas.

Aplicación de Funciones de Azure (Windows)

Para usar el estándarIronPDFpaquete, asegúrese de que la opción Ejecutar desde el archivo de paquete no esté seleccionada. 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 elIronPdf.Slimpaquete en su lugar.

-IronPDF paquete

Install-Package IronPdf
Azure Package File related to Aplicación de Funciones 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 el archivo de paquete en Azure Function App.(Windows).

-IronPdf.Slim paquete

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
Si no se selecciona un tipo de plan de plan de servicio de aplicaciones, es posible que IronPdf no pueda generar documentos PDF.

Elegir el nivel de alojamiento adecuado Azure Tier

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.

  1. En Linux, configure Installation.LinuxAndDockerDependenciesAutoConfig=true; para asegurarse de que libgdiplus está instalado en la máquina.

  2. Añada lo siguiente al archivo .csproj de su proyecto .NET 6: <GenerateRuntimeConfigurationFiles>verdadero</GenerateRuntimeConfigurationFiles>

  3. Crea un archivo en tu proyecto llamado runtimeconfig.template.json y rellénalo con lo siguiente:
{
      "configProperties": {
         "System.Drawing.EnableUnixSupport": true
      }
}
  1. Por último, añade la siguiente línea al principio de tu programa: System.AppContext.SetSwitch("System.Drawing.EnableUnixSupport", true);

Ejemplo de código de función Azure

Este ejemplo envía automáticamente entradas de registro al registrador Azure integrado(véase 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
VB   C#

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 establezca 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 motor de Chrome. Es necesaria al utilizar sistemas sin interfaz gráfica, 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 elPlataforma de alojamiento Azure no admite que los servidores carguen fuentes SVG, como Google Fonts, en sus niveles más baratos 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 utilizar unContenedor Docker Windows o Linux o tal vez un VPS en Azure para navegar por esta cuestión en la que se requiere la mejor representación de la fuente.

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 conversión de HTML a PDF supone un "trabajo" considerable para cualquier ordenador, similar al de abrir y procesar una página web en su propio ordenador. Se utiliza un motor de navegación real, por lo que es necesario prever tiempos de procesamiento similares a los de un ordenador de sobremesa de potencia similar.

Creación de un ticket de solicitud de soporte técnico

Para crear una solicitud, consulte la sección 'Cómo realizar una solicitud de asistencia técnica para IronPDFguía