Jak skonfigurować IronPDF dla Java na Azure
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();
}
}
}
Rozpocznij używanie IronPDF w swoim projekcie już dziś dzięki darmowej wersji próbnej.
Spis treści
- Jakie są wymagania wstępne?
- Jak skonfigurować projekt Azure Function?
- Jak dodać zależności IronPDF do projektu Maven?
- Jak napisać funkcję RenderPdf?
- Jak skonfigurować Dockerfile dla IronPDF?
- Jak zbudować i wypchnąć obraz Docker?
- Jak wdrożyć funkcję do Azure?
- Jak uruchomić i przetestować funkcję?
- Jakie są kolejne kroki?
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:
- Azure CLI (wersja 2.40 lub późniejsza)
- Docker Desktop z włączonymi kontenerami Linux
- Maven 3.8 lub późniejszy
- JDK 11 lub JDK 17 (JDK 17 jest zalecaną wersją LTS)
- Azure Functions Core Tools v4
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
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
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).
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>
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.
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();
}
}
}
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.
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.
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
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 .
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
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
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"
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.
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"
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.
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ń
authLevelnaFUNCTIONi 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:
- IronPDF dla Java: Przewodnik instalacji na Linuksie
- Generowanie PDF-ów z HTML w Java
- IronPDF dla Java: Przewodnik wdrożenia Docker
- Pełna Dokumentacja API IronPDF 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.


