Bu kılavuz, IronPDF for Java Azure İşlevleri kapsayıcı içinde dağıtmak ve talep üzerine PDF'ler oluşturmak için gereken her şeyi kapsar. IronPDF, yerel bir Chromium render motoru gemisi olduğundan, Docker imajı olarak paketlenmelidir — Azure İşlevleri üzerindeki standart Zip dağıtımı, IronPDF'nin çalıştırma zamanında güvendiği ikili dosyaları çalıştıramaz. Bu kılavuzu izleyerek, çalışan bir Azure İşlevi, bir URL'yi sorgu parametresi olarak kabul eder ve indirilebilir bir dosya olarak tam olarak render edilmiş bir PDF döndürür.

Microsoft tarafından önerilen özel konteyner iş akışını Linux tabanlı Azure İşlevleri için kullanır. Bir Maven projesi, işlev kodunu ve bağımlılık yönetimini sağlar. Docker, toplu resim oluşturur, bir kayıt defterine gönderir ve Azure Function App tarafından referans gösterilir. Dağıtıldığında, soğuk başlatma süresi ana performans düşüncesidir - sonraki çağrılar hızlı ve tutarlıdır.

Başlamadan önce, Azure CLI, Docker Desktop, Maven 3.8+ ve JDK 11 veya JDK 17'nin yerel olarak yüklü olduğundan emin olun. Ayrıca, Function Apps ve saklama hesapları oluşturma izni olan aktif bir Azure aboneliği gereklidir.

