Altbilgi içeriğine atla
IRONPDF KULLANARAK

IronPDF ile Azure'da PDF Generatorı Oluşturma (.NET 10 Rehberi)

IronPDF'ın profesyonel render motorunu Azure'un esnek bulut altyapısıyla birleştirdiğinizde Azure PDF oluşturma süreci basitleşir. Bu kılavuz, HTML dönüşümünden karmaşık belge manipülasyonuna kadar her şeyi ele alan, üretime hazır PDF oluşturucu oluşturmayı, dağıtmayı ve ayarlamayı gösterir.

Güvenilir, bulut tabanlı bir PDF oluşturucu oluşturmak benzersiz zorluklar sunar. Sandbox sınırlamaları, hafıza kısıtlamaları ve dağıtılmış sistem karmaşıklığı arasında birçok geliştirici, üretime hazır bir çözüm bulmakta zorlanır. Azure ve IronPDF burada iyi bir kombinasyon oluşturur -- IronPDF, iş yükünüzle ölçeklenen profesyonel PDF oluşturma yetenekleri sunarken temel özellikleri korur.

Faturalar, raporlar üretiyor veya web içeriğini PDF'lere dönüştürüyorsanız, bu kılavuz size güvenilir bir Azure PDF oluşturucu oluşturma yolunu gösterir. Basit HTML dönüşümünden karmaşık belge manipülasyonuna kadar her şeyi ele alırken performans ve maliyet için ayarlamalar yapacaksınız.

Ücretsiz IronPDF denemesiyle başlayın ve bulut PDF çözümünüzü oluşturmaya devam edin.

İyi bir Azure PDF oluşturucu ne yapar?

Her PDF çözümü, bulut ortamlarında iyi çalışmaz. Üretime hazır bir Azure PDF oluşturucu, temel belge oluşturma ihtiyaçlarının ötesine geçmelidir. Azure Fonksiyonları dağıtım seçeneklerini anlamak başarıyı garanti eder.

Bulut PDF oluşturma için performans neden önemlidir?

Performans ve ölçeklenebilirlik, çözümünüzün başarısını tanımlar. Oluşturucunuz, darboğaz olmadan eşzamanlı talepleri idare etmeli, zirveler sırasında otomatik olarak ölçeklenmeli ve karmaşık belgelerde tutarlı yanıt süreleri sağlamalıdır. Bulut ortamları için tasarlanmış, sunucusuz mimari nuanslarını anlayan bir kütüphane seçin.

Azure'a özgü kısıtlamaları nelere dikkate almalısınız?

Azure'un platformu belirli dikkate alınması gereken hususlar sunar. Uygulama Hizmeti sandbox, Win32/grafik API'lerini kısıtlar -- masaüstü grafik yığınları kullanan kütüphaneler başarısız olabilir. Tüketim planlarındaki hafıza kısıtlamaları, daha büyük belgelerde başarısızlıklara neden olabilir. Dağıtılan doğa, verimli durum bırakmayan işlemleri gerektirir. Ayrıntılı Azure dağıtım sorun giderme için tam sorun giderme dokümantasyonuna bakın.

Hangi Kurumsal Özellikler Esastır?

Kurumsal uygulamalar, sadece HTML dönüşümünden daha fazlasına ihtiyaç duyar. Modern PDF oluşturucular JavaScript oluşturmayı desteklemeli, karmaşık CSS'leri ele almalı ve şifreleme ve dijital imzalar gibi güvenlik özellikleri sunmalıdır. IronPDF, Chrome tabanlı render motoru ile Azure dağıtımı için iyi bir uyumluluk sunar.

Azure Uygulama Hizmetis ve Azure Fonksiyonları arasındaki fark nedir?

Azure Uygulama Hizmetis ve Azure Fonksiyonları her ikisi de bulut uygulamalarını barındırır ancak farklı amaçlara hizmet eder. Doğru olanı seçmek, mimarinizi, maliyet modelinizi ve dağıtım yaklaşımınızı etkiler.

Azure Uygulama Hizmetis'i nasıl seçersiniz?

Azure Uygulama Hizmetis, web uygulamaları, REST API'ler ve mobil backend'ler için tam yönetimli barındırma sağlar. Sürekli kaynaklar sunar, uzun süren işlemleri destekler ve yerleşik ölçekleme, dağıtım slotları ve CI/CD entegrasyonunu içerir. Bu özellikler, sürekli çalışan uygulamalar için idealdir.

Azure Fonksiyonları'ın daha iyi bir seçim olduğunu nasıl belirlersiniz?

Azure Fonksiyonları, olay odaklı, kısa ömürlü görevler için sunucusuz hesaplama sağlar. Fonksiyonlar yalnızca tetiklendiğinde (HTTP isteği, zamanlayıcı veya mesaj kuyruğu) çalışır ve yalnızca çalışma zamanı için ödeme yaparsınız. Arkaplan işleri, veri işleme, otomasyon scriptleri ve sürekli çalışan ana bilgisayarlar olmadan mikro hizmetler için mükemmeldir.

PDF Oluşturma için Azure Barındırma Seçenekleri
Özellik Uygulama Hizmeti Azure Fonksiyonları
Faturalama modeli Sabit aylık Çalıştırma başına
Boşa maliyet Her zaman faturalandırılır Boşta sıfır
Soğuk başlatma riski Minimum Evet (Tüketim planı)
Uzun süren PDF'ler Destekli Zaman aşımı limitleri geçerlidir
Özel konteynerler Destekli Yalnızca Premium/Dedicated

Azure Fonksiyonları için IronPDF Nasıl Kurulur?

Azure Fonksiyonları içinde IronPDF kurmak için doğru paketi seçmek gerekir. Kutuphanede, Windows ve Linux ortamları için seçenekler sunulur. Doğru paket seçimi, optimal performansı garantiler ve uyumluluk sorunlarını önler.

