Java用IronPDFをAzureファンクションで実行する方法

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

  • IronPDF for JavaはDockerデプロイメントにのみ対応しています。
  • IronPDFは実行時にバイナリを実行する必要があるため、Zip展開には対応していません。

1.Microsoft Official Guide for Creating Function on Linux Using Custom Image に従ってください。

  • プログラミング言語を選択してください -> 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-x64はDockerでIronPDFを実行するために必須です。

3.RenderPdf関数を追加してください。

  • Function.javaに新しい関数を追加してください。
  • この関数はURLを受け取り、レンダリングされたPDFを返します。

    import com.microsoft.azure.functions.*;
    import com.ironsoftware.ironpdf.PdfDocument;
    import java.util.Optional;
    
    public class Function {
    
        /**
         * Azure function to render a URL as a PDF and return it.
         * Triggered by an HTTP request with a URL query string parameter.
         */
        @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 for the URL
            final String url = request.getQueryParameters().get("url");
    
            // Check if the URL parameter is provided
            if (url == null) {
                return request.createResponseBuilder(HttpStatus.BAD_REQUEST)
                        .body("Please pass a url on the query string")
                        .build();
            } else {
                try {
                    context.getLogger().info("IronPDF is attempting to render the URL: " + url);
    
                    // Render the given URL as a PDF
                    PdfDocument pdfDocument = PdfDocument.renderUrlAsPdf(url);
    
                    // Convert the PDF document to binary data
                    byte[] content = pdfDocument.getBinaryData();
    
                    // Return the PDF as an attachment in the response
                    return request.createResponseBuilder(HttpStatus.OK)
                            .body(content)
                            .header("Content-Disposition", "attachment; filename=ironpdf_result.pdf")
                            .build();
                } catch (Exception e) {
                    context.getLogger().severe("Failed to render PDF: " + e.getMessage());
                    return request.createResponseBuilder(HttpStatus.INTERNAL_SERVER_ERROR)
                            .body("An error occurred while rendering the PDF.")
                            .build();
                }
            }
        }
    }
    import com.microsoft.azure.functions.*;
    import com.ironsoftware.ironpdf.PdfDocument;
    import java.util.Optional;
    
    public class Function {
    
        /**
         * Azure function to render a URL as a PDF and return it.
         * Triggered by an HTTP request with a URL query string parameter.
         */
        @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 for the URL
            final String url = request.getQueryParameters().get("url");
    
            // Check if the URL parameter is provided
            if (url == null) {
                return request.createResponseBuilder(HttpStatus.BAD_REQUEST)
                        .body("Please pass a url on the query string")
                        .build();
            } else {
                try {
                    context.getLogger().info("IronPDF is attempting to render the URL: " + url);
    
                    // Render the given URL as a PDF
                    PdfDocument pdfDocument = PdfDocument.renderUrlAsPdf(url);
    
                    // Convert the PDF document to binary data
                    byte[] content = pdfDocument.getBinaryData();
    
                    // Return the PDF as an attachment in the response
                    return request.createResponseBuilder(HttpStatus.OK)
                            .body(content)
                            .header("Content-Disposition", "attachment; filename=ironpdf_result.pdf")
                            .build();
                } catch (Exception e) {
                    context.getLogger().severe("Failed to render PDF: " + e.getMessage());
                    return request.createResponseBuilder(HttpStatus.INTERNAL_SERVER_ERROR)
                            .body("An error occurred while rendering the PDF.")
                            .build();
                }
            }
        }
    }
    JAVA

4.Dockerfileの更新

  • IronPdf.Linux 必須パッケージを追加してください。 この例から、ベースとなるDockerイメージはmcr.microsoft.com/azure-functions/java:4-java$JAVA_VERSION-buildで、Debian 11に基づいています。 So we need to add these packages to the Dockerfile.

    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
  • 他のLinuxディストロについてはIronPDF.Linuxインストールガイドをご覧ください。

