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.
Cómo convertir HTML a PDF en Azure Function
- Instalar biblioteca C# para convertir HTML a PDF en Azure Function
- Elige el nivel de alojamiento Azure Basic B1 o superior
- Desactive la opción
Ejecutar desde archivo de paqueteal publicar - Sigue las instrucciones de configuración recomendadas
- Usa el ejemplo de código para crear un generador de PDF usando Azure
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.
- Paquete IronPdf.Linux
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
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).
- Paquete IronPdf.Slim
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.
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.
- En Linux, configure
Installation.LinuxAndDockerDependenciesAutoConfig=true;para asegurar quelibgdiplusesté instalado en la máquina - Agregue lo siguiente al archivo .csproj para su proyecto .NET 6:
<GenerateRuntimeConfigurationFiles>true</GenerateRuntimeConfigurationFiles>
<GenerateRuntimeConfigurationFiles>true</GenerateRuntimeConfigurationFiles>
- Crea un archivo en tu proyecto llamado
runtimeconfig.template.jsony complétalo con lo siguiente:
{
"configProperties": {
"System.Drawing.EnableUnixSupport": true
}
}
- 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)
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
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.