Hangi IronPDF Paketi Kurulmalı?

Windows tabanlı Azure Fonksiyonları için NuGet'te bulunan standart IronPDF paketi kullanın. Linux konteynerleri icin, daha hizli soğuk başlangiçlar için, IronPdf.Linux ile paketten calistirma dağıtımını kullanın.

# NuGet Package Manager (Windows / Uygulama Hizmeti)
Install-Package IronPdf

# .NET CLI (cross-platform)
dotnet add package IronPdf
# NuGet Package Manager (Windows / Uygulama Hizmeti)
Install-Package IronPdf

# .NET CLI (cross-platform)
dotnet add package IronPdf
SHELL
# Linux / container deployments
Install-Package IronPdf.Linux

# .NET CLI alternative
dotnet add package IronPdf.Linux
# Linux / container deployments
Install-Package IronPdf.Linux

# .NET CLI alternative
dotnet add package IronPdf.Linux
SHELL

Azure Fonksiyonları için IronPDF Nasıl Yapılandırılır?

İşte .NET 10 için üst düzey ifadeler kullanılarak doğru yapılandırma ile PDF oluşturmayı yöneten tam bir Azure Function:

using IronPdf;
using Microsoft.Azure.Functions.Worker;
using Microsoft.Azure.Functions.Worker.Http;
using Microsoft.Extensions.Logging;
using System.Net;

// Configure IronPDF once at startup
License.LicenseKey = Environment.GetEnvironmentVariable("IronPdfLicenseKey") ?? string.Empty;
Installation.LinuxAndDockerDependenciesAutoConfig = true;
Installation.ChromeGpuMode = IronPdf.Engines.Chrome.ChromeGpuModes.Disabled;
Installation.CustomDeploymentDirectory = "/tmp";

var host = new HostBuilder()
    .ConfigureFunctionsWorkerDefaults()
    .Build();

host.Run();

// Azure Function class
public class PdfGeneratorFunction
{
    private readonly ILogger _logger;

    public PdfGeneratorFunction(ILoggerFactory loggerFactory)
    {
        _logger = loggerFactory.CreateLogger<PdfGeneratorFunction>();
    }

    [Function("GeneratePdf")]
    public async Task<HttpResponseData> Run(
        [HttpTrigger(AuthorizationLevel.Function, "post", Route = "generate-pdf")] HttpRequestData req)
    {
        string htmlContent = await req.ReadAsStringAsync() ?? string.Empty;
        var response = req.CreateResponse(HttpStatusCode.OK);

        if (string.IsNullOrWhiteSpace(htmlContent))
        {
            response.StatusCode = HttpStatusCode.BadRequest;
            await response.WriteStringAsync("HTML content is required.");
            return response;
        }

        try
        {
            var renderer = new ChromePdfRenderer
            {
                RenderingOptions = new ChromePdfRenderOptions
                {
                    MarginTop = 10,
                    MarginBottom = 10,
                    MarginLeft = 10,
                    MarginRight = 10,
                    EnableJavaScript = true
                }
            };

            using var pdf = renderer.RenderHtmlAsPdf(htmlContent);
            response.Headers.Add("Content-Type", "application/pdf");
            await response.WriteBytesAsync(pdf.BinaryData);
            _logger.LogInformation("Generated PDF with {PageCount} pages.", pdf.PageCount);
            return response;
        }
        catch (Exception ex)
        {
            _logger.LogError(ex, "Error generating PDF.");
            response.StatusCode = HttpStatusCode.InternalServerError;
            await response.WriteStringAsync($"PDF generation failed: {ex.Message}");
            return response;
        }
    }
}
using IronPdf;
using Microsoft.Azure.Functions.Worker;
using Microsoft.Azure.Functions.Worker.Http;
using Microsoft.Extensions.Logging;
using System.Net;

// Configure IronPDF once at startup
License.LicenseKey = Environment.GetEnvironmentVariable("IronPdfLicenseKey") ?? string.Empty;
Installation.LinuxAndDockerDependenciesAutoConfig = true;
Installation.ChromeGpuMode = IronPdf.Engines.Chrome.ChromeGpuModes.Disabled;
Installation.CustomDeploymentDirectory = "/tmp";

var host = new HostBuilder()
    .ConfigureFunctionsWorkerDefaults()
    .Build();

host.Run();

// Azure Function class
public class PdfGeneratorFunction
{
    private readonly ILogger _logger;

    public PdfGeneratorFunction(ILoggerFactory loggerFactory)
    {
        _logger = loggerFactory.CreateLogger<PdfGeneratorFunction>();
    }

    [Function("GeneratePdf")]
    public async Task<HttpResponseData> Run(
        [HttpTrigger(AuthorizationLevel.Function, "post", Route = "generate-pdf")] HttpRequestData req)
    {
        string htmlContent = await req.ReadAsStringAsync() ?? string.Empty;
        var response = req.CreateResponse(HttpStatusCode.OK);

        if (string.IsNullOrWhiteSpace(htmlContent))
        {
            response.StatusCode = HttpStatusCode.BadRequest;
            await response.WriteStringAsync("HTML content is required.");
            return response;
        }

        try
        {
            var renderer = new ChromePdfRenderer
            {
                RenderingOptions = new ChromePdfRenderOptions
                {
                    MarginTop = 10,
                    MarginBottom = 10,
                    MarginLeft = 10,
                    MarginRight = 10,
                    EnableJavaScript = true
                }
            };

            using var pdf = renderer.RenderHtmlAsPdf(htmlContent);
            response.Headers.Add("Content-Type", "application/pdf");
            await response.WriteBytesAsync(pdf.BinaryData);
            _logger.LogInformation("Generated PDF with {PageCount} pages.", pdf.PageCount);
            return response;
        }
        catch (Exception ex)
        {
            _logger.LogError(ex, "Error generating PDF.");
            response.StatusCode = HttpStatusCode.InternalServerError;
            await response.WriteStringAsync($"PDF generation failed: {ex.Message}");
            return response;
        }
    }
}
Imports IronPdf
Imports Microsoft.Azure.Functions.Worker
Imports Microsoft.Azure.Functions.Worker.Http
Imports Microsoft.Extensions.Logging
Imports System.Net