[Hızlı Başlangıç: IronPDF for Java'yı Azure İşlevlerine Dağıt

Aşağıdaki kod, RenderPdf Azure Function'ın tamamını göstermektedir. url sorgu parametresini kabul eder ve bir PDF bayt akışı döndürür. Aşağıdaki bölümlerde Maven bağımlılık kurulumunu tamamladıktan sonra bunu Function.java'ye ekleyin.

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

Bugün IronPDF ile projenizde ücretsiz bir deneme ile başlayın.

İlk Adım:
green arrow pointer

İçindekiler

Ön Gereksinimler Nedir? {#önkoşullar}

Başlamadan önce, gerekli tüm araçların kurulu olduğundan ve Azure aboneliğinin aktif olduğundan emin olun. Bu kontrolleri atlamak genellikle dağıtım sürecinin ortasında yapım hatalarına yol açar.

Yerel araçlar gereklidir:

Azure kaynakları gereklidir:

  • Aktif bir Azure aboneliği
  • Kaynak Grupları, Saklama Hesapları ve Fonksiyon Uygulama Planları oluşturma izinleri
  • Yapılı imajı barındırmak için bir Docker Hub hesabı (veya Azure Container Registry)

ÖnemliIronPDF for Java, herhangi bir Docker konteyneri içinde çalıştırılırken ironpdf-engine-linux-x64 artefaktını gerektirir. Azure Functions üzerindeki standart Zip dağıtımı, IronPDF'nin yerel ikili dosyalarını çalıştıramaz — Docker, desteklenen tek dağıtım yöntemidir.

Bir sonraki bölüme geçmeden önce Azure CLI'yi doğrulamak için az login komutunu çalıştırın.

Azure Fonksiyonu Projesi Nasıl Ayarlanır? {#set-up-project}

Özel bir resim kullanarak Linux üzerinde bir fonksiyon oluşturmak için Microsoft kılavuzu, tam iskele oluşturma sürecini kapsar. Dil için Java seçimiyle ilgili önemli bir seçim: programlama dili için istendiğinde Java seçin.

İlgili adımların hepsini çalıştırarak iskele projesi yapımını ve yerel olarak çalışan yedek işlev görmüş hale gelmesini sağlayın. Bunu şu şekilde doğrulayın:

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

Yerel bir HTTP isteğine yanıt olarak yer tutucu yanıt verdiğinde, proje yapısı doğru ve IronPDF entegrasyonu için hazırdır. Anahtar dosyalar pom.xml (Maven yapılandırması), Function.java (işlev kodu) ve Dockerfile (konteyner tanımı) şeklindedir.

Lütfen dikkate alınAzure Functions Maven arketipi, host.json ve local.settings.json ile birlikte pom.xml oluşturur. local.settings.json dosyası, yerel geliştirme için ortam değişkenlerini depolar — varsayılan olarak kaynak kontrolünden hariç tutulur ve asla commit edilmemelidir.

IronPDF Bağımlılıkları Maven Projenize Nasıl Eklenir? {#add-IronPDF-dependencies}

IronPDF for Java, Maven Central aracılığıyla dağıtılır. İki artefakt gereklidir: Java API'sini sağlayan çekirdek ironpdf kütüphanesi ve Linux x86-64 için derlenmiş yerel Chromium motorunu içeren ironpdf-engine-linux-x64. Motor artefaktı, Docker dağıtımını zorunlu kılan unsurdur — çalışma zamanında yürütülmesi gereken ikili dosyaları içerir.

pom.xml dosyasını açın ve <dependencies> bloğunun içine aşağıdakileri ekleyin. LATEST_VERSION ifadesini, Maven Central'da bulunan güncel sürümle değiştirin:

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

Her iki artefakt da aynı sürüm numarasını kullanmalıdır. ironpdf ve ironpdf-engine-linux-x64 arasındaki sürüm uyuşmazlıkları, işlev ilk kez bir PDF oluşturmaya çalıştığında çalışma zamanı istisnasına neden olur.

pom.xml'yi güncelledikten sonra, Docker görüntüsünü oluşturmaya zaman ayırmadan önce mvn dependency:resolve'yi çalıştırarak Maven'ın her iki yapıyı da Central'dan indirebildiğini doğrulayın.

İpuçlarıEn son kararlı sürüm için IronPDF for Java sürüm notlarına bakın. En son sürümü kullanmak, en son Chromium render motoru ile uyumluluğu sağlar ve bilinen hatalardan kaçınır.

RenderPdf Fonksiyonunu Nasıl Yazarsınız? {#write-renderpdf-function}

RenderPdf işlevi, url sorgu parametresini kabul eden, IronPDF'nin Chromium tabanlı motorunu kullanarak hedef sayfayı görüntüleyen ve sonuçta ortaya çıkan PDF'yi Content-Disposition: attachment başlığıyla ikili bir yanıt olarak döndüren, HTTP tarafından tetiklenen bir Azure İşlevidir. Bu başlık, tarayıcının (veya HTTP istemcisinin) PDF'yi satır içi yerine indirmesini söyler.

Tam fonksiyon kodu yukarıdaki Hızlı Başlangıç'ta gösterilmiştir. Bunu src/main/java/com/example/Function.java içine yerleştirin ve Maven arketipi tarafından oluşturulan yer tutucuyu değiştirin veya genişletin.

//: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), konteyner içinde başsız bir Chromium örneği başlatır, hedef URL'yi (JavaScript dahil) tamamen yükler ve görüntülenen çıktıyı PDF olarak yakalar. Bu, bir kullanıcı tarayıcıda gördüğüne görsel olarak eşdeğer çıktı üretir, bu da modern web uygulamalarını, pano ve rapor sayfalarını yakalamak için uygun hale getirir.

Önemliİşlev tetikleyicisindeki authLevel = AuthorizationLevel.ANONYMOUS ayarı, uç noktayı herkese açık hale getirir. Üretim dağıtımları için bunu FUNCTION veya ADMIN olarak değiştirin ve işlev anahtarını istek başlığında geçirin.

IronPDF için Dockerfile Nasıl Yapılandırılır? {#configure-dockerfile}

IronPDF'nin Chromium motoru, temel Azure İşlevleri imajında bulunmayan bir dizi paylaşılan Linux kütüphanesine bağlıdır. mcr.microsoft.com/azure-functions/java:4-java17-build temel görüntüsü Debian 11 üzerine kurulmuştur, bu nedenle paketler apt kullanılarak yüklenmelidir.

Aşağıdaki RUN komutları, Azure Functions Maven arketipi tarafından oluşturulan Dockerfile dosyasına eklenmelidir. Bunları, FROM komutunun arkasına ve uygulama JAR dosyasını ekleyen COPY adımlarının önüne yerleştirin:

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

libgdiplus paketi, grafik işleme için GDI+ uyumluluğu sağlar. libnss3 ve libatk-bridge2.0-0, Chromium'un sanal alan ve erişilebilirlik katmanları tarafından gereklidir. xvfb, bazı Debian yapılandırmalarında Chromium'un başsız modda bile ihtiyaç duyduğu sanal bir çerçeve tamponunu sağlar. rm -rf /var/lib/apt/lists/* bloğunun sonundaki RUN adımı, paket yöneticisi önbelleğini kaldırarak son görüntü boyutunu olabildiğince küçük tutar.

Lütfen dikkate alınAzure Functions temel image sürümü değişirse veya başka bir Linux dağıtımı temel olarak kullanılırsa, gerekli paketler farklı olabilir. IronPDF Linux Kurulum Kılavuzu'ndan Debian, Ubuntu, CentOS ve Alpine çapında tam bağımlılık matrisi için danışın.

Docker Görüntüsünü Nasıl Oluşturur ve Itersiniz? {#build-push-docker}

Maven projesi yapıldı ve Dockerfile güncellendiğinde, konteyner görüntüsü oluşturulabilir ve bir Docker kayıt defterine yüklenebilir. Azure İşlevleri, İşlev Uygulaması oluşturulduğunda veya güncellendiğinde bu görüntüyü çeker.

Adım 1 — Maven projesini oluşturun ve paketleyin:

//: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, işlev kodunu derler, tüm bağımlılıkları (her iki IronPDF artefaktı dahil) çözer ve target/ dizininde dağıtılabilir bir JAR dosyası oluşturur. Devam etmeden önce derleme hatalarını düzeltin.

Adım 2 — Docker görüntüsünü oluşturun:

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

Yapı, Dockerfile'da listelenen Linux paketlerini yükler, JAR'ı kopyalar ve her şeyi son bir görüntüye katmanlaştırır. İlk yapı sırasında bu, paket indirmeleri ve katman önbelleği kurulduğu için birkaç dakika sürebilir. Aynı temel görüntüyü kullanan sonraki yapımlar önemli ölçüde daha hızlıdır.

Adım 3 — Görüntüyü Docker Hub'a gönderin:

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

İpuçlarıAzure Container Registry (ACR), Docker Hub'a özel bir alternatiftir. ACR, Azure Active Directory ile doğrudan entegre olur ve görüntü gizliliğinin önemli olduğu üretim iş yükleri için önerilen seçimdir.

İşlevi Azure'a Nasıl Dağıtırsınız? {#deploy-to-azure}

Görüntü kayıt defterinde olduğunda, Azure İşlev Uygulaması oluşturulabilir (veya güncellenebilir) ve ona referans verir. az functionapp create komutu, Function App'i hazırlar, bir depolama hesabına bağlar ve tek bir adımda konteyner görüntüsünü ayarlar.

Adım 1 — İşlev Uygulamasını oluşturun veya güncelleyin:

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

<APP_NAME>'yi Function App için küresel olarak benzersiz bir adla, <STORAGE_NAME>'yi mevcut bir Azure Depolama hesabı adıyla ve <DOCKER_ID>'yi önceki adımda kullanılan Docker Hub kullanıcı adı veya ACR oturum açma sunucusuyla değiştirin.

--plan myPremiumPlan bayrağı, Premium barındırma planını seçer. IronPDF'in Chromium motoru, işleme sırasında önemli miktarda bellek tüketir; Tüketim planının 1,5 GB bellek sınırı çoğunlukla yetersizdir. Premium plan en az 3,5 GB sağlar ve soğuk başlangıç gecikmesini ortadan kaldıran ön ısıtmalı örnekleri destekler.

Adım 2 — Dağıtımı doğrulayın:

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

Konteyner başarıyla başlatıldığında komut "Running" değerini döndürür. "Starting" veya bir hata döndürürse, Azure portalındaki Function App altındaki Log Stream'i kontrol ederek konteyner çekme veya başlatma hataları olup olmadığını kontrol edin.

UyarıAzure İşlevlerinde IronPDF için Tüketim (Sunucusuz) planı önerilmez. Chromium ile PDF işleme, Tüketim planının ayırdığı bellekten daha fazlasını gerektirir. Bellek hatalarından kaçınmak için Premium veya Ayrılmış (Uygulama Hizmeti) planı kullanın.

İşlevi Nasıl Tetikler ve Test Edersiniz? {#trigger-and-test}

Function App Running durumunu bildirdiğinde, RenderPdf uç noktası istekleri kabul etmeye hazırdır. Uç nokta URL'si, Function App adı ve @FunctionName ek açıklamasında tanımlanan işlev adına dayalı olarak öngörülebilir bir kalıbı izler.

Bir tarayıcı veya curl kullanarak test edin:

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

Başarılı bir yanıt, output.pdf adlı bir PDF dosyasını geçerli dizine kaydeder. curl'daki -o bayrağı, ikili yanıt gövdesini terminale yazdırmak yerine bir dosyaya yazar.

Bir tarayıcıda test ederken şuraya gidin:

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

Tarayıcı, bir PDF indirmeye başlamayı isteyecektir. Sayfanın doğru şekilde işlendiğini doğrulamak için açın.

ÖnemliSoğuk başlangıçtan sonra ilk istek, Azure kapsayıcı görüntüsünü çekerken ve IronPDF Chromium'u başlatırken 20–60 saniye sürebilir. Aynı kapsayıcı ömrü içinde yapılan sonraki istekler çok daha hızlıdır. Premium planın önceden ısıtılmış örnek özelliği, en az bir örneği sürekli çalışır halde tutarak soğuk başlangıçları ortadan kaldırır.

Hatalar için günlükleri kontrol etme: Azure portalına gidin, İşlev Uygulamasını açın ve İzleme altında Günlük Akışı seçin. context.getLogger() çağrılarının günlük girişleri burada neredeyse gerçek zamanlı olarak görünür, bu da görüntüleme hatalarının teşhisini kolaylaştırır.

Bir Sonraki Adımlar Nelerdir? {#next-steps}

Bu kılavuz, bir Azure İşlevleri Docker konteyneri içinde IronPDF for Java'yı dağıtmayı, URL'leri PDF olarak işleyen bir HTTP tetikli işlev yazmayı, Dockerfile'ı gerekli Linux bağımlılıklarıyla yapılandırmayı ve canlı uç noktayı test etmeyi gösterdi. Aynı desen, minimal değişikliklerle daha gelişmiş kullanım durumlarına yayılır.

İşlevi genişletin:

  • HTML dizelerini URL yerine PdfDocument.renderHtmlAsPdf(htmlString) kullanarak doğrudan işleyin
  • Su işaretleri uygulayın, birden fazla PDF'yi birleştirin veya dijital imzalar ekleyin IronPDF'in tam Java PDF API'si kullanarak
  • Özel HTML içeriği veya işleme seçeneklerini geçirmek için istek başlıklarını veya POST gövdesini okuyun

Üretim hazırlığını iyileştirin:

  • authLevel'yi FUNCTION ile değiştirin ve işlev tuşlarını düzenli olarak döndürün
  • Azure Key Vault kullanarak uygulama ayarlarında referans verilen herhangi bir sırrı depolayın
  • Application Insights'ı işleme gecikmesi ve hata oranlarının uçtan uca gözlemlenebilirliği için yapılandırın
  • Yeni bir görüntü sürümü gönderildiğinde Azure'un otomatik olarak yeniden dağıtması için bir Docker görüntü güncelleme webhook'u kurun

Daha fazla IronPDF for Java kılavuzu keşfedin:

Ücretsiz bir IronPDF denemesi başlatın ve değerlendirme süresi boyunca tüm işleme ve manipülasyon özelliklerine filigran olmadan erişin. Üretime hazır olduğunuzda, IronPDF lisanslama seçeneklerini görüntüleyin ve proje ölçeğine uygun planı bulun.

Sıkça Sorulan Sorular

Neden IronPDF'nin Azure Fonksiyonlarındaki Docker dağıtımı gerekiyor?

IronPDF, çalışma zamanında ikili dosyalarını çalıştırması gereken yerel bir Chromium render motoru ile birlikte gelir. Azure Fonksiyonları Zip dağıtımı, yerel ikili dosyaları çalıştıramaz, bu nedenle Docker konteyner görüntüsü tek desteklenen dağıtım yoludur.

Bir Docker konteynerinde IronPDF'yi çalıştırmak için hangi Maven artefaktları gereklidir?

pom.xml dosyasında iki eser gereklidir: Java API için com.ironsoftware:ironpdf ve yerel Chromium motoru için com.ironsoftware:ironpdf-engine-linux-x64. İkisi de aynı sürüm numarasını paylaşmalıdır.

IronPDF için Dockerfile’ın hangi Linux paketlerini yüklemesi gerekiyor?

Dockerfile 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 ve libva-dev kütüphanelerini yüklemelidir.

RenderPdf fonksiyonu ne yapar?

RenderPdf fonksiyonu, url sorgu parametresini okuyan, bunu PdfDocument.renderUrlAsPdf'ye aktaran ve sonuçta ortaya çıkan PDF baytlarını Content-Disposition: attachment başlığı ile döndüren bir HTTP tetiklemeli Azure Fonksiyonudur, böylece çağrıcı indirilebilir bir PDF dosyası alır.

IronPDF için hangi Azure Fonksiyonları barındırma planı kullanılmalı?

Premium plan önerilir. IronPDF'nin Chromium motoru önemli miktarda bellek gerektirir - genellikle Tüketim planındaki 1.5 GB tavanının üzerinde. Premium plan en az 3.5 GB sağlar ve soğuk başlangıç gecikmesini ortadan kaldırmak için önceden ısıtılmış örnekleri destekler.

Yeni dağıtılan bir fonksiyona yapılan ilk istek neden yavaş?

Soğuk başlangıçtan sonraki ilk istek, yaklaşık 20–60 saniye sürebilir çünkü Azure, konteyner görüntüsünü çekmeli ve IronPDF, kendi Chromium motorunu başlatmalıdır. Aynı konteyner ömrü içindeki sonraki istekler çok daha hızlı yanıt verir. Premium planın önceden ısıtılmış örnekler özelliği bu gecikmeyi ortadan kaldırabilir.

Mevcut bir Azure Fonksiyon Uygulamasını yeni bir Docker görüntüsü kullanarak nasıl güncelleyebilirim?

Yeni bir etiket ile yeni görüntüyü yeniden oluşturup itin, ardından yeni --deployment-container-image-name değeriyle tekrar az functionapp create çalıştırın veya Azure portalında Fonksiyon Uygulaması'nın Dağıtım Merkezi altındaki konteyner ayarlarını güncelleyin.

IronPDF bir Azure Fonksiyonunda sadece URL'leri değil, HTML dizelerini de render edebilir mi?

Evet. HTML dizelerini doğrudan oluşturmak için PdfDocument.renderUrlAsPdf(url) yerine PdfDocument.renderHtmlAsPdf(htmlString) kullanın. Fonksiyon yapısı ve yanıt işleme aynı kalır.

İstekten url sorgu parametresi eksikse ne olur?

Fonksiyon url parametresinin null olup olmadığını kontrol eder ve herhangi bir PDF render denemesinden önce açıklayıcı bir mesajla bir HTTP 400 Kötü İstek yanıtı döndürür.

Curtis Chau
Teknik Yazar

Curtis Chau, Bilgisayar Bilimleri alanında Lisans Derecesine (Carleton Üniversitesi) sahip ve Node.js, TypeScript, JavaScript ve React konularında uzmanlaşmış ön uç geliştirmeyle ilgileniyor. Sezgisel ve estetik açıdan hoş kullanıcı arayüzleri oluşturma tutkunu, Curtis modern çerçevelerle çalışmayı ve iyi yapı...

Daha Fazla Oku
Başlamaya Hazır mısınız?
Sürüm: 2026.5 just released
Still Scrolling Icon

Hâlâ Kaydırıyor Musunuz?

Hızlıca kanıt ister misiniz?
bir örnek çalıştır HTML'nizi bir PDF'ye dönüştüğünü izleyin.