¿Cómo ejecutar HTML a PDF con .NET en Azure?

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.

Funciones Azure en Docker

Si está ejecutando Azure Functions en un contenedor Docker, consulte este tutorial en su lugar.


Tutorial

Configuración del proyecto

Instalación de IronPDF para empezar

El primer paso es instalar IronPDF utilizando NuGet:

Install-Package IronPdf

Alternativamente, instale manualmente la .dll utilizando el comando descarga directa enlace.

Seleccione las opciones Azure correctas

Elegir el nivel de alojamiento adecuado Azure Tier

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

La casilla "Ejecutar desde el archivo del paquete

Cuando publiques tu aplicación Azure Functions asegúrate de que la opción Run from package file está NO seleccionada.

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
      }
}
{
      "configProperties": {
         "System.Drawing.EnableUnixSupport": true
      }
}
If True Then
	  "configProperties":
	  If True Then
		 "System.Drawing.EnableUnixSupport": True
	  End If
End If
VB   C#
  1. Por último, añade la siguiente línea al principio de tu programa: System.AppContext.SetSwitch("System.Drawing.EnableUnixSupport", true);

Uso de Docker en Azure

Una forma de obtener control, acceso a fuentes SVG y la capacidad de controlar el rendimiento en Azure es utilizar aplicaciones y funciones IronPDF desde contenedores Docker.

Disponemos de un IronPDF Azure Docker tutorial para instancias Linux y Windows y es una lectura recomendada.

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...");
    //  Aplicar clave de licencia
    IronPdf.License.LicenseKey = "IRONPDF-MYLICENSE-KEY-1EF01";
    //  Activar registro
    IronPdf.Logging.Logger.LoggingMode = IronPdf.Logging.Logger.LoggingModes.Custom;
    IronPdf.Logging.Logger.CustomLogger = log;

    IronPdf.Logging.Logger.EnableDebugging = false;
    //  Configurar IronPdf
    Installation.LinuxAndDockerDependenciesAutoConfig = false;
    Installation.ChromeGpuMode = IronPdf.Engines.Chrome.ChromeGpuModes.Disabled;
    try
    {
        log.LogInformation("About to render pdf...");
        ChromePdfRenderer renderer = new ChromePdfRenderer();
        //  Renderizar 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("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...");
    //  Aplicar clave de licencia
    IronPdf.License.LicenseKey = "IRONPDF-MYLICENSE-KEY-1EF01";
    //  Activar registro
    IronPdf.Logging.Logger.LoggingMode = IronPdf.Logging.Logger.LoggingModes.Custom;
    IronPdf.Logging.Logger.CustomLogger = log;

    IronPdf.Logging.Logger.EnableDebugging = false;
    //  Configurar IronPdf
    Installation.LinuxAndDockerDependenciesAutoConfig = false;
    Installation.ChromeGpuMode = IronPdf.Engines.Chrome.ChromeGpuModes.Disabled;
    try
    {
        log.LogInformation("About to render pdf...");
        ChromePdfRenderer renderer = new ChromePdfRenderer();
        //  Renderizar 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("OK");
}
<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...")
	'  Aplicar clave de licencia
	IronPdf.License.LicenseKey = "IRONPDF-MYLICENSE-KEY-1EF01"
	'  Activar registro
	IronPdf.Logging.Logger.LoggingMode = IronPdf.Logging.Logger.LoggingModes.Custom
	IronPdf.Logging.Logger.CustomLogger = log

	IronPdf.Logging.Logger.EnableDebugging = False
	'  Configurar IronPdf
	Installation.LinuxAndDockerDependenciesAutoConfig = False
	Installation.ChromeGpuMode = IronPdf.Engines.Chrome.ChromeGpuModes.Disabled
	Try
		log.LogInformation("About to render pdf...")
		Dim renderer As New ChromePdfRenderer()
		'  Renderizar 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)
	End Try

	Return New OkObjectResult("OK")
End Function
VB   C#

Problemas conocidos

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

Una limitación que hemos encontrado es que el Plataforma 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 un Contenedor 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