' Configure IronPDF once at startup
License.LicenseKey = If(Environment.GetEnvironmentVariable("IronPdfLicenseKey"), String.Empty)
Installation.LinuxAndDockerDependenciesAutoConfig = True
Installation.ChromeGpuMode = IronPdf.Engines.Chrome.ChromeGpuModes.Disabled
Installation.CustomDeploymentDirectory = "/tmp"

Dim host = New HostBuilder() _
    .ConfigureFunctionsWorkerDefaults() _
    .Build()

host.Run()

' Azure Function class
Public Class PdfGeneratorFunction
    Private ReadOnly _logger As ILogger

    Public Sub New(loggerFactory As ILoggerFactory)
        _logger = loggerFactory.CreateLogger(Of PdfGeneratorFunction)()
    End Sub

    <Function("GeneratePdf")>
    Public Async Function Run(
        <HttpTrigger(AuthorizationLevel.Function, "post", Route:="generate-pdf")> req As HttpRequestData) As Task(Of HttpResponseData)

        Dim htmlContent As String = Await req.ReadAsStringAsync() OrElse String.Empty
        Dim response = req.CreateResponse(HttpStatusCode.OK)

        If String.IsNullOrWhiteSpace(htmlContent) Then
            response.StatusCode = HttpStatusCode.BadRequest
            Await response.WriteStringAsync("HTML content is required.")
            Return response
        End If

        Try
            Dim renderer = New ChromePdfRenderer With {
                .RenderingOptions = New ChromePdfRenderOptions With {
                    .MarginTop = 10,
                    .MarginBottom = 10,
                    .MarginLeft = 10,
                    .MarginRight = 10,
                    .EnableJavaScript = True
                }
            }

            Using pdf = renderer.RenderHtmlAsPdf(htmlContent)
                response.Headers.Add("Content-Type", "application/pdf")
                Await response.WriteBytesAsync(pdf.BinaryData)
                _logger.LogInformation("Generated PDF with {PageCount} pages.", pdf.PageCount)
                Return response
            End Using
        Catch ex As Exception
            _logger.LogError(ex, "Error generating PDF.")
            response.StatusCode = HttpStatusCode.InternalServerError
            Await response.WriteStringAsync($"PDF generation failed: {ex.Message}")
            Return response
        End Try
    End Function
End Class
$vbLabelText   $csharpLabel

Bu Yapılandırma Ayarlar Neden Önemli?

Yapılandırma ayarları, Azure dağıtımının başarılı olmasını sağlar. LinuxAndDockerDependenciesAutoConfig, Chrome bağımlılıklarını doğru bir şekilde yapılandırır, GPU modunu devre dışı bırakmak ise sunucusuz işlem sorunlarını önler. Dağıtım dizinini /tmp olarak ayarlamak, sinirli Azure Fonksiyonları ortamlarında 'erişim engellendi' hatalarının yaygin bir kaynağı olan yazi erişimi sağlar.

Örnek Çıktı PDF Dosyası

Azure Function tarafından üretilen aylık rapor PDF'si satış metriklerini, bölgesel veri tablosunu ve profesyonel yeşil başliklı şirket özetini göstermektedir.

PDF Oluşturma için Hangi Azure Hosting Yükseltmesini Seçmelisiniz?

IronPDF ile PDF oluşturmak, daha hafif iş yüklerinden daha fazla işlem ve grafik desteği gerektirir. Hem Microsoft hem de IronPDF, GDI+ kısıtlamaları, paylaşılan işlem kısıtlamaları ve yetersiz belleği nedeniyle Ücretsiz, Paylaşılan ve Tüketim seviyelerinden kaçınılmasını önerir.

IronPDF için Önerilen Azure Seviyeleri
Seviye GDI+ Desteği PDF için Uygun Hayırtlar
Ücretsiz / Paylaşılan Hayır Hayır Kısıtlanmış Sandbox
Tüketim (Fonksiyonlar) Sınırlı Sınırlı Bellek sınırları uygulanır
Temel / Standart Evet Evet Minimum önerilen
Premium / İzole Evet Evet (en iyi) Tam özellik erişimi

Yüksek hacimli iş yükleri için Premium veya İzole seviyeler, tahsis edilmiş işlem, VNET entegrasyonu ve soğuk başlatma gecikmeleri olmadan size sağlar - bunların hepsi doğrudan PDF verimi ve güvenilirliğini artırır.

Azure Fonksiyonları ile Sunucusuz PDF API'si Nasıl Kurulur?

Azure Fonksiyonları ile sunucusuz bir PDF API'si oluşturmak, otomatik ölçeklendirme, kullanım başına ödeme fiyatlandırması ve minimum altyapı yönetimi sağlar. Aşağıdaki fonksiyon, opsiyonel güvenlik ayarlarıyla JSON isteklerini kabul eder ve bir PDF bayt akışı döner.

Üretim PDF API'si Nasıl Yapılandırılmalıdır?

using IronPdf;
using IronPdf.Editing;
using Microsoft.Azure.Functions.Worker;
using Microsoft.Azure.Functions.Worker.Http;
using System.Net;
using System.Text.Json;

