Altbilgi içeriğine atla
IRONPDF KULLANARAK

PDF'yi TIFF'e VB .NET ve C# Kılavuzlarinda Dönüştürmek

IronPDF'in profesyonel render motorunu Azure'un esnek bulut altyapısı ile birleştirdiğinizde, Azure PDF oluşturma işlemi basit hale gelir. Bu kılavuz, HTML dönüştürmeden karmaşık belge işlemlerine kadar her şeyi ele alan üretime hazır bir PDF oluşturucu inşa etmeyi, dağıtmayı ve ayarlamayı nasıl yapacağınızı gösterir.

Bulut tabanlı güvenilir bir PDF oluşturucu geliştirmek benzersiz zorluklar sunar. Kum havuzu kısıtlamaları, bellek sınırlamaları ve dağıtık sistem karmaşıklığı arasında, birçok geliştirici üretime hazır bir çözüm bulmakta zorlanıyor. Burası, Azure ve IronPDF'in birlikte iyi çalıştığı noktadır -- IronPDF, iş yükünüzle ölçeklenen ve temel özellikleri koruyan profesyonel PDF oluşturma sunar.

Faturalar, raporlar oluşturuyor veya web içeriğini PDF'lere dönüştürüyor olun, bu kılavuz size güvenilir bir Azure PDF oluşturucu nasıl inşa edeceğinizi gösterir. Basit HTML dönüştürme işlemlerinden karmaşık belge manipülasyonuna kadar her şeyi performans ve maliyet açısından optimize ederek ele alacaksınız.

Ücretsiz IronPDF denemesiyle başlayın ve bulut PDF çözümünüzü oluşturmak için adımları takip edin.

İyi Bir Azure PDF Oluşturucu Ne Yapar?

Tüm PDF çözümleri bulut ortamlarında iyi çalışmaz. Üretim için hazır bir Azure PDF oluşturucu, temel belge oluşturmanın ötesinde kritik gereksinimleri karşılamalıdır. Azure İşlevleri dağıtım seçeneklerini anlamak başarının anahtarıdır.

Bulutta PDF Oluşturma İşleminde Performans Neden Önemlidir?

Performans ve ölçeklenebilirlik, çözümünüzün başarısını tanımlar. Jeneratörünüz eşzamanlı istekleri darboğaz olmadan işleyecek, zirve dönemlerde otomatik olarak ölçeklenecek ve karmaşık belgelerle tutarlı yanıt sürelerini koruyacaktır. Sunucusuz mimari detaylarını anlayan, bulut ortamları için tasarlanmış bir kütüphane seçin.

Azure'e Özel Kısıtlamalar Nelerdir?

Azure platformu belirli dikkate alınacak hususlar getirir. Uygulama Hizmeti sandbox'ı Win32/grafik API'lerini kısıtlar -- masaüstü grafik yığınlarını kullanan kütüphaneler başarısız olabilir. Tüketim planlarındaki bellek kısıtlamaları, daha büyük belgelerde hatalara neden olur. Dağıtılmış doğa, verimli durumsuz işlemler gerektirir. Azure dağıtımındaki sorunları ayrıntılı bir şekilde gidermek için eksiksiz sorun giderme dokümantasyonuna başvurun.

Hangi Enterprise Özellikleri Esastır?

Kurumsal uygulamaların HTML dönüştürmenin ötesinde gereksinimleri vardır. Modern PDF oluşturucular, JavaScript işleme, karmaşık CSS destekleme ve şifreleme ile dijital imzalar gibi güvenlik özellikleri sunmalıdır. IronPDF, Chrome tabanlı render motoruyla bunları ele alır ve Azure dağıtımı için oldukça uygundur.

Azure Uygulama Hizmetis ve Azure İşlevleri Arasındaki Fark Nedir?

Azure Uygulama Hizmetis ve Azure İşlevleri, 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 Hizmetlerini Nasıl Seçersiniz?

Azure Uygulama Hizmetis, web uygulamaları, REST API'leri ve mobil backendler için tamamen yönetilen barındırma sağlar. Kalıcı kaynaklar sunar, uzun süreli işlemleri destekler ve yerleşik ölçekleme, dağıtım slotları ve CI/CD entegrasyonu içerir. Bu özellikler, sürekli çalışan uygulamalar için ideal hale getirir.

Azure Fonksiyonlarının Daha İyi Bir Seçim Olduğuna Nasıl Karar Verirsiniz?

