Ten przewodnik obejmuje wszystko, co potrzebne do wdrożenia IronPDF dla Java wewnątrz kontenera funkcji Azure i generowania PDF-ów na żądanie z serwerless endpointu HTTP. Ponieważ IronPDF dostarcza natywny silnik renderujący Chromium, musi być zapakowany jako obraz Docker — standardowe wdrożenie ZIP na funkcjach Azure nie może wykonać binariów, od których IronPDF polega w czasie wykonania. Postępując zgodnie z tym przewodnikiem, działająca funkcja Azure zaakceptuje adres URL jako parametr zapytania i zwróci w pełni zrenderowany PDF jako plik do pobrania.

Podejście to wykorzystuje zalecany przez Microsoft niestandardowy przepływ kontenerów dla funkcji Azure opartych na Linux. Projekt Maven dostarcza kod funkcji i zarządzanie zależnościami. Docker buduje obraz kontenera, który jest przesyłany do rejestru i odnosi się do niego aplikacja funkcji Azure. Po wdrożeniu czas zimnego startu jest głównym czynnikiem wydajnościowym — kolejne wywołania są szybkie i spójne.

Przed rozpoczęciem upewnij się, że lokalnie zainstalowane są Azure CLI, Docker Desktop, Maven 3.8+ i JDK 11 lub JDK 17. Aktywna subskrypcja Azure z uprawnieniami do tworzenia aplikacji funkcji i kont storage jest również wymagana.

‌‌Szybki start: Wdrażanie IronPDF dla Java na Azure Functions

Poniższy kod przedstawia kompletną funkcję Azure Function RenderPdf. Akceptuje parametr zapytania url i zwraca strumień bajtów PDF. Dodaj to do Function.java po zakończeniu konfiguracji zależności Maven w kolejnych sekcjach.

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

Rozpocznij używanie IronPDF w swoim projekcie już dziś dzięki darmowej wersji próbnej.

Pierwszy krok:
green arrow pointer

Spis treści