public class PdfApiFunction
{
    private static readonly ChromePdfRenderer Renderer = new ChromePdfRenderer
    {
        RenderingOptions = new ChromePdfRenderOptions
        {
            PaperSize = IronPdf.Rendering.PdfPaperSize.A4,
            PrintHtmlBackgrounds = true,
            CreatePdfFormsFromHtml = true,
            CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print
        }
    };

    [Function("ConvertUrlToPdf")]
    public async Task<HttpResponseData> ConvertUrl(
        [HttpTrigger(AuthorizationLevel.Function, "post")] HttpRequestData req)
    {
        var body = await req.ReadAsStringAsync() ?? "{}";
        var request = JsonSerializer.Deserialize<ConvertUrlRequest>(body);

        if (string.IsNullOrEmpty(request?.Url))
        {
            var bad = req.CreateResponse(HttpStatusCode.BadRequest);
            await bad.WriteStringAsync("URL is required.");
            return bad;
        }

        using var pdf = Renderer.RenderUrlAsPdf(request.Url);

        if (request.AddWatermark)
        {
            pdf.ApplyWatermark(
                "<h2>CONFIDENTIAL</h2>",
                30,
                VerticalAlignment.Middle,
                HorizontalAlignment.Center);
        }

        if (request.ProtectWithPassword && !string.IsNullOrEmpty(request.Password))
        {
            pdf.SecuritySettings.UserPassword = request.Password;
            pdf.SecuritySettings.AllowUserCopyPasteContent = false;
        }

        var response = req.CreateResponse(HttpStatusCode.OK);
        response.Headers.Add("Content-Type", "application/pdf");
        await response.WriteBytesAsync(pdf.BinaryData);
        return response;
    }
}

public class ConvertUrlRequest
{
    public string Url { get; set; } = string.Empty;
    public bool AddWatermark { get; set; }
    public bool ProtectWithPassword { get; set; }
    public string Password { get; set; } = string.Empty;
}
using IronPdf;
using IronPdf.Editing;
using Microsoft.Azure.Functions.Worker;
using Microsoft.Azure.Functions.Worker.Http;
using System.Net;
using System.Text.Json;

public class PdfApiFunction
{
    private static readonly ChromePdfRenderer Renderer = new ChromePdfRenderer
    {
        RenderingOptions = new ChromePdfRenderOptions
        {
            PaperSize = IronPdf.Rendering.PdfPaperSize.A4,
            PrintHtmlBackgrounds = true,
            CreatePdfFormsFromHtml = true,
            CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print
        }
    };

    [Function("ConvertUrlToPdf")]
    public async Task<HttpResponseData> ConvertUrl(
        [HttpTrigger(AuthorizationLevel.Function, "post")] HttpRequestData req)
    {
        var body = await req.ReadAsStringAsync() ?? "{}";
        var request = JsonSerializer.Deserialize<ConvertUrlRequest>(body);

        if (string.IsNullOrEmpty(request?.Url))
        {
            var bad = req.CreateResponse(HttpStatusCode.BadRequest);
            await bad.WriteStringAsync("URL is required.");
            return bad;
        }

        using var pdf = Renderer.RenderUrlAsPdf(request.Url);

        if (request.AddWatermark)
        {
            pdf.ApplyWatermark(
                "<h2>CONFIDENTIAL</h2>",
                30,
                VerticalAlignment.Middle,
                HorizontalAlignment.Center);
        }

        if (request.ProtectWithPassword && !string.IsNullOrEmpty(request.Password))
        {
            pdf.SecuritySettings.UserPassword = request.Password;
            pdf.SecuritySettings.AllowUserCopyPasteContent = false;
        }

        var response = req.CreateResponse(HttpStatusCode.OK);
        response.Headers.Add("Content-Type", "application/pdf");
        await response.WriteBytesAsync(pdf.BinaryData);
        return response;
    }
}

public class ConvertUrlRequest
{
    public string Url { get; set; } = string.Empty;
    public bool AddWatermark { get; set; }
    public bool ProtectWithPassword { get; set; }
    public string Password { get; set; } = string.Empty;
}
Imports IronPdf
Imports IronPdf.Editing
Imports Microsoft.Azure.Functions.Worker
Imports Microsoft.Azure.Functions.Worker.Http
Imports System.Net
Imports System.Text.Json

Public Class PdfApiFunction
    Private Shared ReadOnly Renderer As New ChromePdfRenderer With {
        .RenderingOptions = New ChromePdfRenderOptions With {
            .PaperSize = IronPdf.Rendering.PdfPaperSize.A4,
            .PrintHtmlBackgrounds = True,
            .CreatePdfFormsFromHtml = True,
            .CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print
        }
    }

    <Function("ConvertUrlToPdf")>
    Public Async Function ConvertUrl(
        <HttpTrigger(AuthorizationLevel.Function, "post")> req As HttpRequestData) As Task(Of HttpResponseData)

        Dim body As String = Await req.ReadAsStringAsync() ?? "{}"
        Dim request As ConvertUrlRequest = JsonSerializer.Deserialize(Of ConvertUrlRequest)(body)

        If String.IsNullOrEmpty(request?.Url) Then
            Dim bad As HttpResponseData = req.CreateResponse(HttpStatusCode.BadRequest)
            Await bad.WriteStringAsync("URL is required.")
            Return bad
        End If

        Using pdf = Renderer.RenderUrlAsPdf(request.Url)
            If request.AddWatermark Then
                pdf.ApplyWatermark(
                    "<h2>CONFIDENTIAL</h2>",
                    30,
                    VerticalAlignment.Middle,
                    HorizontalAlignment.Center)
            End If

            If request.ProtectWithPassword AndAlso Not String.IsNullOrEmpty(request.Password) Then
                pdf.SecuritySettings.UserPassword = request.Password
                pdf.SecuritySettings.AllowUserCopyPasteContent = False
            End If

            Dim response As HttpResponseData = req.CreateResponse(HttpStatusCode.OK)
            response.Headers.Add("Content-Type", "application/pdf")
            Await response.WriteBytesAsync(pdf.BinaryData)
            Return response
        End Using
    End Function