Azure İşlevleri, olay tabanlı, kısa ömürlü görevler için sunucusuz işlem sunar. Fonksiyonlar yalnızca tetiklendiğinde (HTTP isteği, zamanlayıcı veya mesaj kuyruğu) çalışır ve yalnızca çalışma süresi için ödeme yaparsınız. Arka plan işlerinde, veri işleminde, otomasyon betiklerinde ve sürekli çalışan ana bilgisayarlar olmadan mikro hizmetlerde mükemmeldirler.

PDF Oluşturma için Azure Barındırma Seçenekleri
Özellik Uygulama Hizmeti Azure İşlevleri
Faturalama modeli Sabit aylık Her yürütmede
Boşta maliyet Her zaman faturalandırılır Boşta sıfır
Soguk başlatma riski Minimal Evet (Tüketim planı)
Uzun süreli PDF'ler Destekleniyor Zaman aşımı limitleri geçerlidir
Özel konteynerler Destekleniyor Sadece Premium/Özel

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

IronPDF'yi Azure İşlevleri içinde kurmak, doğru paketi seçmeyi gerektirir. Kütüphane, Windows ve Linux ortamları için seçenekler sunar. Uygun paket seçimi, en iyi performansı sağlar ve uyumluluk sorunlarını önler.

Hangi IronPDF Paketini Kurmalısınız?

Windows tabanlı Azure İşlevleri için, NuGet üzerinde bulunan standart IronPDF paketini kullanın. Linux konteynerleri için, daha hızlı soğuk başlangıçlar için çalıştırmayı-paket-deployment ile IronPdf.Linux 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

IronPDF'i Azure İşlevleri için Nasıl Yapılandırırsınız?

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

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ısı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şleme sorunlarını önler. Deployman dizinini /tmp olarak ayarlamak, sınırlandırılmış Azure İşlevleri ortamlarında yazma erişimi sağlar, bu da yaygın bir "erişim reddedildi" hatası kaynağıdır.

Örnek Çıktı PDF Dosyası

Azure Function tarafından oluşturulan aylık rapor PDF'si, satış metrikleri, bölgesel veri tablosu ve şirket vurgularını profesyonel yeşil başlıkla gösterir.

PDF Oluşturma İçin Hangi Azure Barındırma Seviyesini Seçmelisiniz?

IronPDF ile PDF oluşturma, daha hafif iş yüklerinden daha fazla hesaplama ve grafik desteği gerektirir. Hem Microsoft hem de IronPDF, GDI+ kısıtlamaları, paylaşılan hesaplama limitleri ve yetersiz bellek nedeniyle Ücretsiz, Paylaşımlı ve Tüketim katmanlarından kaçınılmasını önermektedir.

IronPDF için Tavsiye Edilen Azure Katmanları
Kademe GDI+ Desteği PDF için uygun Açıklamalar
Ücretsiz / Paylaşılan Hayır Hayır Kısıtlı sanal alan
Tüketim (Fonksiyonlar) Sınırlı Sınırlı Hafıza 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 edilmiş katmanlar size özel hesaplama gücü, VNET entegrasyonu ve soğuk başlangıç gecikmeleri olmaksızın doğrudan PDF işleme kapasitesini ve güvenilirliğini artıran tüm faktörleri sunar.

Azure İşlevleri ile Nasıl Sunucusuz Bir PDF API'si Oluşturursunuz?

Azure İşlevleri ile sunucusuz bir PDF API'si oluşturmak, otomatik ölçeklendirme, kullanım başına ödeme fiyatlandırması ve minimal altyapı yönetimi sunar. Aşağıdaki fonksiyon, isteğe bağlı güvenlik ayarlarıyla JSON isteklerini kabul eder ve bir PDF bayt akışı döndürür.

Üretim PDF API'si Nasıl Yapılandırılı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 kontrolü ile işler ve isteğe bağlı güvenlikle PDF'ler döndürür. Filigranlar ekleyebilir, parola koruması uygulayabilir ve dijital imzalar ekleyebilirsiniz.

Üretimde PDF Üretimi için En İyi Uygulamalar Nelerdir?

Üretim PDF oluşturma, performans, güvenilirlik ve kaynak yönetimine dikkatli bir yaklaşım gerektirir. Bu en iyi uygulamalar, eşzamanlı istekler arasında gerçek koşullar altında optimal performansı sağlar.

Bellek ve Kaynakları Nasıl Yönetirsiniz?