Jakie są wymagania wstępne? {#prerequisites}

Przed rozpoczęciem potwierdź, że wszystkie wymagane narzędzia są zainstalowane i subskrypcja Azure jest aktywna. Pominięcie tych kontroli często skutkuje niepowodzeniem budowy w połowie procesu wdrożenia.

Wymagane lokalne narzędzia:

Wymagane zasoby Azure:

  • Aktywna subskrypcja Azure
  • Uprawnienia do tworzenia grup zasobów, kont storage i planów aplikacji funkcji
  • Konto Docker Hub (lub Azure Container Registry) do hostowania zbudowanego obrazu

WażneIronPDF for Java wymaga artefaktu ironpdf-engine-linux-x64 podczas działania w dowolnym kontenerze Docker. Standardowe wdrożenie ZIP na funkcjach Azure nie może wykonać natywnych binariów IronPDF — Docker jest jedyną wspieraną metodą wdrożenia.

Uruchom az login, aby uwierzytelnić interfejs CLI platformy Azure przed przejściem do następnej sekcji.

Jak skonfigurować projekt Azure Function? {#set-up-project}

Przewodnik Microsoft dotyczący tworzenia funkcji na Linux przy użyciu niestandardowego obrazu obejmuje kompletny proces tworzenia szkieletu. Postępuj zgodnie z tymi etapami z jednym ważnym wyborem: wybierz Java, gdy zostaniesz poproszony o język programowania.

Pracuj przez przewodnik, aż projekt z szablonem zostanie zbudowany i funkcja zastępcza uruchomi się lokalnie przy użyciu Azure Functions Core Tools. Zweryfikuj to za pomocą:

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

Po odpowiedzi szablonu na lokalne żądanie HTTP, struktura projektu jest poprawna i gotowa na integrację z IronPDF. Kluczowe pliki to pom.xml (konfiguracja Maven), Function.java (kod funkcji) oraz Dockerfile (definicja kontenera).

Zwróć uwagęArchetyp Azure Functions Maven generuje host.json i local.settings.json wraz z pom.xml. Plik local.settings.json przechowuje zmienne środowiskowe do lokalnego programowania — domyślnie jest on wykluczony z kontroli wersji i nigdy nie powinien być zatwierdzany.

Jak dodać zależności IronPDF do projektu Maven? {#add-IronPDF-dependencies}

IronPDF dla Java jest dystrybuowany przez Maven Central. Wymagane są dwa artefakty: podstawowa biblioteka ironpdf, która udostępnia interfejs API Java, oraz ironpdf-engine-linux-x64, która zawiera natywny silnik Chromium skompilowany dla systemu Linux x86-64. Artefakt silnika sprawia, że wdrożenie w Dockerze jest obowiązkowe — zawiera on pliki binarne, które muszą być uruchomione w czasie wykonywania.

Otwórz pom.xml i dodaj poniższy tekst wewnątrz bloku <dependencies>. Zastąp LATEST_VERSION aktualną wersją dostępną w 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

Oba artefakty muszą używać tego samego numeru wersji. Niezgodność wersji między ironpdf a ironpdf-engine-linux-x64 powoduje wyjątek wykonania, gdy funkcja po raz pierwszy próbuje wyrenderować plik PDF.

Po zaktualizowaniu pom.xml uruchom mvn dependency:resolve, aby sprawdzić, czy Maven może pobrać oba artefakty z Central, zanim poświęcisz czas na kompilację obrazu Docker.

{t:(Sprawdź uwagi do wydań IronPDF dla Java dla najnowszej stabilnej wersji. Korzystanie z najnowszej wersji zapewnia zgodność z najnowszym silnikiem renderującym Chromium i unika znanych błędów.)}]

Jak napisać funkcję RenderPdf? {#write-renderpdf-function}

Funkcja RenderPdf jest funkcją platformy Azure wyzwalaną przez protokół HTTP, która akceptuje parametr zapytania url, renderuje docelową stronę przy użyciu silnika IronPDF opartego na Chromium i zwraca wynikowy plik PDF jako odpowiedź binarną z nagłówkiem Content-Disposition: attachment. Ten nagłówek mówi przeglądarce (lub klientowi HTTP), aby pobrała plik PDF zamiast wyświetlać go w linii.

Kompletny kod funkcji pokazano w powyższym Szybkim Starcie. Umieść go w src/main/java/com/example/Function.java, zastępując lub rozszerzając symbol zastępczy wygenerowany przez archetyp 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) uruchamia instancję Chromium bez interfejsu użytkownika wewnątrz kontenera, w pełni ładuje docelowy adres URL (w tym JavaScript) i przechwytuje wyrenderowany wynik jako plik PDF. To generuje wyjście wizualnie identyczne z tym, co użytkownik widzi w przeglądarce, co czyni go odpowiednim do przechwytywania nowoczesnych aplikacji webowych, pulpitów i stron raportów.

WażneUstawienie authLevel = AuthorizationLevel.ANONYMOUS w wyzwalaczu funkcji sprawia, że punkt końcowy jest publicznie dostępny. W przypadku wdrożeń produkcyjnych należy zmienić to na FUNCTION lub ADMIN i przekazać klucz funkcji w nagłówku żądania.

Jak skonfigurować Dockerfile dla IronPDF? {#configure-dockerfile}

Silnik Chromium IronPDF zależy od zestawu współdzielonych bibliotek Linux, które nie są zawarte w bazowym obrazie dla Azure Functions. Obraz bazowy mcr.microsoft.com/azure-functions/java:4-java17-build jest zbudowany na Debianie 11, więc pakiety muszą być zainstalowane przy użyciu apt.

Następujące polecenia RUN muszą zostać dodane do pliku Dockerfile wygenerowanego przez archetyp Maven dla Azure Functions. Umieść je po instrukcji FROM i przed krokami COPY, które dodają plik JAR aplikacji:

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

Pakiet libgdiplus zapewnia zgodność z GDI+ w zakresie renderowania grafiki. libnss3 i libatk-bridge2.0-0 są wymagane przez warstwy sandboxingu i dostępności Chromium. xvfb zapewnia wirtualny bufor ramki, którego Chromium wymaga nawet w trybie bezgłowym w niektórych konfiguracjach Debiana. Krok rm -rf /var/lib/apt/lists/* na końcu bloku RUN usuwa pamięć podręczną menedżera pakietów, dzięki czemu ostateczny rozmiar obrazu jest jak najmniejszy.

Zwróć uwagęJeśli zmieni się wersja podstawowego obrazu Azure Functions lub jako bazę użyje się innej dystrybucji Linuksa, wymagane pakiety mogą się różnić. Konsultuj się Przewodnikiem instalacji IronPDF dla Linuksa dla pełnej macierzy zależności na Debian, Ubuntu, CentOS i Alpine.

Jak zbudować i przesłać obraz Docker? {#build-push-docker}

Po zbudowaniu projektu Maven i zaktualizowaniu Dockerfile, obraz kontenera może zostać złożony i przesłany do rejestru Docker. Azure Functions pobiera ten obraz, gdy aplikacja funkcji jest tworzona lub aktualizowana.

Krok 1 — Zbuduj i zapakuj projekt 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 kompiluje kod funkcji, rozwiązuje wszystkie zależności (w tym oba artefakty IronPDF) i tworzy plik JAR gotowy do wdrożenia w katalogu target/. Należy naprawić wszelkie błędy kompilacji przed kontynuacją.

Krok 2 — Zbuduj obraz 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

Budowa instaluje pakiety Linuksa wymienione w Dockerfile, kopiuje JAR i warstwy wszystko w końcowym obrazie. Podczas pierwszej budowy może to zająć kilka minut, ponieważ ustanawiane są pobierania pakietów i pamięć podręczna warstw. Kolejne budowy przy użyciu tego samego obrazu bazowego są znacznie szybsze.

Krok 3 — Prześlij obraz do 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

PoradyAzure Container Registry (ACR) jest prywatną alternatywą dla Docker Hub. ACR integruje się bezpośrednio z Azure Active Directory i jest zalecaną opcją dla środowisk produkcyjnych, w których ochrona prywatności obrazów jest istotna.

Jak wdrożyć funkcję na Azure? {#deploy-to-azure}

Z obrazem w rejestrze, aplikacja Azure Function może być utworzona (lub zaktualizowana) do odwołania się do niego. Polecenie az functionapp create w jednym kroku przygotowuje aplikację Function App, łączy ją z kontem magazynu danych i ustawia obraz kontenera.

Krok 1 — Utwórz lub zaktualizuj aplikację funkcji:

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

Zastąp <APP_NAME> globalnie unikalną nazwą aplikacji Function App, <STORAGE_NAME> istniejącą nazwą konta Azure Storage, a <DOCKER_ID> nazwą użytkownika Docker Hub lub serwerem logowania ACR używanym w poprzednim kroku.

Flaga --plan myPremiumPlan wybiera plan hostingowy Premium. Silnik Chromium IronPDF zużywa znaczną ilość pamięci podczas renderowania; 1,5 GB limit pamięci planu Consumption jest często niewystarczający. Plan Premium zapewnia co najmniej 3,5 GB i obsługuje wstępnie rozgrzane instancje, które eliminują opóźnienia zimnego startu.

Krok 2 — Zweryfikuj wdrożenie:

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

Polecenie zwraca "Running", gdy kontener uruchomił się pomyślnie. Jeśli zwraca "Starting" lub błąd, sprawdź strumień logów w portalu Azure w aplikacji Function App pod kątem błędów pobierania kontenera lub uruchamiania.

OstrzeżeniePlan Consumption (Serverless) nie jest zalecany dla IronPDF na Azure Functions. Renderowanie PDF z Chromium wymaga więcej pamięci niż plan Consumption alokuje. Użyj planu Premium lub Dedykowanego (App Service), aby uniknąć błędów z brakiem pamięci.

Jak uruchomić i przetestować funkcję? {#trigger-and-test}

Gdy aplikacja Function App zgłosi stan Running, punkt końcowy RenderPdf jest gotowy do przyjmowania żądań. Adres URL punktu końcowego jest zgodny z przewidywalnym wzorcem opartym na nazwie aplikacji funkcyjnej oraz nazwie funkcji zdefiniowanej w adnotacji @FunctionName.

Przetestuj, używając przeglądarki lub 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

Prawidłowa odpowiedź zapisuje plik PDF o nazwie output.pdf w bieżącym katalogu. Flaga -o w curl zapisuje binarną treść odpowiedzi do pliku zamiast wyświetlać ją w terminalu.

Podczas testowania w przeglądarce, przejdź do:

https://<APP_NAME>.azurewebsites.net/api/RenderPdf?url=https://www.example.com

Przeglądarka poprosi o pobranie pliku PDF. Otwórz go, aby zweryfikować, że strona została poprawnie wyrenderowana.

WażnePierwsze żądanie po zimnym starcie może zająć 20–60 sekund, ponieważ Azure pobiera obraz kontenera i IronPDF inicjalizuje Chromium. Kolejne żądania w czasie życia tego samego kontenera są znacznie szybsze. Funkcja wstępnie rozgrzanej instancji planu Premium eliminuje zimne starty, utrzymując co najmniej jedną instancję ciągle działającą.

Sprawdzanie logów w celu wykrycia błędów: Przejdź do portalu Azure, otwórz aplikację funkcji i wybierz Strumień Logów w sekcji Monitoring. Wpisy dziennika z wywołań context.getLogger() pojawiają się tutaj niemal w czasie rzeczywistym, co ułatwia diagnozowanie błędów renderowania.

Jakie są kolejne kroki? {#next-steps}

Ten przewodnik demonstrował, jak wdrożyć IronPDF dla Java wewnątrz kontenera Docker Azure Functions, napisać funkcję wywoływaną przez HTTP, która renderuje URL do PDF, skonfigurować Dockerfile z wymaganymi zależnościami Linuksa i przetestować działający punkt końcowy. Ten sam schemat rozszerza się na bardziej zaawansowane przypadki użycia z minimalnymi zmianami.

Rozszerz funkcję:

  • Renderuj ciągi HTML bezpośrednio za pomocą PdfDocument.renderHtmlAsPdf(htmlString) zamiast adresu URL
  • Stosuj znaki wodne, scalaj wiele PDF-ów lub dodawaj cyfrowe podpisy, używając pełnego API Java IronPDF
  • Odczytuj nagłówki żądań lub korpus POST, aby przekazać niestandardową treść HTML lub opcje renderowania

Popraw gotowość produkcyjną:

  • Zamień authLevel na FUNCTION i regularnie zmieniaj przyciski funkcyjne
  • Używaj Azure Key Vault do przechowywania wszelkich tajemnic odwołanych w ustawieniach aplikacji
  • Skonfiguruj Application Insights dla pełnej obserwowalności opóźnień renderowania i wskaźników błedów
  • Ustaw webhook aktualizacji obrazu Docker, aby Azure automatycznie wdrażało ponownie, gdy nowa wersja obrazu zostanie przesłana

Odkryj więcej przewodników IronPDF dla Java:

Rozpocznij darmowy okres próbny IronPDF, aby uzyskać dostęp do wszystkich funkcji renderowania i manipulacji bez znaku wodnego podczas okresu oceny. Gdy będziesz gotowy do wdrożenia produkcyjnego, zobacz opcje licencjonowania IronPDF, aby znaleźć plan pasujący do skali projektu.

Często Zadawane Pytania

Dlaczego wdrażanie Docker jest wymagane dla IronPDF na Azure Functions?

IronPDF dostarcza natywny silnik renderowania Chromium, który musi wykonywać binaria w czasie wykonania. Wdrażanie Zip na Azure Functions nie może uruchamiać natywnych binariów, więc obraz kontenera Docker to jedyna obsługiwana ścieżka wdrożeniowa.

Które artefakty Maven są potrzebne do uruchomienia IronPDF wewnątrz kontenera Docker?

W pom.xml wymagane są dwa artefakty: com.ironsoftware:ironpdf dla API Java i com.ironsoftware:ironpdf-engine-linux-x64 dla natywnego silnika Chromium. Oba muszą mieć ten sam numer wersji.

Jakie pakiety Linux musi zainstalować Dockerfile dla IronPDF?

Dockerfile musi zainstalować 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, i libva-dev.

Co robi funkcja RenderPdf?

Funkcja RenderPdf to wyzwalana przez HTTP funkcja Azure, która odczytuje parametr url zapytania, przekazuje go do PdfDocument.renderUrlAsPdf, i zwraca wynikowe bajty PDF z nagłówkiem Content-Disposition: attachment, dzięki czemu dzwoniący otrzymuje możliwy do pobrania plik PDF.

Który plan hostingu Azure Functions powinien być użyty dla IronPDF?

Zaleca się plan Premium. Silnik Chromium IronPDF wymaga znaczącej pamięci - często więcej niż 1,5 GB górnego limitu w planie Konsumpcji. Plan Premium zapewnia co najmniej 3,5 GB i wspiera instancje wstępnie podgrzewane, eliminując opóźnienie przy zimnym starcie.

Dlaczego pierwsze żądanie do nowo wdrożonej funkcji jest wolne?

Pierwsze żądanie po zimnym starcie może trwać 20–60 sekund, ponieważ Azure musi pobrać obraz kontenerowy, a IronPDF musi zainicjować swój silnik Chromium. Kolejne żądania w tym samym czasie życia kontenera odpowiadają znacznie szybciej. Funkcje instancji wstępnie podgrzewanych planu Premium mogą wyeliminować to opóźnienie.

Jak zaktualizować istniejącą aplikację Azure Functions, aby używała nowego obrazu Docker?

Przebuduj i prześlij nowy obraz z zaktualizowaną etykietą, a następnie uruchom ponownie az functionapp create z nową wartością --deployment-container-image-name, lub zaktualizuj ustawienia kontenera w portalu Azure w Centrum Wdrożenia Aplikacji Funkcji.

Czy IronPDF może renderować ciągi HTML w funkcji Azure, nie tylko URL-e?

Tak. Zastąp PdfDocument.renderUrlAsPdf(url) przez PdfDocument.renderHtmlAsPdf(htmlString), aby renderować bezpośrednio ciągi HTML. Struktura funkcji i obsługa odpowiedzi pozostają bez zmian.

Co się stanie, jeśli parametr zapytania url nie zostanie podany w żądaniu?

Funkcja sprawdza, czy parametr url nie jest null i zwraca odpowiedź HTTP 400 Błędne Żądanie z opisowym komunikatem przed próbą renderowania PDF.

Curtis Chau
Autor tekstów technicznych

Curtis Chau posiada tytuł licencjata z informatyki (Uniwersytet Carleton) i specjalizuje się w front-endowym rozwoju, z ekspertką w Node.js, TypeScript, JavaScript i React. Pasjonuje się tworzeniem intuicyjnych i estetycznie przyjemnych interfejsów użytkownika, Curtis cieszy się pracą z nowoczesnymi frameworkami i tworzeniem dobrze zorganizowanych, atrakcyjnych wizualnie podrę...

Czytaj więcej
Gotowy, aby rozpocząć?
Wersja: 2026.5 just released
Still Scrolling Icon

Wciąż przewijasz?

Czy chcesz szybko dowodu?
Uruchom przykład i zobacz, jak Twój kod HTML zamienia się w plik PDF.