End Class

Public Class ConvertUrlRequest
    Public Property Url As String = String.Empty
    Public Property AddWatermark As Boolean
    Public Property ProtectWithPassword As Boolean
    Public Property Password As String = String.Empty
End Class
$vbLabelText   $csharpLabel

Bu yapı, temiz bir ayrım sağlarken esneklik sunar. Fonksiyon, JSON isteklerini kabul eder, hata yönetimi ile işler ve opsiyonel güvenlik ile PDF'ler döndürür. Filigranlar ekleyebilir, şifre koruması uygulayabilir ve dijital imzalar uygulayabilirsiniz.

Üretim PDF Oluşturma için En İyi Uygulamalar Nelerdir?

Üretim PDF oluşturma, performansa, güvenilirliğe ve kaynak yönetimine dikkat edilmesini gerektirir. Bu en iyi uygulamalar, eşzamanlı istekler arasında gerçek koşullar altında optimal performansı garanti eder.

Bellek ve Kaynaklar Nasıl Yönetilir?

Eşzamanlı isteklerle birlikte bellek yönetimi kritik hale gelir. Her zaman PDF nesnelerini using ifadeleri kullanarak yok edin. Büyük belgeler için tüm PDF'leri belleğe almak yerine akış çıkışını kullanın. Trafik artışları sırasında bellek tükenmesini önlemek için istek sınırlaması uygulayın.

using IronPdf;
using Microsoft.Extensions.Logging;

public static class PdfProductionService
{
    // Limit concurrent PDF operations to avoid memory exhaustion
    private static readonly SemaphoreSlim Throttle = new SemaphoreSlim(5);

    public static async Task<byte[]> GeneratePdfAsync(string html, ILogger log)
    {
        await Throttle.WaitAsync();
        try
        {
            using var renderer = new ChromePdfRenderer
            {
                RenderingOptions = new ChromePdfRenderOptions
                {
                    Timeout = 60,
                    UseMarginsOnHeaderAndFooter = UseMargins.Hayırne
                }
            };

            renderer.RenderingOptions.WaitFor.RenderDelay(1000);
            using var pdf = renderer.RenderHtmlAsPdf(html);

            log.LogInformation(
                "PDF generated: {Pages} pages, {Bytes} bytes",
                pdf.PageCount,
                pdf.BinaryData.Length);

            return pdf.BinaryData;
        }
        finally
        {
            Throttle.Release();
        }
    }
}
using IronPdf;
using Microsoft.Extensions.Logging;

public static class PdfProductionService
{
    // Limit concurrent PDF operations to avoid memory exhaustion
    private static readonly SemaphoreSlim Throttle = new SemaphoreSlim(5);

    public static async Task<byte[]> GeneratePdfAsync(string html, ILogger log)
    {
        await Throttle.WaitAsync();
        try
        {
            using var renderer = new ChromePdfRenderer
            {
                RenderingOptions = new ChromePdfRenderOptions
                {
                    Timeout = 60,
                    UseMarginsOnHeaderAndFooter = UseMargins.Hayırne
                }
            };

            renderer.RenderingOptions.WaitFor.RenderDelay(1000);
            using var pdf = renderer.RenderHtmlAsPdf(html);

            log.LogInformation(
                "PDF generated: {Pages} pages, {Bytes} bytes",
                pdf.PageCount,
                pdf.BinaryData.Length);

            return pdf.BinaryData;
        }
        finally
        {
            Throttle.Release();
        }
    }
}
Imports IronPdf
Imports Microsoft.Extensions.Logging
Imports System.Threading

Public Module PdfProductionService
    ' Limit concurrent PDF operations to avoid memory exhaustion
    Private ReadOnly Throttle As New SemaphoreSlim(5)

    Public Async Function GeneratePdfAsync(html As String, log As ILogger) As Task(Of Byte())
        Await Throttle.WaitAsync()
        Try
            Using renderer As New ChromePdfRenderer With {
                .RenderingOptions = New ChromePdfRenderOptions With {
                    .Timeout = 60,
                    .UseMarginsOnHeaderAndFooter = UseMargins.Hayırne
                }
            }
                renderer.RenderingOptions.WaitFor.RenderDelay(1000)
                Using pdf = renderer.RenderHtmlAsPdf(html)
                    log.LogInformation("PDF generated: {Pages} pages, {Bytes} bytes", pdf.PageCount, pdf.BinaryData.Length)
                    Return pdf.BinaryData
                End Using
            End Using
        Finally
            Throttle.Release()
        End Try
    End Function
End Module
$vbLabelText   $csharpLabel

PDF Oluşturma Sağlığını Nasıl İzlersiniz?

İzleme, PDF oluşturucunuzun sağlığına görünürlük sağlar. Oluşturma sürelerini, hata oranlarını ve kaynak tüketimini izlemek için Application Insights kullanın. Hata veya yanıt bozulması gibi anormallikler için uyarılar ayarlayın. Sorun giderme için her istek hakkında ayrıntılı bilgi kaydedin.

using Microsoft.ApplicationInsights;
using Microsoft.ApplicationInsights.Extensibility;

// Track custom metrics using Application Insights
var telemetry = new TelemetryClient(TelemetryConfiguration.CreateDefault());

var sw = System.Diagnostics.Stopwatch.StartNew();
var pdfBytes = await PdfProductionService.GeneratePdfAsync(html, logger);
sw.Stop();

telemetry.TrackMetric("PdfGenerationTimeMs", sw.Elapsed.TotalMilliseconds);
telemetry.TrackMetric("PdfFileSizeBytes", pdfBytes.Length);
using Microsoft.ApplicationInsights;
using Microsoft.ApplicationInsights.Extensibility;