Eşzamanlı isteklerle bellek yönetimi kritik önem kazanır. PDF nesnelerini her zaman using ifadeleri kullanarak elden çıkarın. Büyük belgeler için, tüm PDF'leri belleğe yüklemek yerine çıktı akışı yapı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.None
                }
            };

            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.None
                }
            };

            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.None
                }
            }
                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ızı Nasıl İzlersiniz?

İzleme, PDF oluşturucunuzun sağlığını görmenizi sağlar. Oluşturma sürelerini, hata oranlarını ve kaynak tüketimini izlemek için Application Insights'ı kullanın. Hata oranlarının artması veya yanıt bozulması gibi anomaliler için uyarılar ayarlayın. Her istekle ilgili ayrıntılı bilgileri hata ayıklama amacıyla 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 Gelişmiş PDF Özelliklerini Nasıl Yönetirsiniz?

IronPDF'nin gelişmiş özellikleri, PDF oluşturucunuzu temel oluşturmanın ötesine taşır. Bu yetenekler Azure'da tam olarak desteklenmektedir ve profesyonel belge işleme iş akışlarını mümkün kılar.

PDF'leri Şifreleme ve İzinlerle Nasıl Güvenli Hale Getirirsiniz?

IronPDF, belgeler üzerinde ince ayarlı kontrol sağlamak için parola koruması ve izin yönetimini destekler. PDF izinleri ve parolaları özelliğiyle AES-256 şifrelemesi uygulanır:

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

Sahtecilik kanıtı oluşturmak için şifrelemeyi dijital imzalar ile birleştirebilirsiniz.

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

Dinamik sayfa numaraları ve özel filigranlar ile başlıklar ve altbilgiler eklemek, Azure'da da diğer herhangi bir .NET ortamında olduğu gibi ç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

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

Hangi Yaygın Hatalara Dikkat Etmelisiniz?

Doğru kurulumla bile, PDF oluşturucuları Azure'a dağıtırken bazı yaygın sorunlar ortaya çıkabilir. Bu sorunları anlamak, değerli hata ayıklama süresinden tasarruf sağlar.

Neden "Erişim Reddedildi" Hataları Oluşur?

"Yol erişime kapalı" hataları, IronPDF'nin geçici dosyaları yazamadığı durumlarda ortaya çıkar. Yazma erişimini sağlamak için Installation.CustomDeploymentDirectory = "/tmp" ayarlayın. Paketten Çalıştır dağıtımını kullanıyorsanız, uygulamanın ayrı bir yazılabilir yola sahip olduğundan emin olun, çünkü /home/site/wwwroot bu modda salt okunurdur.

Zaman Aşımı ve Render Sorunları Nasıl Çözülür?

Zaman aşımı istisnaları, karmaşık belgelerin Azure'un işlev zaman aşımını aşması nedeniyle olur. Render zaman aşımını artırın, JavaScript yoğun sayfalar için bir render gecikmesi ekleyin veya büyük işleri dayanıklı bir görev kuyruğuna yükleyin.

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

PDF Oluşturma Sırasında Bellek İstisnalarına Ne Sebep Olur?

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 tükenmesi istisnalarıdır.

En iyi uygulamalar şunları içermektedir:

  • PdfDocument nesnelerini hemen using ifadeleri kullanarak elden çıkarın
  • Üretim hizmeti örneğinde gösterildiği gibi SemaphoreSlim ile eşzamanlı istekleri sınırlayın
  • Tüm byte dizilerini yüklemek yerine, büyük PDF'ler için akış tabanlı çıktı kullanın
  • Belirlenmiş bellek tahsisi için Tüketim planından Premium veya Dedicated plana yükseltin

Azure PDF Oluşturucunuz Nasıl Dağıtılır ve İzlenir?

Sağlam bir dağıtım stratejisi, PDF oluşturucunuzun kararlı, gözlemlenebilir ve kolay güncellenebilir kalmasını sağlar. Aşağıdaki uygulamalar, Azure Uygulama Hizmeti veya Azure İşlevleri hedefliyorsanız uygulanır.

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

  • 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 içinde depolayın
  • Yazılabilir yol: Uygulama başlatıldığında IronPDF geçici klasörlerini (/tmp Linux konteynerler için) 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 paketini kullanın

İzleme ve Metrikler Nasıl Ayarlanır?

Application Insights, doğrudan Azure İşlevleri ve Uygulama Hizmeti ile entegre olur. Her bir 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ı ani bir artış gösterdiğinde sizi bilgilendirmek için Azure portalında metrik tabanlı uyarılar ayarlayın.

Bugün Azure PDF Oluşturma ile Nasıl Başlayabilirsiniz?

