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();
        }
    }
}
JAVA

Comience a usar IronPDF en su proyecto hoy con una prueba gratuita.

Primer Paso:
green arrow pointer

Tabla de contenido

¿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:

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

ImportanteIronPDF for Java requiere el artefacto 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
SHELL

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

Por favor notaEl arquetipo Maven de Azure Functions genera un 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>
XML

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();
        }
    }
}
JAVA

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.

ImportanteLa configuración 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.

Por favor notaSi cambia la versión de la imagen base de Azure Functions o se utiliza una distro de Linux diferente como base, los paquetes requeridos pueden diferir. Consulte la Guía de instalación de IronPDF en Linux para una matriz completa de dependencias a través de Debian, Ubuntu, CentOS y Alpine.

¿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
SHELL

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

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
SHELL

ConsejosAzure Container Registry (ACR) es una alternativa privada a Docker Hub. ACR se integra directamente con Azure Active Directory y es la opción recomendada para cargas de trabajo de producción donde la privacidad de la imagen es importante.

¿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
SHELL

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"
SHELL

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.

AdvertenciaEl plan de Consumo (sin servidor) no se recomienda para IronPDF en Azure Functions. El renderizado de PDF con Chromium requiere más memoria de la que el plan de Consumo asigna. Utilice un plan Premium o Dedicado (App Service) para evitar errores de falta de memoria.

¿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"
SHELL

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.

ImportanteLa primera solicitud después de un inicio en frío puede tardar de 20 a 60 segundos mientras Azure descarga la imagen del contenedor e IronPDF inicializa Chromium. Las solicitudes subsiguientes dentro de la misma vida útil del contenedor son mucho más rápidas. La característica de instancia pre-calentada del plan Premium elimina los inicios en frío manteniendo al menos una instancia funcionando continuamente.

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 authLevel a FUNCTION y 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:

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.

Curtis Chau
Escritor Técnico

Curtis Chau tiene una licenciatura en Ciencias de la Computación (Carleton University) y se especializa en el desarrollo front-end con experiencia en Node.js, TypeScript, JavaScript y React. Apasionado por crear interfaces de usuario intuitivas y estéticamente agradables, disfruta trabajando con frameworks modernos y creando manuales bien ...

Leer más
¿Listo para empezar?
Versión: 2026.5 just released
Still Scrolling Icon

¿Aún desplazándote?

¿Quieres una prueba rápida?
ejecutar una muestra Mira cómo tu HTML se convierte en PDF.