// Track custom metrics using Application Insights
var telemetry = new TelemetryClient(TelemetryConfiguration.CreateDefault());

var sw = System.Diagnostics.Stopwatch.StartNew();
var pdfBytes = await PdfProductionService.GeneratePdfAsync(html, logger);
sw.Stop();

telemetry.TrackMetric("PdfGenerationTimeMs", sw.Elapsed.TotalMilliseconds);
telemetry.TrackMetric("PdfFileSizeBytes", pdfBytes.Length);
Imports Microsoft.ApplicationInsights
Imports Microsoft.ApplicationInsights.Extensibility
Imports System.Diagnostics

' Track custom metrics using Application Insights
Dim telemetry As New TelemetryClient(TelemetryConfiguration.CreateDefault())

Dim sw As Stopwatch = Stopwatch.StartNew()
Dim pdfBytes = Await PdfProductionService.GeneratePdfAsync(html, logger)
sw.Stop()

telemetry.TrackMetric("PdfGenerationTimeMs", sw.Elapsed.TotalMilliseconds)
telemetry.TrackMetric("PdfFileSizeBytes", pdfBytes.Length)
$vbLabelText   $csharpLabel

Azure'da İleri Düzey PDF Özellikleri Nasıl Ele Alınır?

IronPDF'nin ileri düzey özellikleri, PDF oluşturucunun temel yaratıcı aşamanın ötesine geçmesini sağlar. Bu yetenekler Azure'da tamamen desteklenir ve profesyonel belge işleme iş akışlarını etkinleştirir.

PDF'ler Nasıl Şifrelenir ve Yetkilendirilir?

IronPDF, ince ayarlanmış belge kontrolü için şifre koruması ve yetki yönetimini destekler. PDF izinleri ve parolaları özelliği, AES-256 şifrelemesi uygular:

using IronPdf;

// Load or generate the PDF
using var pdf = new ChromePdfRenderer().RenderHtmlAsPdf("<h1>Secure Report</h1>");

// Apply password protection
pdf.SecuritySettings.UserPassword = "view-password";
pdf.SecuritySettings.OwnerPassword = "admin-password";

// Restrict permissions
pdf.SecuritySettings.AllowUserPrinting = IronPdf.Security.PdfPrintSecurity.FullPrintRights;
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
pdf.SecuritySettings.AllowUserAnnotations = false;

pdf.SaveAs("azure-secure-report.pdf");
using IronPdf;

// Load or generate the PDF
using var pdf = new ChromePdfRenderer().RenderHtmlAsPdf("<h1>Secure Report</h1>");

// Apply password protection
pdf.SecuritySettings.UserPassword = "view-password";
pdf.SecuritySettings.OwnerPassword = "admin-password";

// Restrict permissions
pdf.SecuritySettings.AllowUserPrinting = IronPdf.Security.PdfPrintSecurity.FullPrintRights;
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
pdf.SecuritySettings.AllowUserAnnotations = false;

pdf.SaveAs("azure-secure-report.pdf");
Imports IronPdf

' Load or generate the PDF
Using pdf = New ChromePdfRenderer().RenderHtmlAsPdf("<h1>Secure Report</h1>")

    ' Apply password protection
    pdf.SecuritySettings.UserPassword = "view-password"
    pdf.SecuritySettings.OwnerPassword = "admin-password"

    ' Restrict permissions
    pdf.SecuritySettings.AllowUserPrinting = IronPdf.Security.PdfPrintSecurity.FullPrintRights
    pdf.SecuritySettings.AllowUserCopyPasteContent = False
    pdf.SecuritySettings.AllowUserAnnotations = False

    pdf.SaveAs("azure-secure-report.pdf")
End Using
$vbLabelText   $csharpLabel

Değiştirilemez, kurcalanamaz belgeler oluşturmak için şifrelemeyi dijital imzalar ile birleştirebilirsiniz.

Başlıklar, Altbilgiler ve Filigranlar Nasıl Eklenir?

Dinamik sayfa numaraları ile başlıklar ve altbilgiler eklemek ve özel filigranlar uygulamak Azure'da herhangi bir .NET ortamındakiyle aynı şekilde çalışır:

using IronPdf;

using var pdf = new ChromePdfRenderer().RenderHtmlAsPdf("<h1>Monthly Report</h1><p>Report content goes here.</p>");

// Add dynamic header with page numbers
var header = new HtmlHeaderFooter
{
    HtmlFragment = "<div style='text-align:right;font-size:10px'>Page {page} of {total-pages}</div>",
    Height = 15
};
pdf.AddHTMLHeaders(header);

// Apply a draft watermark when needed
pdf.ApplyWatermark(
    "<h1 style='color:gray;opacity:0.3'>DRAFT</h1>",
    45,
    IronPdf.Editing.VerticalAlignment.Middle,
    IronPdf.Editing.HorizontalAlignment.Center);

pdf.SaveAs("report-with-header.pdf");
using IronPdf;

using var pdf = new ChromePdfRenderer().RenderHtmlAsPdf("<h1>Monthly Report</h1><p>Report content goes here.</p>");

// Add dynamic header with page numbers
var header = new HtmlHeaderFooter
{
    HtmlFragment = "<div style='text-align:right;font-size:10px'>Page {page} of {total-pages}</div>",
    Height = 15
};
pdf.AddHTMLHeaders(header);

// Apply a draft watermark when needed
pdf.ApplyWatermark(
    "<h1 style='color:gray;opacity:0.3'>DRAFT</h1>",
    45,
    IronPdf.Editing.VerticalAlignment.Middle,
    IronPdf.Editing.HorizontalAlignment.Center);

pdf.SaveAs("report-with-header.pdf");
Imports IronPdf

