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

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.
| 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
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
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)
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
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
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:
PdfDocumentnesnelerini hemenusingdeyimlerini kullanarak yok edin- Eşzamanlı isteklere bir
SemaphoreSlimile 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 (
/tmpLinux konteynerleri icin) uygulama başlangıcında yapılandırın - Paket seçimi: Konteyner tabanlı dağıtımlar için
IronPdf.Linuxkullanın; Windows Uygulama Hizmeti için standartIronPdfpaketi 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)
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.
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.




