Esta guía cubre todo lo necesario para desplegar IronPDF for Java dentro de un contenedor de Azure Functions y generar PDFs bajo demanda desde un endpoint HTTP sin servidor. Debido a que IronPDF envía un motor de renderizado Chromium nativo, debe empaquetarse como una imagen de Docker — la implementación estándar de Zip en Azure Functions no puede ejecutar los binarios de los que IronPDF depende en tiempo de ejecución. Siguiendo esta guía, una función de Azure en funcionamiento aceptará una URL como un parámetro de consulta y devolverá un PDF completamente renderizado como un archivo descargable.
El enfoque utiliza el flujo de trabajo recomendado por Microsoft para contenedores personalizados para Azure Functions basadas en Linux. Un proyecto Maven proporciona el código de función y la gestión de dependencias. Docker construye la imagen del contenedor, que se envía a un registro y es referenciado por la aplicación Azure Function. Una vez desplegado, el tiempo de inicio en frío es la principal consideración de rendimiento; las invocaciones posteriores son rápidas y consistentes.
Antes de comenzar, asegúrese de que el CLI de Azure, Docker Desktop, Maven 3.8+, y JDK 11 o JDK 17 estén instalados localmente. También se requiere una suscripción activa a Azure con permiso para crear Aplicaciones de Función y cuentas de almacenamiento.
Inicio rápido: Desplegar IronPDF for Java en Azure Functions
El código a continuación muestra la función Azure completa RenderPdf. Acepta un parámetro de consulta url y devuelve un flujo de bytes PDF. Agrega esto a Function.java después de completar la configuración de dependencia de Maven en las secciones que siguen.
//:path=/static-assets/pdf/content-code-examples/tutorials/azure/RenderPdf.java
import com.microsoft.azure.functions.*;
import com.ironsoftware.ironpdf.PdfDocument;
import java.util.Optional;
public class Function {
/**
* HTTP-triggered Azure Function: accepts a URL, renders it as a PDF,
* and returns the PDF bytes as a downloadable attachment.
*/
@FunctionName("RenderPdf")
public HttpResponseMessage renderPdf(
@HttpTrigger(
name = "req",
methods = {HttpMethod.GET, HttpMethod.POST},
authLevel = AuthorizationLevel.ANONYMOUS)
HttpRequestMessage<Optional<String>> request,
final ExecutionContext context) {
context.getLogger().info("RenderPdf function triggered.");
// Read the target URL from the query string
final String url = request.getQueryParameters().get("url");
if (url == null) {
return request.createResponseBuilder(HttpStatus.BAD_REQUEST)
.body("Provide a 'url' query parameter.")
.build();
}
try {
context.getLogger().info("Rendering URL as PDF: " + url);
// IronPDF renders the full page including JavaScript
PdfDocument pdf = PdfDocument.renderUrlAsPdf(url);
byte[] pdfBytes = pdf.getBinaryData();
return request.createResponseBuilder(HttpStatus.OK)
.body(pdfBytes)
.header("Content-Disposition", "attachment; filename=output.pdf")
.header("Content-Type", "application/pdf")
.build();
} catch (Exception ex) {
context.getLogger().severe("PDF rendering failed: " + ex.getMessage());
return request.createResponseBuilder(HttpStatus.INTERNAL_SERVER_ERROR)
.body("PDF rendering failed. Check function logs for details.")
.build();
}
}
}
//:path=/static-assets/pdf/content-code-examples/tutorials/azure/RenderPdf.java
import com.microsoft.azure.functions.*;
import com.ironsoftware.ironpdf.PdfDocument;
import java.util.Optional;
public class Function {
/**
* HTTP-triggered Azure Function: accepts a URL, renders it as a PDF,
* and returns the PDF bytes as a downloadable attachment.
*/
@FunctionName("RenderPdf")
public HttpResponseMessage renderPdf(
@HttpTrigger(
name = "req",
methods = {HttpMethod.GET, HttpMethod.POST},
authLevel = AuthorizationLevel.ANONYMOUS)
HttpRequestMessage<Optional<String>> request,
final ExecutionContext context) {
context.getLogger().info("RenderPdf function triggered.");
// Read the target URL from the query string
final String url = request.getQueryParameters().get("url");
if (url == null) {
return request.createResponseBuilder(HttpStatus.BAD_REQUEST)
.body("Provide a 'url' query parameter.")
.build();
}
try {
context.getLogger().info("Rendering URL as PDF: " + url);
// IronPDF renders the full page including JavaScript
PdfDocument pdf = PdfDocument.renderUrlAsPdf(url);
byte[] pdfBytes = pdf.getBinaryData();
return request.createResponseBuilder(HttpStatus.OK)
.body(pdfBytes)
.header("Content-Disposition", "attachment; filename=output.pdf")
.header("Content-Type", "application/pdf")
.build();
} catch (Exception ex) {
context.getLogger().severe("PDF rendering failed: " + ex.getMessage());
return request.createResponseBuilder(HttpStatus.INTERNAL_SERVER_ERROR)
.body("PDF rendering failed. Check function logs for details.")
.build();
}
}
}
Comience a usar IronPDF en su proyecto hoy con una prueba gratuita.
Tabla de contenido
- ¿Cuáles son los requisitos previos?
- ¿Cómo configurar el proyecto de Azure Function?
- ¿Cómo añadir dependencias de IronPDF a su proyecto Maven?
- ¿Cómo escribir la función RenderPdf?
- ¿Cómo configurar el Dockerfile para IronPDF?
- ¿Cómo construir y enviar la imagen de Docker?
- ¿Cómo desplegar la función en Azure?
- ¿Cómo activar y probar la función?
- ¿Cuáles son los próximos pasos?
¿Cuáles son los requisitos previos? {#prerequisites}
Antes de comenzar, confirme que todas las herramientas necesarias estén instaladas y que una suscripción a Azure esté activa. Omitir estas verificaciones a menudo resulta en fallos de construcción a mitad del proceso de despliegue.
Herramientas locales requeridas:
- Azure CLI (versión 2.40 o posterior)
- Docker Desktop con contenedores Linux habilitados
- Maven 3.8 o posterior
- JDK 11 o JDK 17 (JDK 17 es la versión LTS recomendada)
- Azure Functions Core Tools v4
Recursos de Azure requeridos:
- Una suscripción activa a Azure
- Permisos para crear grupos de recursos, cuentas de almacenamiento y planes de aplicación de función
- Una cuenta de Docker Hub (o Azure Container Registry) para alojar la imagen construida
ironpdf-engine-linux-x64 cuando se ejecuta dentro de cualquier contenedor Docker. La implementación estándar de Zip en Azure Functions no puede ejecutar los binarios nativos de IronPDF — Docker es el único método de despliegue compatible.Ejecute az login para autenticar la CLI de Azure antes de proceder a la siguiente sección.
¿Cómo configurar el proyecto de Azure Function? {#set-up-project}
La guía de Microsoft para crear una función en Linux usando una imagen personalizada cubre todo el proceso de andamiaje. Siga esos pasos con una selección importante: elija Java cuando se le pregunte por un lenguaje de programación.
Trabaje en la guía hasta que el proyecto andamiado se construya y la función de marcador de posición se ejecute localmente usando Azure Functions Core Tools. Verifíquelo con:
//:path=/static-assets/pdf/content-code-examples/tutorials/azure/local-run.sh
mvn clean package
func start
//:path=/static-assets/pdf/content-code-examples/tutorials/azure/local-run.sh
mvn clean package
func start
Una vez que el marcador de posición responda a una solicitud HTTP local, la estructura del proyecto es correcta y está lista para la integración de IronPDF. Los archivos clave son pom.xml (configuración de Maven), Function.java (código de la función) y Dockerfile (definición del contenedor).
host.json y local.settings.json junto pom.xml. El archivo local.settings.json almacena variables de entorno para el desarrollo local; está excluido del control de fuentes por defecto y nunca debe ser comprometido.¿Cómo añadir dependencias de IronPDF a su proyecto Maven? {#add-IronPDF-dependencies}
IronPDF for Java se distribuye a través de Maven Central. Se requieren dos artefactos: la biblioteca central ironpdf que proporciona la API de Java, y ironpdf-engine-linux-x64 que incluye el motor nativo Chromium compilado para Linux x86-64. El artefacto del motor es lo que hace obligatorio el despliegue en Docker; incluye binarios que deben ejecutarse en tiempo de ejecución.
Abra pom.xml y añada lo siguiente dentro del bloque <dependencies>. Reemplace LATEST_VERSION con la versión actual disponible en Maven Central:
//:path=/static-assets/pdf/content-code-examples/tutorials/azure/pom.xml
<dependencies>
<dependency>
<groupId>com.ironsoftware</groupId>
<artifactId>ironpdf</artifactId>
<version>LATEST_VERSION</version>
</dependency>
<dependency>
<groupId>com.ironsoftware</groupId>
<artifactId>ironpdf-engine-linux-x64</artifactId>
<version>LATEST_VERSION</version>
</dependency>
</dependencies>
//:path=/static-assets/pdf/content-code-examples/tutorials/azure/pom.xml
<dependencies>
<dependency>
<groupId>com.ironsoftware</groupId>
<artifactId>ironpdf</artifactId>
<version>LATEST_VERSION</version>
</dependency>
<dependency>
<groupId>com.ironsoftware</groupId>
<artifactId>ironpdf-engine-linux-x64</artifactId>
<version>LATEST_VERSION</version>
</dependency>
</dependencies>
Ambos artefactos deben usar el mismo número de versión. Las versiones desajustadas entre ironpdf y ironpdf-engine-linux-x64 causan una excepción en tiempo de ejecución cuando la función intenta renderizar un PDF por primera vez.
Después de actualizar pom.xml, ejecute mvn dependency:resolve para verificar que Maven pueda descargar ambos artefactos de Central antes de invertir tiempo en construir la imagen de Docker.
{t:(Revise las notas de lanzamiento de IronPDF for Java para la última versión estable. Usar la versión más reciente asegura la compatibilidad con el último motor de renderizado Chromium y evita errores conocidos.)}]
¿Cómo escribir la función RenderPdf? {#write-renderpdf-function}
La función RenderPdf es una Azure Function activada por HTTP que acepta un parámetro de consulta url, renderiza la página objetivo utilizando el motor basado en Chromium de IronPDF, y devuelve el PDF resultante como una respuesta binaria con un encabezado Content-Disposition: attachment. Este encabezado le dice al navegador (o al cliente HTTP) que descargue el PDF en lugar de mostrarlo en línea.
El código completo de la función se muestra en el inicio rápido anterior. Colóquelo en src/main/java/com/example/Function.java, sustituyendo o extendiendo el marcador de posición generado por el arquetipo Maven.
//:path=/static-assets/pdf/content-code-examples/tutorials/azure/RenderPdf-annotated.java
import com.microsoft.azure.functions.*;
import com.ironsoftware.ironpdf.PdfDocument;
import java.util.Optional;
public class Function {
@FunctionName("RenderPdf")
public HttpResponseMessage renderPdf(
@HttpTrigger(
name = "req",
methods = {HttpMethod.GET, HttpMethod.POST},
authLevel = AuthorizationLevel.ANONYMOUS)
HttpRequestMessage<Optional<String>> request,
final ExecutionContext context) {
// Log each invocation for Azure Monitor / Application Insights
context.getLogger().info("RenderPdf triggered.");
final String url = request.getQueryParameters().get("url");
// Return 400 if no URL was supplied
if (url == null) {
return request.createResponseBuilder(HttpStatus.BAD_REQUEST)
.body("Provide a 'url' query parameter.")
.build();
}
try {
// renderUrlAsPdf launches Chromium, loads the page, and captures it as PDF
PdfDocument pdf = PdfDocument.renderUrlAsPdf(url);
// getBinaryData returns the raw PDF bytes ready for transmission
byte[] pdfBytes = pdf.getBinaryData();
return request.createResponseBuilder(HttpStatus.OK)
.body(pdfBytes)
.header("Content-Disposition", "attachment; filename=output.pdf")
.header("Content-Type", "application/pdf")
.build();
} catch (Exception ex) {
context.getLogger().severe("Rendering error: " + ex.getMessage());
return request.createResponseBuilder(HttpStatus.INTERNAL_SERVER_ERROR)
.body("PDF rendering failed.")
.build();
}
}
}
//:path=/static-assets/pdf/content-code-examples/tutorials/azure/RenderPdf-annotated.java
import com.microsoft.azure.functions.*;
import com.ironsoftware.ironpdf.PdfDocument;
import java.util.Optional;
public class Function {
@FunctionName("RenderPdf")
public HttpResponseMessage renderPdf(
@HttpTrigger(
name = "req",
methods = {HttpMethod.GET, HttpMethod.POST},
authLevel = AuthorizationLevel.ANONYMOUS)
HttpRequestMessage<Optional<String>> request,
final ExecutionContext context) {
// Log each invocation for Azure Monitor / Application Insights
context.getLogger().info("RenderPdf triggered.");
final String url = request.getQueryParameters().get("url");
// Return 400 if no URL was supplied
if (url == null) {
return request.createResponseBuilder(HttpStatus.BAD_REQUEST)
.body("Provide a 'url' query parameter.")
.build();
}
try {
// renderUrlAsPdf launches Chromium, loads the page, and captures it as PDF
PdfDocument pdf = PdfDocument.renderUrlAsPdf(url);
// getBinaryData returns the raw PDF bytes ready for transmission
byte[] pdfBytes = pdf.getBinaryData();
return request.createResponseBuilder(HttpStatus.OK)
.body(pdfBytes)
.header("Content-Disposition", "attachment; filename=output.pdf")
.header("Content-Type", "application/pdf")
.build();
} catch (Exception ex) {
context.getLogger().severe("Rendering error: " + ex.getMessage());
return request.createResponseBuilder(HttpStatus.INTERNAL_SERVER_ERROR)
.body("PDF rendering failed.")
.build();
}
}
}
PdfDocument.renderUrlAsPdf(url) lanza una instancia de Chromium sin cabeza dentro del contenedor, carga completamente la URL objetivo (incluido JavaScript) y captura el resultado renderizado como un PDF. Esto produce una salida que es visualmente idéntica a lo que un usuario ve en un navegador, haciéndolo adecuado para capturar aplicaciones web modernas, tableros y páginas de informes.
authLevel = AuthorizationLevel.ANONYMOUS en el disparador de la función hace que el punto final sea públicamente accesible. Para despliegues en producción, cambie esto a FUNCTION o ADMIN y pase la clave de la función en el encabezado de la solicitud.¿Cómo configurar el Dockerfile para IronPDF? {#configure-dockerfile}
El motor Chromium de IronPDF depende de un conjunto de bibliotecas compartidas de Linux que no se incluyen en la imagen base de Azure Functions. La imagen base mcr.microsoft.com/azure-functions/java:4-java17-build está construida sobre Debian 11, por lo que los paquetes deben instalarse utilizando apt.
Los siguientes comandos RUN deben añadirse al Dockerfile generado por el arquetipo Maven de Azure Functions. Colóquelos después de la instrucción FROM y antes de los pasos COPY que añaden el JAR de la aplicación:
//:path=/static-assets/pdf/content-code-examples/tutorials/azure/Dockerfile
FROM mcr.microsoft.com/azure-functions/java:4-java17-build AS installer-env
# Install system dependencies required by IronPDF's Chromium renderer
RUN apt-get update && apt-get install -y \
libgdiplus \
libxkbcommon-x11-0 \
libc6 \
libc6-dev \
libgtk2.0-0 \
libnss3 \
libatk-bridge2.0-0 \
libx11-xcb1 \
libxcb-dri3-0 \
libdrm-common \
libgbm1 \
libasound2 \
libxrender1 \
libfontconfig1 \
libxshmfence1 \
&& apt-get install -y xvfb libva-dev libgdiplus \
&& rm -rf /var/lib/apt/lists/*
# Copy the built function JAR
COPY --from=installer-env /home/site/wwwroot /home/site/wwwroot
ENV AzureWebJobsScriptRoot=/home/site/wwwroot \
AzureFunctionsJobHost__Logging__Console__IsEnabled=true
El paquete libgdiplus proporciona compatibilidad con GDI+ para el renderizado de gráficos. libnss3 y libatk-bridge2.0-0 son requeridos por las capas de sandboxing y accesibilidad de Chromium. xvfb proporciona un framebuffer virtual, que Chromium requiere incluso en modo sin cabeza en algunas configuraciones de Debian. El paso rm -rf /var/lib/apt/lists/* al final del bloque RUN elimina la caché del gestor de paquetes, manteniendo el tamaño final de la imagen lo más pequeño posible.
¿Cómo construir y enviar la imagen de Docker? {#build-push-docker}
Con el proyecto Maven construido y el Dockerfile actualizado, la imagen del contenedor se puede ensamblar y cargar a un registro de Docker. Azure Functions extrae esta imagen cuando se crea o actualiza la aplicación de función.
Paso 1 — Construir y empaquetar el proyecto Maven:
//:path=/static-assets/pdf/content-code-examples/tutorials/azure/build.sh
# Compile the Java code and package it as a JAR
mvn clean package
//:path=/static-assets/pdf/content-code-examples/tutorials/azure/build.sh
# Compile the Java code and package it as a JAR
mvn clean package
Maven compila el código de la función, resuelve todas las dependencias (incluidos ambos artefactos de IronPDF) y produce un JAR desplegable en el directorio target/. Corrija cualquier error de compilación antes de continuar.
Paso 2 — Construir la imagen de Docker:
//:path=/static-assets/pdf/content-code-examples/tutorials/azure/docker-build.sh
# Replace <DOCKER_ID> with your Docker Hub username or ACR login server
docker build --tag <DOCKER_ID>/ironpdf-azure-functions:v1.0.0 .
//:path=/static-assets/pdf/content-code-examples/tutorials/azure/docker-build.sh
# Replace <DOCKER_ID> with your Docker Hub username or ACR login server
docker build --tag <DOCKER_ID>/ironpdf-azure-functions:v1.0.0 .
La construcción instala los paquetes de Linux listados en el Dockerfile, copia el JAR y capas todo en una imagen final. En la primera construcción esto puede tomar varios minutos mientras se establecen las descargas de paquetes y la caché de capas. Las construcciones subsiguientes usando la misma imagen base son significativamente más rápidas.
Paso 3 — Empujar la imagen a Docker Hub:
//:path=/static-assets/pdf/content-code-examples/tutorials/azure/docker-push.sh
# Authenticate if not already logged in
docker login
# Push the image to the registry
docker push <DOCKER_ID>/ironpdf-azure-functions:v1.0.0
//:path=/static-assets/pdf/content-code-examples/tutorials/azure/docker-push.sh
# Authenticate if not already logged in
docker login
# Push the image to the registry
docker push <DOCKER_ID>/ironpdf-azure-functions:v1.0.0
¿Cómo desplegar la función en Azure? {#deploy-to-azure}
Con la imagen en el registro, se puede crear (o actualizar) la aplicación de función de Azure para referenciarla. El comando az functionapp create provisiona la Function App, la vincula a una cuenta de almacenamiento y establece la imagen del contenedor en un solo paso.
Paso 1 — Crear o actualizar la aplicación de función:
//:path=/static-assets/pdf/content-code-examples/tutorials/azure/az-deploy.sh
az functionapp create \
--name <APP_NAME> \
--storage-account <STORAGE_NAME> \
--resource-group AzureFunctionsContainers-rg \
--plan myPremiumPlan \
--deployment-container-image-name <DOCKER_ID>/ironpdf-azure-functions:v1.0.0
//:path=/static-assets/pdf/content-code-examples/tutorials/azure/az-deploy.sh
az functionapp create \
--name <APP_NAME> \
--storage-account <STORAGE_NAME> \
--resource-group AzureFunctionsContainers-rg \
--plan myPremiumPlan \
--deployment-container-image-name <DOCKER_ID>/ironpdf-azure-functions:v1.0.0
Reemplace <APP_NAME> con un nombre globalmente único para la Function App, <STORAGE_NAME> con un nombre de cuenta de almacenamiento de Azure existente, y <DOCKER_ID> con el nombre de usuario de Docker Hub o el servidor de inicio de sesión de ACR utilizado en el paso anterior.
La bandera --plan myPremiumPlan selecciona un plan de alojamiento Premium. El motor de Chromium de IronPDF consume una cantidad significativa de memoria durante el renderizado; el techo de memoria de 1.5 GB del plan de Consumo a menudo es insuficiente. El plan Premium proporciona al menos 3.5 GB y admite instancias pre-calentadas que eliminan la latencia de inicio en frío.
Paso 2 — Verificar el despliegue:
//:path=/static-assets/pdf/content-code-examples/tutorials/azure/az-verify.sh
# Check that the function app is running and the container has been pulled
az functionapp show \
--name <APP_NAME> \
--resource-group AzureFunctionsContainers-rg \
--query "state"
//:path=/static-assets/pdf/content-code-examples/tutorials/azure/az-verify.sh
# Check that the function app is running and the container has been pulled
az functionapp show \
--name <APP_NAME> \
--resource-group AzureFunctionsContainers-rg \
--query "state"
El comando devuelve "Running" cuando el contenedor se ha iniciado correctamente. Si devuelve "Starting" o un error, revise el Stream de registros en el portal de Azure bajo la Function App para detectar errores de extracción o inicio del contenedor.
¿Cómo desencadenar y probar la función? {#trigger-and-test}
Una vez que la Function App informa un estado Running, el punto final RenderPdf está listo para aceptar solicitudes. La URL del punto final sigue un patrón predecible basado en el nombre de la Function App y el nombre de la función definido en la anotación @FunctionName.
Prueba usando un navegador o curl:
//:path=/static-assets/pdf/content-code-examples/tutorials/azure/test-request.sh
# Replace <APP_NAME> with the Function App name
curl -o output.pdf \
"https://<APP_NAME>.azurewebsites.net/api/RenderPdf?url=https://www.example.com"
//:path=/static-assets/pdf/content-code-examples/tutorials/azure/test-request.sh
# Replace <APP_NAME> with the Function App name
curl -o output.pdf \
"https://<APP_NAME>.azurewebsites.net/api/RenderPdf?url=https://www.example.com"
Una respuesta exitosa guarda un archivo PDF llamado output.pdf en el directorio actual. La bandera -o en curl escribe el cuerpo de respuesta binaria a un archivo en lugar de imprimirlo en la terminal.
Cuando se prueba en un navegador, navega a:
https://<APP_NAME>.azurewebsites.net/api/RenderPdf?url=https://www.example.com
El navegador pedirá descargar un PDF. Ábrelo para verificar que la página se haya renderizado correctamente.
Verificación de registros para errores: Ve al portal de Azure, abre la aplicación de función y selecciona Transmisión de registro bajo Monitoreo. Las entradas del log de las llamadas context.getLogger() aparecen aquí en tiempo casi real, lo que hace que diagnosticar fallas de renderizado sea sencillo.
¿Cuáles son los próximos pasos? {#next-steps}
Esta guía mostró cómo implementar IronPDF for Java dentro de un contenedor Docker de Azure Functions, escribir una función activada por HTTP que renderice URLs como PDFs, configurar el Dockerfile con las dependencias de Linux requeridas y probar el punto final en vivo. El mismo patrón se extiende a casos de uso más avanzados con cambios mínimos.
Extiende la función:
- Renderizar cadenas HTML directamente usando
PdfDocument.renderHtmlAsPdf(htmlString)en lugar de una URL - Aplica marcas de agua, fusiona múltiples PDFs o agrega firmas digitales usando la API completa de PDF de Java de IronPDF
- Lee encabezados de solicitud o cuerpo de POST para pasar contenido HTML personalizado o opciones de renderización
Mejora la preparación para producción:
- Cambie
authLevelaFUNCTIONy rote las claves de función regularmente - Usa Azure Key Vault para almacenar cualquier secreto referenciado en las configuraciones de la aplicación
- Configura Application Insights para una observabilidad completa de la latencia de renderización y tasas de fallas
- Configura un webhook de actualización de imagen Docker para que Azure se reimplante automáticamente cuando se sube una nueva versión de imagen
Explora más guías de IronPDF for Java:
- IronPDF for Java: Guía de instalación en Linux
- Generar PDFs desde HTML en Java
- IronPDF for Java: Guía de implementación en Docker
- Referencia completa de la API de Java de IronPDF
Inicia una prueba gratuita de IronPDF para acceder a todas las funcionalidades de renderización y manipulación sin una marca de agua durante el período de evaluación. Cuando estés listo para implementar en producción, consulta las opciones de licencia de IronPDF para encontrar el plan que se ajuste a la escala del proyecto.
Preguntas Frecuentes
¿Por qué se requiere la implementación de Docker para IronPDF en Azure Functions?
IronPDF viene con un motor de renderización nativo de Chromium que debe ejecutar binarios en tiempo de ejecución. La implementación ZIP de Azure Functions no puede ejecutar binarios nativos, por lo que una imagen de contenedor Docker es la única vía de implementación compatible.
¿Qué artefactos de Maven son necesarios para ejecutar IronPDF dentro de un contenedor Docker?
Se requieren dos artefactos en pom.xml: com.ironsoftware:ironpdf para la API de Java y com.ironsoftware:ironpdf-engine-linux-x64 para el motor nativo de Chromium. Ambos deben compartir el mismo número de versión.
¿Qué paquetes de Linux debe instalar el Dockerfile para IronPDF?
El Dockerfile debe instalar libgdiplus, libxkbcommon-x11-0, libc6, libc6-dev, libgtk2.0-0, libnss3, libatk-bridge2.0-0, libx11-xcb1, libxcb-dri3-0, libdrm-common, libgbm1, libasound2, libxrender1, libfontconfig1, libxshmfence1, xvfb, y libva-dev.
¿Qué hace la función RenderPdf?
La función RenderPdf es una Azure Function activada por HTTP que lee un parámetro de consulta url, lo pasa a PdfDocument.renderUrlAsPdf, y devuelve los bytes del PDF resultante con un encabezado Content-Disposition: attachment para que quien hace la llamada reciba un archivo PDF descargable.
¿Qué plan de alojamiento de Azure Functions debería usarse para IronPDF?
Se recomienda el plan Premium. El motor Chromium de IronPDF requiere significativa memoria — a menudo más del techo de 1.5 GB del plan de Consumo. El plan Premium proporciona al menos 3.5 GB y admite instancias pre-calentadas para eliminar la latencia de inicio en frío.
¿Por qué la primera solicitud a una función recién desplegada es lenta?
La primera solicitud después de un inicio en frío puede tardar 20–60 segundos porque Azure debe obtener la imagen del contenedor e IronPDF debe inicializar su motor Chromium. Las solicitudes subsecuentes dentro del mismo contenedor responden mucho más rápido. La característica de instancias pre-calentadas del plan Premium puede eliminar este retraso.
¿Cómo se actualiza una Azure Function App existente para usar una nueva imagen Docker?
Reconstruir y enviar la nueva imagen con una etiqueta actualizada, luego ejecutar az functionapp create nuevamente con el nuevo valor --deployment-container-image-name, o actualizar la configuración del contenedor en el portal de Azure en el Centro de Implementación de la Function App.
¿Puede IronPDF renderizar cadenas HTML en una Azure Function, no solo URLs?
Sí. Reemplace PdfDocument.renderUrlAsPdf(url) con PdfDocument.renderHtmlAsPdf(htmlString) para renderizar directamente una cadena HTML. La estructura de la función y el manejo de la respuesta permanecen iguales.
¿Qué sucede si falta el parámetro de consulta url en la solicitud?
La función verifica si el parámetro url es null y regresa una respuesta HTTP 400 Bad Request con un mensaje descriptivo antes de intentar cualquier renderización de PDF.