Using pdf = New ChromePdfRenderer().RenderHtmlAsPdf("<h1>Monthly Report</h1><p>Report content goes here.</p>")
    ' Add dynamic header with page numbers
    Dim header As New HtmlHeaderFooter With {
        .HtmlFragment = "<div style='text-align:right;font-size:10px'>Page {page} of {total-pages}</div>",
        .Height = 15
    }
    pdf.AddHTMLHeaders(header)

    ' Apply a draft watermark when needed
    pdf.ApplyWatermark(
        "<h1 style='color:gray;opacity:0.3'>DRAFT</h1>",
        45,
        IronPdf.Editing.VerticalAlignment.Middle,
        IronPdf.Editing.HorizontalAlignment.Center)

    pdf.SaveAs("report-with-header.pdf")
End Using
$vbLabelText   $csharpLabel

Ayrıca, PDF'leri birleştirebilir veya bölebilir, metin çıkarabilir, PDF'leri görüntülere dönüştürebilir ve PDF formları ile çalışabilirsiniz.

Hangi Yaygın Hatalara Dikkat Etmelisiniz?

Uygun kurulumla bile, PDF oluşturanları Azure'a dağıtırken belli sorunlar yaygın olarak ortaya çıkar. Bu problemleri anlamak, değerli sorun giderme zamanından tasarruf sağlar.

Erişim Reddedildi Hataları Neden Oluşur?

Erişim yolu reddedildi hataları, IronPDF'nin geçici dosyaları yazamaması durumunda oluşur. Yazma erişimini sağlamak için Installation.CustomDeploymentDirectory = "/tmp" ayarlayın. Paket Yolu: dağıtım yapıyorsanız, uygulamanın ayrı bir yazilabilir yolu oldugundan emin olun, çünkü bu modda /home/site/wwwroot sadece okunabilir moddadır.

Timeout ve Render Sorunları Nasıl Çözülür?

Timeout istisnaları, karmaşık belgelerin render edilmesinin Azure fonksiyon zaman aşımını aşması durumunda meydana gelir. Render zaman aşımını artırın, JavaScript yoğun sayfalara render gecikmesi ekleyin veya büyük işleri dayanıklı bir görev kuyruğuna devredin.

Yazı tipi render sorunları, eksik veya yanlış yazı tipleri olarak görünür. Yazı tiplerini Base64 kodlaması kullanarak ekleyin, Azure'un doğal olarak desteklediği web-güvenli yazı tipleri kullanın veya tam yazı tipi kontrolü için bir konteyner dağıtımına geçin.

PDF Oluşturma Sırasında Bellek Hatalarına Neden Olan Nedir?

Bellek istisnaları, PDF oluşturmanın bellek yoğun doğasından kaynaklanır. Yaygın sorunlar, büyük veya eşzamanlı istekler sırasında bellek yetersizliği istisnalarını içerir.

En iyi uygulamalar şunları içerir:

  • PdfDocument nesnelerini hemen using deyimlerini kullanarak yok edin
  • Eşzamanlı isteklere bir SemaphoreSlim ile kisitlayin, üretim hizmeti örneğinde gösterildiği gibi
  • Büyük PDF'ler için tüm bayt dizilerini yüklemek yerine akış tabanlı çıkış kullanın
  • Belirli bellek tahsisi için Tüketim planından Premium veya Dedike planlara yükseltin

Azure PDF Oluşturucunuzu Nasıl Dağıtıp İzlersiniz?

Silindir bir dağıtım stratejisi, PDF oluşturucunun stabil, gözlemlenebilir ve kolay güncellenebilir olmasını sağlar. Aşağıdaki uygulamalar, Azure Uygulama Hizmeti veya Azure Fonksiyonları'ı hedefliyor olsanız da geçerlidir.

Hangi Dağıtım En İyi Uygulamalarını Takip Etmelisiniz?

  • Otomatik CI/CD: Tekrarlanabilir, denetlenebilir dağıtımlar için Azure DevOps veya GitHub Actions kullanın
  • Lisans anahtarları: IronPDF lisanslarını kaynak kontrolü veya ortam değişkenleri yerine Azure Key Vault'ta saklayın
  • Yazılabilir yol: IronPDF geçici klasörlerini (/tmp Linux konteynerleri icin) uygulama başlangıcında yapılandırın
  • Paket seçimi: Konteyner tabanlı dağıtımlar için IronPdf.Linux kullanın; Windows Uygulama Hizmeti için standart IronPdf paketi kullanın

İzleme ve Ölçümler Nasıl Ayarlanır?

Application Insights, Azure Fonksiyonları ve Uygulama Hizmeti ile doğrudan entegre olur. Her PDF oluşturma olayı başına özel metrikleri izlemek için TelemetryClient kullanın:

using Microsoft.ApplicationInsights;

var telemetryClient = new TelemetryClient();
telemetryClient.TrackMetric("PdfGenerationTimeMs", generationTime.TotalMilliseconds);
telemetryClient.TrackMetric("PdfPageCount", pdfPageCount);
telemetryClient.TrackMetric("PdfFileSizeBytes", fileSizeBytes);
using Microsoft.ApplicationInsights;

var telemetryClient = new TelemetryClient();
telemetryClient.TrackMetric("PdfGenerationTimeMs", generationTime.TotalMilliseconds);
telemetryClient.TrackMetric("PdfPageCount", pdfPageCount);
telemetryClient.TrackMetric("PdfFileSizeBytes", fileSizeBytes);
Imports Microsoft.ApplicationInsights

Dim telemetryClient As New TelemetryClient()
telemetryClient.TrackMetric("PdfGenerationTimeMs", generationTime.TotalMilliseconds)
telemetryClient.TrackMetric("PdfPageCount", pdfPageCount)
telemetryClient.TrackMetric("PdfFileSizeBytes", fileSizeBytes)
$vbLabelText   $csharpLabel