Azure PDF oluşturucuyu üretime hazır hale getirme konusunda tam bir resme sahip oldunuz: Doğru Azure katmanını seçmekten ve uygun NuGet paketini kurmaktan, bulut ortamları için render edici yapılandırmaya, güvenlik, izleme ve kaynak sınırlamaları eklemeye kadar.

Azure'un bulut altyapısı ile IronPDF'nin Chrome tabanlı render motorunu birleştirmek, ihtiyaçlarınıza göre ölçeklenen bir PDF platformu oluşturur. İster birkaç belgeyi, ister saatte binlercesini işliyor olun, oluşturucu, öngörülebilir maliyetlerle tutarlı performans sağlar.

IronPDF özelliklerine genel bakış ile mevcut yeteneklerin tam yelpazesini anlamaya başlayın ve ardından belgeleri API ayrıntılarını keşfedin. Dağıtıma hazır olduğunuzda, belge başına ücret ödemeden tam özellikli test için bir ücretsiz deneme lisansını etkinleştirin. Üretim iş yükünüze uygun planı seçmek için lisanslama seçeneklerini gözden geçirin.

Ek belge işleme seçenekleri için IronPDF NuGet yükleme kılavuzu ve Iron Software ürün paketi inceleyin.

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

Sıkça Sorulan Sorular

IronPDF kullanmanın Azure'da PDF oluşturma için avantajları nelerdir?

IronPDF, kurumsal sınıf PDF oluşturma yeteneklerini sorunsuz bir şekilde Azure ile entegre ederek ölçeklenebilirliği ve güvenilirliği sağlar. Bulut ortamlarındaki yaygın olan izole alan sınırlamaları ve bellek sınırlamalarının üstesinden gelir.

IronPDF, Azure ortamlarında bellek sınırlamalarını nasıl ele alır?

IronPDF, Azure'un bellek sınırları içinde çalışacak şekilde optimize edilmiştir ve etkin işleme tekniklerini kullanarak kullanılabilir kaynakları aşmadan PDF oluşturabilmek için tasarlanmıştır.

IronPDF, Azure Fonksiyonları ile kullanılabilir mi?

Evet, IronPDF, sunucusuz PDF oluşturma çözümleri yaratmak için Azure Fonksiyonları ile entegre edilebilir, otomatik ölçeklemeden ve maliyet-etkin çalıştırmadan faydalanır.

IronPDF ile Azure kullanırken ele alınan güvenlik konuları nelerdir?

IronPDF, güvenli PDF oluşturmayı sağlamak için veri koruma konusundaki en iyi uygulamalara uyar ve Azure'un güvenlik standartlarına uyduğundan emin olur.

IronPDF'yi Azure App Service üzerinde dağıtmak mümkün mü?

Kesinlikle, IronPDF, yönetilen bir barındırma ortamında özelliklerinden yararlanmalarına olanak tanıyan Azure App Service üzerinde dağıtılabilir.

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

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

IronPDF, dağıtılmış bir Azure sisteminde yüksek performansı nasıl sağlar?

IronPDF, Azure'un altyapısından yararlanarak, dağıtılmış sistemler genelinde zahmetsizce ölçeklenmek üzere tasarlanmıştır, böylece yüksek performans ve güvenilirliği korur.

IronPDF, Azure PDF oluşturma için .NET 10 desteği sağlıyor mu?

Evet, IronPDF, Bağlantı İşlevleri, Uygulama Hizmetleri ve konteyner dağıtımları gibi Azure ortamlarında .NET 10 ile tam uyumludur. Kutu dışı sorunsuz destek sunar ve özel yollar gerektirmez. IronPDF'nin platform gereksinimleri arasında .NET 10, desteklenen çalıştırma altyapıları arasında açıkça listelenmiştir. (ironpdf.com)

IronPDF'nin desteklediği .NET sürümleri nelerdir ve .NET 10 ile uyumluluğun performansı nasıl arttırır?

IronPDF, .NET 6, 7, 8, 9 ve 10 dahil olmak üzere geniş bir .NET sürümü aralığını destekler. .NET 10 kullanmak, en son çalışma zamanı optimizasyonlarından, iyileştirilmiş çöp toplama ve Azure'daki gelişmiş performans sağlar — özellikle sunucusuz veya konteyner tabanlı PDF oluşturma için. ironpdf.com, "C# PDF Kütüphanesi" özellik listesinde .NET 10 desteğini onaylar.

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

Iron Destek Ekibi

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