Jak skonfigurować IronPDF dla Java na Azure

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

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

Kod poniżej pokazuje pełną funkcję RenderPdf Azure. Akceptuje parametr zapytania url i zwraca PDF jako strumień bajtów. Dodaj to do Function.java po zakończeniu konfiguracji zależności Maven w sekcjach, które następują.

//: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 Dockera. 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ć Azure CLI 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) i Dockerfile (definicja kontenera).

Zwróć uwagęArchetyp Maven dla Azure Functions generuje host.json i local.settings.json obok pom.xml. Plik local.settings.json przechowuje zmienne środowiskowe dla rozwoju lokalnego — domyślnie jest wykluczony z kontroli źródeł 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: biblioteka ironpdf, która dostarcza API Java, oraz ironpdf-engine-linux-x64, która zawiera natywny silnik Chromium skompilowany dla Linux x86-64. Artefakt silnika jest tym, co sprawia, że wdrożenie Dockera jest obowiązkowe — zawiera binaria, które muszą być wykonane w czasie runtime.

Otwórz pom.xml i dodaj poniższe wewnątrz bloku <dependencies>. Zamień LATEST_VERSION na bieżące wydanie dostępne na 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. Niepasujące wersje między ironpdf a ironpdf-engine-linux-x64 powodują wyjątek wykonania, gdy funkcja po raz pierwszy próbuje renderować PDF.

Po zaktualizowaniu pom.xml, uruchom mvn dependency:resolve, aby zweryfikować, czy Maven może pobrać oba artefakty z Central, zanim zainwestujesz czas w budowanie obrazu Dockera.

PoradySprawdź 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ą Azure wyzwalaną przez HTTP, która akceptuje parametr zapytania url, renderuje docelową stronę za pomocą silnika opartego na Chromium IronPDF i zwraca wynikowy PDF jako odpowiedź binarna 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ść ją w src/main/java/com/example/Function.java, zamieniając lub rozszerzając placeholder 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 głowy wewnątrz kontenera, w pełni ładuje docelowy URL (w tym JavaScript) i zapisuje renderowany wynik jako 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. Dla wdrożeń produkcyjnych zmień to na FUNCTION lub ADMIN i przekaż 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. Bazowy obraz mcr.microsoft.com/azure-functions/java:4-java17-build jest zbudowany na Debianie 11, więc pakiety muszą być instalowane za pomocą apt.

Poniższe polecenia RUN muszą być dodane do Dockerfile wygenerowanego przez archetyp Maven Azure Functions. Umieść je po instrukcji FROM i przed krokami COPY, które dodają aplikację JAR:

//: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+ dla renderowania grafiki. libnss3 i libatk-bridge2.0-0 są wymagane przez warstwy piaskownicy i dostępności w Chromium. xvfb dostarcza wirtualną ramkę buforową, której Chromium potrzebuje nawet w trybie bez głowy na niektórych konfiguracjach Debiana. Krok rm -rf /var/lib/apt/lists/* na końcu bloku RUN usuwa pamięć podręczną menedżera paczek, aby utrzymać rozmiar końcowego obrazu 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 produkuje wdrażalny JAR 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 zapewnia Function App, łączy ją z kontem magazynu i ustawia obraz kontenera w jednym kroku.

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

Zamień <APP_NAME> na globalnie unikalną nazwę dla Function App, <STORAGE_NAME> na istniejącą nazwę konta Azure Storage i <DOCKER_ID> na nazwę użytkownika Docker Hub lub serwer logowania ACR używany 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 został pomyślnie uruchomiony. Jeśli zwraca "Starting" lub błąd, sprawdź Strumień Dzienników w portalu Azure w ramach Function App w celu błędów pobierania kontenera lub uruchomienia.

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 Function App melduje stan Running, punkt końcowy RenderPdf jest gotowy do akceptowania żądań. URL punktu końcowego podąża za przewidywalnym wzorcem opartym na nazwie Function App 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

Pomyślna odpowiedź zapisuje plik PDF nazwany output.pdf do bieżącego katalogu. Flaga -o w curl zapisuje binarną treść odpowiedzi do pliku zamiast wypisywać ją na 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. Zapisy z wywołań context.getLogger() pojawiają się tutaj niemal w czasie rzeczywistym, co ułatwia diagnozowanie awarii 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ę:

  • Ręderuj łańcuchy HTML bezpośrednio za pomocą PdfDocument.renderHtmlAsPdf(htmlString) zamiast 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ą:

  • Zmień authLevel na FUNCTION i regularnie obracaj klucze funkcji
  • 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.6 właśnie wydany
Still Scrolling Icon

Wciąż przewijasz?

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