Oluşturma süreleri kabul edilebilir bir eşiğin üzerine çıktığında veya hata oranları artış gösterdiğinde sizi bilgilendirmek için Azure portalında metrik tabanlı uyarılar ayarlayın.

Bugün Azure PDF Oluşturma Nasıl Başlanır?

Doğru Azure seviyesini seçmekten ve doğru NuGet paketini kurmaktan, bulut ortamları için render programlayıcısını yapılandırmaktan güvenlik, izleme ve kaynak kısıtlamaları eklemeye kadar üretime hazır bir Azure PDF oluşturucu oluşturmak için tamamlayıcı bir tabloya sahipsiniz.

Azure'un bulut altyapısı ve IronPDF'nin Chrome tabanlı renderleme motorunun kombinasyonu, ihtiyaçlarınıza göre ölçeklenebilen bir PDF platformu oluşturur. Birkaç belgeden binlerce belgeye kadar işliyor olsanız da, oluşturucu, tahmin edilebilir maliyetlerle tutarlı performansı korur.

IronPDF özellikleri özetine başlayarak mevcut tüm yeteneklerinizi anlayın, ardından API ayrıntıları için dokumentasyonu keşfedin. Dağıtmaya hazır olduğunuzda, belge başına ücret ödemeden eksiksiz özellik testi için ücretsiz deneme lisansını etkinleştirin. Lisans seçeneklerini inceleyerek üretim iş yükünüze uygun planı seçin.

Ek belge işleme seçenekleri için IronPDF NuGet yükleme kılavuzu ve tam IronSoftware ürün paketini keşfedin.

Şimdi IronPDF ile başlayın.
green arrow pointer

Sıkça Sorulan Sorular

IronPDF'yi Azure'da PDF oluşturmasi için kullanmanin avantajlari nelerdir?

IronPDF, Azure ile sorunsuz bir şekilde entegre olan kurumsal düzeyde PDF oluşturma kabiliyetleri sunarak ölçeklenebilirlik ve güvenilirlik sağlar. Bulut ortamlarında yaygın olan sanal alan kısıtlamaları ve bellek sınırlamaları gibi zorlukların üstesinden gelir.

IronPDF, Azure ortamlarında bellek kisitlamalariyla nasıl bas eder?

IronPDF, Azure’un bellek sınırlamaları içinde çalışmak üzere optimize edilmiştir ve mevcut kaynakları aşmadan PDF oluşturmasına olanak tanıyan verimli işleme teknikleri kullanır.

IronPDF Azure Functions ile kullanılabilir mi?

Evet, IronPDF, otomatik ölçeklendirme ve maliyet-etkin yürütme avantajlarından yararlanarak sunucusuz PDF oluşturma çözümleri oluşturmak için Azure Functions ile entegre edilebilir.

IronPDF Azure ile kullanıldığında hangi güvenlik hususları ele alınır?

IronPDF, verilerin transit ve dinlenme sırasında korunması için en iyi uygulamalara uyarak güvenli PDF oluşturmayı destekler ve Azure'un güvenlik standartlarına uygunluk sağlar.

IronPDF'nin Azure App Service üzerinde konuşlandırılması mümkün mü?

Kesinlikle, IronPDF, bir yönetilen barındırma ortamı içinde özelliklerinden yararlanmaya olanak sağlamak için Azure App Service üzerine konuşlandırılabilir.

IronPDF, Azure'da PDF özellik özelleştirmesini destekliyor mu?

Evet, IronPDF, Azure'da çalışırken, düzen, tasarım ve etkileşim dahil olmak üzere PDF oluşturma için kapsamlı özelleştirme seçenekleri sunar.

IronPDF, dağıtik bir Azure sisteminde yüksek performansı nasıl sagliyor?

IronPDF, dağıtik sistemler genelinde sorunsuzca ölçeklenmek üzere tasarlanmistir ve yüksek performans ve guvenilirliği korumak için Azure’un altyapısını kullanır.

IronPDF, Azure PDF oluşturmasi için .NET 10'u destekliyor mu?

Evet, IronPDF, Azure ortamlarında — Functions, App Services ve konteyner konuşlandırmaları dahil olmak üzere — .NET 10 ile tamamen uyumludur. Özel geçici çözümler gerektirmeyen sorunsuz destek sunar. IronPDF'nin platform gereksinimleri, desteklenen çalışma zamanları arasında .NET 10'u açıkça listeler. (ironpdf.com)

IronPDF hangi .NET versiyonlarını destekliyor ve .NET 10 ile uyumluluğu performansı nasıl geliştiriyor?

IronPDF, .NET 6, 7, 8, 9 ve 10 dahil olmak üzere geniş bir yelpazede .NET versiyonlarını destekler. .NET 10 kullanmak, son işleme optimizasyonlarından, geliştirilmiş çöp toplama işlemlerinden ve özellikle sunucusuz veya konteyner tabanlı PDF oluşturma için Azure'da geliştirilmiş performanstan yararlanmanızı sağlar. ironpdf.com 'C# PDF Kütüphanesi' özellik listesini .NET 10'u desteklediğini onaylar.

Curtis Chau
Teknik Yazar

Curtis Chau, Bilgisayar Bilimleri alanında lisans derecesine sahiptir (Carleton Üniversitesi) ve Node.js, TypeScript, JavaScript ve React konularında uzmanlaşmış ön uç geliştirme üzerine uzmanlaşmıştır. Kullanıcı dostu ve estetik açıdan hoş arayüzler tasarlamaya tutkuyla bağlı olan Curtis, modern çerç...

Daha Fazlasını Oku

Iron Destek Ekibi

Haftanın 5 günü, 24 saat çevrimiçiyiz.
Sohbet
E-posta
Beni Ara