如何在Azure Function中運行IronPDF for Java

This article was translated from English: Does it need improvement?
Translated
View the article in English

  • IronPDF for Java only supports Docker deployment.
  • Zip Deployment is not supported, since IronPDF requires execution of binaries at runtime.

  1. 請參考在 Linux 上使用自定義映像創建函數的 Microsoft 官方指南

    • 對於Choose a programming language -> 選擇Java

    • 按照指南操作,直到您的應用程序運行起來。
  2. 添加 IronPDF 依賴性

    • 使用最新的<version>將此添加到您的 pom 中
    <dependencies>
        <dependency>
                <groupId>com.ironsoftware</groupId>
                <artifactId>ironpdf</artifactId>
                <version>2022.xx.x</version>
            </dependency>
            <dependency>
                <groupId>com.ironsoftware</groupId>
                <artifactId>ironpdf-engine-linux-x64</artifactId>
                <version>2022.xx.x</version>
            </dependency>
        </dependencies>
    <dependencies>
        <dependency>
                <groupId>com.ironsoftware</groupId>
                <artifactId>ironpdf</artifactId>
                <version>2022.xx.x</version>
            </dependency>
            <dependency>
                <groupId>com.ironsoftware</groupId>
                <artifactId>ironpdf-engine-linux-x64</artifactId>
                <version>2022.xx.x</version>
            </dependency>
        </dependencies>
XML
  • 注意:ironpdf-engine-linux 是在 Docker 中運行 IronPDF 所必需的
  1. 新增一個RenderPdf函數

    • Function.java中新增一個功能

    • 此功能將接收一個URL並返回渲染的PDF。
    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) {
        context.getLogger().info("Java HTTP trigger processed a request. (RenderPdf)");
        // Parse query parameter
        final String url = request.getQueryParameters().get("url");
        if (url == null) {
            return request.createResponseBuilder(HttpStatus.BAD_REQUEST).body("Please pass a url on the query string").build();
        } else {
            context.getLogger().info("IronPDF try to render url: " + url);
            PdfDocument pdfDocument = com.ironsoftware.ironpdf.PdfDocument.renderUrlAsPdf(url);
            byte [] content = pdfDocument.getBinaryData();
            return request.createResponseBuilder(HttpStatus.OK)
                    .body(content)
                    .header("Content-Disposition", "attachment; filename=ironpdf_result.pdf")
                    .build();
        }
    }
    }
    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) {
        context.getLogger().info("Java HTTP trigger processed a request. (RenderPdf)");
        // Parse query parameter
        final String url = request.getQueryParameters().get("url");
        if (url == null) {
            return request.createResponseBuilder(HttpStatus.BAD_REQUEST).body("Please pass a url on the query string").build();
        } else {
            context.getLogger().info("IronPDF try to render url: " + url);
            PdfDocument pdfDocument = com.ironsoftware.ironpdf.PdfDocument.renderUrlAsPdf(url);
            byte [] content = pdfDocument.getBinaryData();
            return request.createResponseBuilder(HttpStatus.OK)
                    .body(content)
                    .header("Content-Disposition", "attachment; filename=ironpdf_result.pdf")
                    .build();
        }
    }
    }
JAVA
  1. 更新 Dockerfile

    • 添加 IronPDF Linux 所需的套件。

    從範例中,基礎 Docker 映像為 mcr.microsoft.com/azure-functions/java:4-java$JAVA_VERSION-build,它是Debian 11

    因此,我們需要將這些包添加到 Docker 文件中。

   RUN apt update \
   && apt 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
   RUN apt-get install -y xvfb libva-dev libgdiplus
  1. 將您的功能重新部署到 Azure

    1. 構建和打包 mvn clean package

    2. 建置 Docker 映像,例如:docker build --tag <DOCKER_ID>/azurefunctionsimage:v1.0.0 .

    3. 推送 Docker 映像,例如 docker push <DOCKER_ID>/azurefunctionsimage:v1.0.0

    4. 更新 Azure 函數,例如 az functionapp create --name <APP_NAME> --storage-account <STORAGE_NAME> --resource-group AzureFunctionsContainers-rg --plan myPremiumPlan --deployment-container-image-name <DOCKER_ID>/azurefunctionsimage:v1.0.0
  2. 享受 IronPDF

    • 觸發函數位址:https://<APP_NAME>.azurewebsites.net/api/RenderPdf?url=https://www.google.com

    • 注意:函式首次觸發時,可能因初始化而緩慢或失敗,但之後就會正常。