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.
| Ö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
# 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
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
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ı

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.
| 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
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
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)
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
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
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:
PdfDocumentnesnelerini hemenusingifadeleri kullanarak elden çıkarın- Üretim hizmeti örneğinde gösterildiği gibi
SemaphoreSlimile 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 (
/tmpLinux konteynerler için) yapılandırın - Paket seçimi: Konteyner tabanlı dağıtımlar için
IronPdf.Linuxkullanın; Windows Uygulama Hizmeti için standartIronPdfpaketini 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)
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.
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.