5.関数をAzureに再デプロイ 1.ビルドとパッケージ:mvnクリーンパッケージ

  1. Build Docker image: docker build --tag <DOCKER_ID>/azurefunctionsimage:v1.0.0 . 3.Dockerイメージをプッシュします:docker push/azurefunctionsimage:v1.0.0<//code>. 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
      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
    SHELL
  1. IronPDFをお楽しみください
    • トリガー機能https://<APP_NAME>.azurewebsites.net/api/RenderPdf?url=https://www.google.com
    • 注意: 関数が最初に起動したときは、動作が遅くなったり、初期化で失敗したりすることがありますが、その後は安定して動作するはずです。

よくある質問

Azure Functionsを使用してJavaでPDFジェネレーターを作成する方法は?

Dockerを通じてIronPDFをデプロイすることで、Javaを使用してAzure FunctionsでPDFジェネレーターを作成できます。これはAzure Function環境内でPDF生成タスクを処理するためにIronPDFライブラリを使用することを含みます。

Azure FunctionsのIronPDFにはなぜDockerデプロイメントが必要ですか?

Azure FunctionsのIronPDFにはDockerデプロイメントが必要です。なぜなら、実行時にバイナリを実行する必要があり、Zipデプロイメント方法ではサポートされていないためです。

MavenプロジェクトにIronPDF依存関係を追加する手順は?

MavenプロジェクトにIronPDFの依存関係を追加するには、`pom.xml`ファイルにIronPDFおよび`ironpdf-engine-linux-x64`ライブラリを含めます。互換性のために最新のバージョン番号を使用していることを確認してください。

Azure FunctionのRenderPdf関数はどのように機能しますか?

Azure FunctionのRenderPdf関数は、HTTPリクエストからURLを読み取り、IronPDFの`PdfDocument.renderUrlAsPdf`メソッドを使用してURLをPDFとしてレンダリングし、PDFをレスポンスの添付ファイルとして返します。

IronPDFのDockerfileに必要なLinuxパッケージは何ですか?

IronPDFのDockerfileには、`libgdiplus`、`libxkbcommon-x11-0`、`libc6`、および`libgtk2.0-0`などのLinuxパッケージを含める必要があり、Debianベースのイメージ内での適切な機能を保証します。

PDF生成関数を初めてトリガーするときに何が期待されますか?

PDF生成関数を初めてトリガーすると、初期化プロセスのために遅くなったり失敗したりすることがあります。以後の実行はより一貫してパフォーマンスが発揮されるはずです。

Azure FunctionのDockerイメージをどのようにデプロイできますか?

Azure FunctionのDockerイメージをデプロイするには、`mvn clean package`でプロジェクトをビルドし、Dockerイメージを作成してDockerレジストリにプッシュし、この新しいイメージを使用するようにAzure Functionを更新します。

AzureでPDF生成関数をトリガーする正しいURL形式は何ですか?

PDF生成関数をトリガーするには、URL形式:`https://.azurewebsites.net/api/RenderPdf?url=`を使用します。

カスタムDockerイメージを使用してAzure Functionをセットアップするためのリソースはどこにありますか?

カスタムDockerイメージを使用してAzure Functionをセットアップするために、LinuxでのAzure Functionを作成するためのMicrosoft公式ガイドを参照できます。

カーティス・チャウ
テクニカルライター

Curtis Chauは、カールトン大学でコンピュータサイエンスの学士号を取得し、Node.js、TypeScript、JavaScript、およびReactに精通したフロントエンド開発を専門としています。直感的で美しいユーザーインターフェースを作成することに情熱を持ち、Curtisは現代のフレームワークを用いた開発や、構造の良い視覚的に魅力的なマニュアルの作成を楽しんでいます。

開発以外にも、CurtisはIoT(Internet of Things)への強い関心を持ち、ハードウェアとソフトウェアの統合方法を模索しています。余暇には、ゲームをしたりDiscordボットを作成したりして、技術に対する愛情と創造性を組み合わせています。

準備はできましたか?
バージョン: 2025.12 リリース