ASP.NET Core ve IronPDF ile Merkezi PDF Oluşturma Hizmeti Nasıl Kurulur
ASP.NET Core ve IronPDF kullanarak üretime hazır bir .NET PDF API inşa edin ve HTML-to-PDF dönüşümü, birleştirme, filigran ekleme ve dinamik şablon işleme için merkezi PDF üretim mantığı oluşturarak, uygulamalarınızda tutarlı belge oluşturmayı sağlayın.
Modern uygulamalarla çalışırken, .NET geliştiriciler sıklıkla merkezi bir PDF üretim hizmeti kurmak zorundadır. İster faturalar, raporlar, sertifikalar veya sözleşmeler üretiyor olun, özel bir .NET PDF API'ye sahip olmak PDF üretim iş akışınızı iyileştirir. Bu nasıl yardımcı olur? Masaüstü ve web uygulamalarınızda tutarlılık, sürdürülebilirlik ve ölçeklenebilirlik sağlar. Belge içeriğini, PDF sayfalarını ve PDF form alanlarını yönetmek basit hale gelir.
Bu eğitimde güçlü bir .NET PDF kutuphanesi olan ASP.NET Core ve IronPDF kullanarak üretime hazır bir PDF API nasıl inşa edileceğini öğreneceksiniz. RESTful uç noktaları oluşturacağız, HTML'den PDF üretecek belgeleri birleştirecek, filigranlar ekleyecek ve Web API'nizdeki çeşitli gerçek dünya PDF senaryolarını ele alacak.
Neden Özel Bir PDF API'si Oluşturmalısınız?

Koda dalmadan önce, özel bir PDF API oluşturmamanın neden mantıklı olduğunu anlayalım:
- Merkezi Mantık: Tüm PDF oluşturma mantığı tek bir yerde yer alır, bu da bakım ve güncellemeleri kolaylaştırır.
- Mikroservis Mimari: Farklı uygulamaların PDF yeteneklerine ihtiyaç duyduğu hizmet odaklı mimariler için mükemmeldir.
- Performans Optimizasyonu: Büyük PDF'ler, birden fazla sayfa ve dinamik veriler için özel bir hizmet ölçeklendirmek ve optimize etmek için asinakron işlemler ve performans teknikleri kullanarak daha kolaydır.
- Dil Bağımsız: Herhangi bir istemci uygulaması, programlama dilinden bağımsız olarak API'yi tüketebilir.
- Tutarlı Çıktı: Kuruluşunuzdaki tüm PDF'lerin tutarlı düzen, biçimleme ve içerik sağlamasını sağlar.
Yapmaya hazır mısınız? IronPDF'in ücretsiz deneme sürümünü indirin ve bu öğretici boyunca .NET Framework projelerinizde programatik olarak PDF dosyaları oluşturmaya devam edin.
IronPDF'i Tam .NET PDF Kütüphanesi Yapan Nedir?

IronPDF, .NET geliştiricileri için rakipsiz bir PDF kütüphanesi olarak öne çıkar, Web API projelerinde PDF üretimini kolay ve güvenilir kılan kapsamlı bir özellik seti sunar. Chrome rendering motoru üzerine inşa edilmiştir, sadece birkaç satır kodda piksel mükemmelliğinde HTML-den-PDF'ye dönüşümler sağlar ve tüm stil, JavaScript yürütümü ve duyarlı düzenler korur.
IronPDF'i .NET PDF API geliştirimi için ideal kılan temel yetenekler:
- Chrome Tabanlı Rendering: Gömülü resimler ve web varlıkları için tam destekle, Google Chrome'un motorunu doğru HTML'den PDF'ye dönüştürme için kullanır.
- Zengin Özellik Seti: Dijital imzalar, PDF formları, açıklamalar, şifreleme, sıkıştırma ve daha fazlası ile belgeleri düzenleyin.
- Güvenli PDF'ler Oluşturun: Şifreleme, dijital imzalar ve belge koruması ile hassas içeriği yönetin.
- Çoklu Giriş Formatları: PDF'ler oluşturmak için HTML, URL, resimler ve Office belgeleri kullanın.
- İleri Düzey Manipülasyon: Sayfaları birleştirin, belgeleri bölün, filigranlar uygulayın, etkileşimli formlar oluşturun ve PDF'leri programatik olarak manipüle edin.
- Platform Bağlantılı Destek: Windows, Linux, macOS, Docker ve bulut platformlarında çalışır.
- Performans Optimizasyonu: Asenkron işlemler, verimli bellek yönetimi ve render gecikme seçenekleri ile hızlı render.
PDF Belge API Projesi Nasıl Kurulum Yapılır?
Yeni bir ASP.NET Core Web API projesi oluşturarak ve gerekli paketleri yükleyerek başlayalım.
Ön Koşullar Nelerdir?
- .NET 6.0 SDK veya üstü
- Visual Studio 2022 veya Visual Studio Code
- PDF REST API'nizi test etmek için Postman veya benzeri bir API testi aracı
Projeyi Nasıl Oluştururum?
Öncelikle, PDF üretim aracımızı oluşturacağımız projeyi yaratalım.
dotnet new webapi -n PdfApiService
cd PdfApiService
dotnet new webapi -n PdfApiService
cd PdfApiService
IronPDF Nasıl Kurulur?
Ardından, IronPDF'i projenize NuGet üzerinden ekleyin:
dotnet add package IronPDF
dotnet add package IronPDF
Veya, Visual Studio'da NuGet Paket Yöneticisi Konsolu kullanarak:
Install-Package IronPDF
platforma özgü paketler, Docker kurulumu, veya Linux yapılandırmaları gibi gelişmiş kurulum seçenekleri için, IronPDF kurulum belgelerine göz atın.
Hangi Proje Yapısını Kullanmalıyım?
İyi bir C# geliştirme, temiz ve iyi yapılandırılmış bir proje klasörü korumayı gerektirir. Örneğin:

İlk PDF Uç Noktanızı Nasıl Oluşturursunuz?
HTML'i PDF formatına dönüştüren basit bir uç nokta oluşturalım. Öncelikle, hizmet arabirimini ve uygulamasını oluşturalım:
PDF Hizmetini Nasıl Oluştururum?
Önce, aşağıdakileri IPdfService.cs dosyanıza ekleyin:
public interface IPdfService
{
byte[] GeneratePdfFromHtml(string htmlContent);
byte[] GeneratePdfFromUrl(string url);
}
public interface IPdfService
{
byte[] GeneratePdfFromHtml(string htmlContent);
byte[] GeneratePdfFromUrl(string url);
}
Public Interface IPdfService
Function GeneratePdfFromHtml(htmlContent As String) As Byte()
Function GeneratePdfFromUrl(url As String) As Byte()
End Interface
PdfService.cs dosyasına bunu ekleyin:
using IronPdf;
public class PdfService : IPdfService
{
private readonly ChromePdfRenderer _renderer;
public PdfService()
{
_renderer = new ChromePdfRenderer();
// Configure rendering options for optimal PDF generation in .NET
_renderer.RenderingOptions.MarginTop = 20;
_renderer.RenderingOptions.MarginBottom = 20;
_renderer.RenderingOptions.PrintHtmlBackgrounds = true;
}
public byte[] GeneratePdfFromHtml(string htmlContent)
{
// Generate PDF from HTML using the .NET PDF API
var pdf = _renderer.RenderHtmlAsPdf(htmlContent);
return pdf.BinaryData;
}
public byte[] GeneratePdfFromUrl(string url)
{
// Convert URL to PDF in the REST API
var pdf = _renderer.RenderUrlAsPdf(url);
return pdf.BinaryData;
}
}
using IronPdf;
public class PdfService : IPdfService
{
private readonly ChromePdfRenderer _renderer;
public PdfService()
{
_renderer = new ChromePdfRenderer();
// Configure rendering options for optimal PDF generation in .NET
_renderer.RenderingOptions.MarginTop = 20;
_renderer.RenderingOptions.MarginBottom = 20;
_renderer.RenderingOptions.PrintHtmlBackgrounds = true;
}
public byte[] GeneratePdfFromHtml(string htmlContent)
{
// Generate PDF from HTML using the .NET PDF API
var pdf = _renderer.RenderHtmlAsPdf(htmlContent);
return pdf.BinaryData;
}
public byte[] GeneratePdfFromUrl(string url)
{
// Convert URL to PDF in the REST API
var pdf = _renderer.RenderUrlAsPdf(url);
return pdf.BinaryData;
}
}
Imports IronPdf
Public Class PdfService
Implements IPdfService
Private ReadOnly _renderer As ChromePdfRenderer
Public Sub New()
_renderer = New ChromePdfRenderer()
' Configure rendering options for optimal PDF generation in .NET
_renderer.RenderingOptions.MarginTop = 20
_renderer.RenderingOptions.MarginBottom = 20
_renderer.RenderingOptions.PrintHtmlBackgrounds = True
End Sub
Public Function GeneratePdfFromHtml(htmlContent As String) As Byte()
' Generate PDF from HTML using the .NET PDF API
Dim pdf = _renderer.RenderHtmlAsPdf(htmlContent)
Return pdf.BinaryData
End Function
Public Function GeneratePdfFromUrl(url As String) As Byte()
' Convert URL to PDF in the REST API
Dim pdf = _renderer.RenderUrlAsPdf(url)
Return pdf.BinaryData
End Function
End Class
PdfService, HTML'yi PDF'ye dönüştürmekten sorumludur. IronPDF'in ChromePdfRenderer'ini kullanarak, profesyonel sonuçlar için sayfa kenar boşlukları ve arka plan işleme gibi varsayılanları bu sınıf yapılandırır. İleri rendering yapılandırmaları için, IronPDF'in rendering seçeneklerini inceleyin.
Kontrolör ham HTML'yi ilettiğinde, hizmet bunu yüksek kaliteli bir PDF'ye render eder ve indirilebilecek bayt verileri döndürür. URL'den PDF'ye dönüşümü kullanarak doğrudan tüm web sayfalarını da PDF'lere dönüştürür.
Kontrolörü Nasıl Oluştururum?
Şimdi API'niz için kontrolörü oluşturun. Bu, HTML'den PDF dosyaları üreten ve PDF belgelerini indirmenize ve kaydetmenize olanak tanıyan bir uç nokta sağlar.
// Controllers/PdfController.cs
using Microsoft.AspNetCore.Mvc;
[ApiController]
[Route("api/[controller]")]
public class PdfController : ControllerBase
{
private readonly IPdfService _pdfService;
public PdfController(IPdfService pdfService)
{
_pdfService = pdfService;
}
[HttpPost("html-to-pdf")]
public IActionResult ConvertHtmlToPdf([FromBody] HtmlRequest request)
{
try
{
var pdfBytes = _pdfService.GeneratePdfFromHtml(request.HtmlContent);
// Return as downloadable file
return File(pdfBytes, "application/pdf", "document.pdf");
}
catch (Exception ex)
{
return BadRequest($"Error generating PDF: {ex.Message}");
}
}
}
// Controllers/PdfController.cs
using Microsoft.AspNetCore.Mvc;
[ApiController]
[Route("api/[controller]")]
public class PdfController : ControllerBase
{
private readonly IPdfService _pdfService;
public PdfController(IPdfService pdfService)
{
_pdfService = pdfService;
}
[HttpPost("html-to-pdf")]
public IActionResult ConvertHtmlToPdf([FromBody] HtmlRequest request)
{
try
{
var pdfBytes = _pdfService.GeneratePdfFromHtml(request.HtmlContent);
// Return as downloadable file
return File(pdfBytes, "application/pdf", "document.pdf");
}
catch (Exception ex)
{
return BadRequest($"Error generating PDF: {ex.Message}");
}
}
}
Imports Microsoft.AspNetCore.Mvc
<ApiController>
<Route("api/[controller]")>
Public Class PdfController
Inherits ControllerBase
Private ReadOnly _pdfService As IPdfService
Public Sub New(pdfService As IPdfService)
_pdfService = pdfService
End Sub
<HttpPost("html-to-pdf")>
Public Function ConvertHtmlToPdf(<FromBody> request As HtmlRequest) As IActionResult
Try
Dim pdfBytes = _pdfService.GeneratePdfFromHtml(request.HtmlContent)
' Return as downloadable file
Return File(pdfBytes, "application/pdf", "document.pdf")
Catch ex As Exception
Return BadRequest($"Error generating PDF: {ex.Message}")
End Try
End Function
End Class
Ardından, HtmlRequest.cs dosyasına bunu ekleyin:
// Models/HtmlRequest.cs
public class HtmlRequest
{
public string HtmlContent { get; set; }
public string FileName { get; set; } = "document.pdf";
}
// Models/HtmlRequest.cs
public class HtmlRequest
{
public string HtmlContent { get; set; }
public string FileName { get; set; } = "document.pdf";
}
' Models/HtmlRequest.vb
Public Class HtmlRequest
Public Property HtmlContent As String
Public Property FileName As String = "document.pdf"
End Class
Bu, HTML'yi indirilebilir bir PDF'ye dönüştüren bir API uç noktası kurar. api/pdf/html-to-pdf'a HTML gönderildiğinde, PdfController hizmete dönüşümü devreder.
Oluşturulduktan sonra, kontrolör PDF'yi indirilebilir bir dosya olarak geri döner. İstek, HTML ve isteğe bağlı bir dosya adı içeren HtmlRequest modelini kullanılır. Bu, istemciler için HTML'yi gönderip cilalı bir PDF almalarını kolaylaştırır.
Hizmetleri Nasıl Kaydederim?
Program.cs dosyanızı, PDF hizmetini kaydetmek için güncelleyin:
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllers();
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
// Register PDF service
builder.Services.AddSingleton<IPdfService, PdfService>();
var app = builder.Build();
if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI();
}
app.UseHttpsRedirection();
app.MapControllers();
app.Run();
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllers();
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
// Register PDF service
builder.Services.AddSingleton<IPdfService, PdfService>();
var app = builder.Build();
if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI();
}
app.UseHttpsRedirection();
app.MapControllers();
app.Run();
Imports Microsoft.AspNetCore.Builder
Imports Microsoft.Extensions.DependencyInjection
Dim builder = WebApplication.CreateBuilder(args)
builder.Services.AddControllers()
builder.Services.AddEndpointsApiExplorer()
builder.Services.AddSwaggerGen()
' Register PDF service
builder.Services.AddSingleton(Of IPdfService, PdfService)()
Dim app = builder.Build()
If app.Environment.IsDevelopment() Then
app.UseSwagger()
app.UseSwaggerUI()
End If
app.UseHttpsRedirection()
app.MapControllers()
app.Run()
Farklı Yanıt Türleri Nasıl Yönetilir?
API'niz, müşteri ihtiyaçlarına göre farklı şekillerde PDF'leri döndürecek şekilde destek vermelidir:
[HttpPost("generate")]
public IActionResult GeneratePdf([FromBody] PdfRequest request)
{
var pdfBytes = _pdfService.GeneratePdfFromHtml(request.HtmlContent);
switch (request.ResponseType?.ToLower())
{
case "base64":
return Ok(new
{
data = Convert.ToBase64String(pdfBytes),
filename = request.FileName
});
case "inline":
return File(pdfBytes, "application/pdf");
default: // download
return File(pdfBytes, "application/pdf", request.FileName);
}
}
[HttpPost("generate")]
public IActionResult GeneratePdf([FromBody] PdfRequest request)
{
var pdfBytes = _pdfService.GeneratePdfFromHtml(request.HtmlContent);
switch (request.ResponseType?.ToLower())
{
case "base64":
return Ok(new
{
data = Convert.ToBase64String(pdfBytes),
filename = request.FileName
});
case "inline":
return File(pdfBytes, "application/pdf");
default: // download
return File(pdfBytes, "application/pdf", request.FileName);
}
}
Imports Microsoft.AspNetCore.Mvc
<HttpPost("generate")>
Public Function GeneratePdf(<FromBody> request As PdfRequest) As IActionResult
Dim pdfBytes = _pdfService.GeneratePdfFromHtml(request.HtmlContent)
Select Case request.ResponseType?.ToLower()
Case "base64"
Return Ok(New With {
.data = Convert.ToBase64String(pdfBytes),
.filename = request.FileName
})
Case "inline"
Return File(pdfBytes, "application/pdf")
Case Else ' download
Return File(pdfBytes, "application/pdf", request.FileName)
End Select
End Function
Bu, esnek bir PDF üretim uç noktası ekler. İndirme zorlaması yerine, GeneratePdf yöntemi talimatların nasıl alınacağını seçme imkanı sunar: indirme olarak, tarayıcı içinde satır içi veya API kullanımı için Base64 kodlaması ile.
PdfRequest modeli, HtmlRequest modelini ResponseType seçeneğiyle genişletir. Bu, kullanıcılara PDF teslimi üzerinde kontrol sağlar, bu da API'yi daha çok yönlü hale getirir. Dosya sistemi erişimi olmadan bellek içinde PDF'leri işlemenin yolları için, IronPDF'in bellek akışı dökümantasyonuna bakın.
Programımızı çalıştırdığımızda, Swagger üzerinde bu çıktıyı göreceğiz:

Yaygın PDF İşlemleri Nasıl Uygulanır?
Hizmetimizi çeşitli PDF oluşturma senaryolarını yönetebilecek şekilde genişletelim:
URL'leri PDF'ye Nasıl Dönüştürürüm?
[HttpPost("url-to-pdf")]
public async Task<IActionResult> ConvertUrlToPdf([FromBody] UrlRequest request)
{
try
{
var pdfBytes = await Task.Run(() =>
_pdfService.GeneratePdfFromUrl(request.Url));
return File(pdfBytes, "application/pdf",
$"{request.FileName ?? "website"}.pdf");
}
catch (Exception ex)
{
return BadRequest($"Failed to convert URL: {ex.Message}");
}
}
public class UrlRequest
{
public string Url { get; set; }
public string FileName { get; set; }
}
[HttpPost("url-to-pdf")]
public async Task<IActionResult> ConvertUrlToPdf([FromBody] UrlRequest request)
{
try
{
var pdfBytes = await Task.Run(() =>
_pdfService.GeneratePdfFromUrl(request.Url));
return File(pdfBytes, "application/pdf",
$"{request.FileName ?? "website"}.pdf");
}
catch (Exception ex)
{
return BadRequest($"Failed to convert URL: {ex.Message}");
}
}
public class UrlRequest
{
public string Url { get; set; }
public string FileName { get; set; }
}
Imports System.Threading.Tasks
Imports Microsoft.AspNetCore.Mvc
<HttpPost("url-to-pdf")>
Public Async Function ConvertUrlToPdf(<FromBody> request As UrlRequest) As Task(Of IActionResult)
Try
Dim pdfBytes = Await Task.Run(Function() _pdfService.GeneratePdfFromUrl(request.Url))
Return File(pdfBytes, "application/pdf", $"{If(request.FileName, "website")}.pdf")
Catch ex As Exception
Return BadRequest($"Failed to convert URL: {ex.Message}")
End Try
End Function
Public Class UrlRequest
Public Property Url As String
Public Property FileName As String
End Class
Bu uç nokta URL'leri indirilebilir PDF'lere dönüştürür. Bir POST isteği /api/pdf/url-to-pdf'e ulaştığında, kontrolör URL'yi arka planda PDF baytlarına dönüştürmek için _pdfService kullanır, ardından indirme için geri döner. Dönüşüm başarısız olursa, açık bir hata mesajı ile yanıt verir. Kimlik doğrulama gerektiren web siteleri için, IronPDF'in giriş dökümantasyonuna göz atın.
"https://www.apple.com/nz" URLsini kullanarak POST isteğini test edelim. Aşağıda elde ettiğimiz çıktı bulunmaktadır:
Çıktı Nasıl Görünüyor?

Özel Filigranlar Nasıl Eklenir?
public byte[] AddWatermarkFromFile(string filePath, string watermarkText)
{
// Load PDF directly from file
var pdf = PdfDocument.FromFile(filePath);
pdf.ApplyWatermark(
$"<h1 style='color:red;font-size:72px;'>{watermarkText}</h1>",
75,
IronPdf.Editing.VerticalAlignment.Middle,
IronPdf.Editing.HorizontalAlignment.Center
);
return pdf.BinaryData;
}
public byte[] AddWatermarkFromFile(string filePath, string watermarkText)
{
// Load PDF directly from file
var pdf = PdfDocument.FromFile(filePath);
pdf.ApplyWatermark(
$"<h1 style='color:red;font-size:72px;'>{watermarkText}</h1>",
75,
IronPdf.Editing.VerticalAlignment.Middle,
IronPdf.Editing.HorizontalAlignment.Center
);
return pdf.BinaryData;
}
Imports IronPdf
Public Function AddWatermarkFromFile(filePath As String, watermarkText As String) As Byte()
' Load PDF directly from file
Dim pdf = PdfDocument.FromFile(filePath)
pdf.ApplyWatermark(
$"<h1 style='color:red;font-size:72px;'>{watermarkText}</h1>",
75,
IronPdf.Editing.VerticalAlignment.Middle,
IronPdf.Editing.HorizontalAlignment.Center
)
Return pdf.BinaryData
End Function
Bu, test için yerel bir dosyayı manuel olarak yükler. PDF API'nizin bir PDF üretmesini ve ardından özel filigranları kolayca uygulamasını ayarlayabilirsiniz. Gelişmiş filigranlama seçenekleri, görsel filigranlar ve özel pozisyonlandırma dahil için, filigran rehberine göz atın.
Filigran Çıktısı Nasıl Görünür?

Şablonlarla Dinamik Veriler Nasıl Eklenir?
Gerçek dünya uygulamaları için, şablonlardan dinamik veriler içeren PDF'ler üretmeniz sıkça gerekecektir:
[HttpPost("from-template")]
public IActionResult GenerateFromTemplate([FromBody] TemplateRequest request)
{
// Simple template replacement
var html = request.Template;
foreach (var item in request.Data)
{
html = html.Replace($"{{{{{item.Key}}}}}", item.Value);
}
var pdfBytes = _pdfService.GeneratePdfFromHtml(html);
return File(pdfBytes, "application/pdf", request.FileName);
}
public class TemplateRequest
{
public string Template { get; set; }
public Dictionary<string, string> Data { get; set; }
public string FileName { get; set; } = "document.pdf";
}
[HttpPost("from-template")]
public IActionResult GenerateFromTemplate([FromBody] TemplateRequest request)
{
// Simple template replacement
var html = request.Template;
foreach (var item in request.Data)
{
html = html.Replace($"{{{{{item.Key}}}}}", item.Value);
}
var pdfBytes = _pdfService.GeneratePdfFromHtml(html);
return File(pdfBytes, "application/pdf", request.FileName);
}
public class TemplateRequest
{
public string Template { get; set; }
public Dictionary<string, string> Data { get; set; }
public string FileName { get; set; } = "document.pdf";
}
Imports Microsoft.AspNetCore.Mvc
<HttpPost("from-template")>
Public Function GenerateFromTemplate(<FromBody> request As TemplateRequest) As IActionResult
' Simple template replacement
Dim html As String = request.Template
For Each item In request.Data
html = html.Replace($"{{{{{item.Key}}}}}", item.Value)
Next
Dim pdfBytes As Byte() = _pdfService.GeneratePdfFromHtml(html)
Return File(pdfBytes, "application/pdf", request.FileName)
End Function
Public Class TemplateRequest
Public Property Template As String
Public Property Data As Dictionary(Of String, String)
Public Property FileName As String = "document.pdf"
End Class
Razor, Handlebars veya diğer motorlarla gelişmiş şablon senaryoları için IronPDF'in HTML'den PDF'ye dökümantasyonuna göz atın. Ayrıca MVC uygulamaları için CSHTML'den PDF'e dönüştürmeyi ve Blazor uygulamaları için Razor'dan PDF'e dönüştürmeyi keşfedebilirsiniz. Başsız Razor renderı için, CSHTML başsız rehberine bakın.
Performans Nasıl Optimize Edilir?
Üretim bir PDF API inşa etmenin önemli noktalarından biri performanstır. İşte anahtar optimizasyon stratejileri:
Neden Asenkron İşlemler Kullanılır?
Projeleriniz I/O işlemlerini içerdiğinde asenkron kodlamayı kullanın. Bu özellikle PDF içeriğinizin aşağıdan geldiğinde yardımcı olur:
- HTML sayfalarını indirme (
RenderUrlAsPdf) - Resim, CSS veya yazı tiplerini HTTP üzerinden almak
- Dosyaları disk veya bulut depolamaya okuma/yazma
Bu işlemler iplikleri engelleyebilir, fakat asenkron, API ipliklerin boşta beklemesini önler. Kapsamlı asenkron PDF üretimi desenleri için, asenkron PDF üretim kılavuzuna göz atın.
Örnek:
public async Task<byte[]> GeneratePdfFromHtmlAsync(string htmlContent)
{
return await Task.Run(() =>
{
var pdf = _renderer.RenderHtmlAsPdf(htmlContent);
return pdf.BinaryData;
});
}
public async Task<byte[]> GeneratePdfFromHtmlAsync(string htmlContent)
{
return await Task.Run(() =>
{
var pdf = _renderer.RenderHtmlAsPdf(htmlContent);
return pdf.BinaryData;
});
}
Imports System.Threading.Tasks
Public Async Function GeneratePdfFromHtmlAsync(htmlContent As String) As Task(Of Byte())
Return Await Task.Run(Function()
Dim pdf = _renderer.RenderHtmlAsPdf(htmlContent)
Return pdf.BinaryData
End Function)
End Function
Paralel PDF üretim senaryoları için çoklu iş parçacığı ve paralel işlem tekniklerini keşfedin.
Hangi Rendering Seçeneklerini Yapılandırmalıyım?
IronPDF'yi en iyi performans için yapılandırın:
_renderer.RenderingOptions.EnableJavaScript = false; // If JS not needed
_renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print;
_renderer.RenderingOptions.RenderDelay = 0; // Remove if no JS
_renderer.RenderingOptions.Timeout = 30; // Set reasonable timeout
_renderer.RenderingOptions.EnableJavaScript = false; // If JS not needed
_renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print;
_renderer.RenderingOptions.RenderDelay = 0; // Remove if no JS
_renderer.RenderingOptions.Timeout = 30; // Set reasonable timeout
Kapsamlı render konfigürasyon seçenekleri, görünüm limiti ayarları, özel kağıt boyutları ve sayfa yönü dahil için, render seçenekleri dökümantasyonuna göz atın.
PDF API'nizi Nasıl Güvenli Hale Getirirsiniz?
Her üretim API'si için güvenlik esastır. Basit API anahtar kimlik doğrulama yaklaşımı:
// Middleware/ApiKeyMiddleware.cs
public class ApiKeyMiddleware
{
private readonly RequestDelegate _next;
private const string ApiKeyHeader = "X-API-Key";
public ApiKeyMiddleware(RequestDelegate next)
{
_next = next;
}
public async Task InvokeAsync(HttpContext context)
{
if (!context.Request.Headers.TryGetValue(ApiKeyHeader, out var apiKey))
{
context.Response.StatusCode = 401;
await context.Response.WriteAsync("API Key required");
return;
}
// Validate API key (in production, check against database)
var validApiKey = context.RequestServices
.GetRequiredService<IConfiguration>()["ApiKey"];
if (apiKey != validApiKey)
{
context.Response.StatusCode = 403;
await context.Response.WriteAsync("Invalid API Key");
return;
}
await _next(context);
}
}
// In Program.cs
app.UseMiddleware<ApiKeyMiddleware>();
// Middleware/ApiKeyMiddleware.cs
public class ApiKeyMiddleware
{
private readonly RequestDelegate _next;
private const string ApiKeyHeader = "X-API-Key";
public ApiKeyMiddleware(RequestDelegate next)
{
_next = next;
}
public async Task InvokeAsync(HttpContext context)
{
if (!context.Request.Headers.TryGetValue(ApiKeyHeader, out var apiKey))
{
context.Response.StatusCode = 401;
await context.Response.WriteAsync("API Key required");
return;
}
// Validate API key (in production, check against database)
var validApiKey = context.RequestServices
.GetRequiredService<IConfiguration>()["ApiKey"];
if (apiKey != validApiKey)
{
context.Response.StatusCode = 403;
await context.Response.WriteAsync("Invalid API Key");
return;
}
await _next(context);
}
}
// In Program.cs
app.UseMiddleware<ApiKeyMiddleware>();
Imports Microsoft.AspNetCore.Http
Imports Microsoft.Extensions.Configuration
Imports System.Threading.Tasks
' Middleware/ApiKeyMiddleware.vb
Public Class ApiKeyMiddleware
Private ReadOnly _next As RequestDelegate
Private Const ApiKeyHeader As String = "X-API-Key"
Public Sub New(next As RequestDelegate)
_next = next
End Sub
Public Async Function InvokeAsync(context As HttpContext) As Task
Dim apiKey As String = Nothing
If Not context.Request.Headers.TryGetValue(ApiKeyHeader, apiKey) Then
context.Response.StatusCode = 401
Await context.Response.WriteAsync("API Key required")
Return
End If
' Validate API key (in production, check against database)
Dim validApiKey As String = context.RequestServices.GetRequiredService(Of IConfiguration)()("ApiKey")
If apiKey <> validApiKey Then
context.Response.StatusCode = 403
Await context.Response.WriteAsync("Invalid API Key")
Return
End If
Await _next(context)
End Function
End Class
' In Program.vb
app.UseMiddleware(Of ApiKeyMiddleware)()
Gelişmiş kimlik doğrulama senaryoları için düşünün:
- JWT Kimlik Doğrulama - API kimlik doğrulaması için endüstri standartları
- OAuth 2.0 - Üçüncü taraf entegrasyonları için
- Azure AD Entegrasyonu - Kurumsal kimlik doğrulama
- API Hız Sınırlaması - Kötüye kullanımı önlemek ve adil kullanımı sağlamak
- HTTP Başlıkları - artırılmış güvenlik için özel başlık konfigürasyonu
PDF'ye özel güvenlik için şifre koruması, dijital imzalar ve potansiyel olarak kötü niyetli içeriği kaldırmak için PDF temizleme uygulayın.
Gerçek Dünya Faturası Üretim API'si Nasıl Kurulur?
Tam bir uygulama gösteren pratik bir fatura üretim uç noktası yaratalım. Bu örnek, üretim bir .NET PDF API'sinin dinamik verilerle profesyonel faturalar nasıl oluşturduğunu gösterir.
Öncelikle, Modeller klasörünüzde yeni bir dosya oluşturun. Burada, benim adlandırdığım Invoice.cs kullanıldı. Daha sonra şu kodu ekleyin:
public class Invoice
{
public string InvoiceNumber { get; set; }
public DateTime Date { get; set; }
public string CustomerName { get; set; }
public string CustomerAddress { get; set; }
public List<InvoiceItem> Items { get; set; }
public decimal Tax { get; set; }
}
public class InvoiceItem
{
public string Description { get; set; }
public int Quantity { get; set; }
public decimal UnitPrice { get; set; }
public decimal Total => Quantity * UnitPrice;
}
public class Invoice
{
public string InvoiceNumber { get; set; }
public DateTime Date { get; set; }
public string CustomerName { get; set; }
public string CustomerAddress { get; set; }
public List<InvoiceItem> Items { get; set; }
public decimal Tax { get; set; }
}
public class InvoiceItem
{
public string Description { get; set; }
public int Quantity { get; set; }
public decimal UnitPrice { get; set; }
public decimal Total => Quantity * UnitPrice;
}
Public Class Invoice
Public Property InvoiceNumber As String
Public Property [Date] As DateTime
Public Property CustomerName As String
Public Property CustomerAddress As String
Public Property Items As List(Of InvoiceItem)
Public Property Tax As Decimal
End Class
Public Class InvoiceItem
Public Property Description As String
Public Property Quantity As Integer
Public Property UnitPrice As Decimal
Public ReadOnly Property Total As Decimal
Get
Return Quantity * UnitPrice
End Get
End Property
End Class
Sonra, fatura üretici için yeni bir hizmet dosyası oluşturun. Hizmetler klasörünüzde aşağıdaki kodu ekleyin. InvoiceService.cs adını verdiğim bir dosya oluşturdum. Bu kod, Faturanızın PDF'sinin stil ve düzenini işler:
public class InvoiceService
{
private readonly ChromePdfRenderer _renderer;
public InvoiceService()
{
_renderer = new ChromePdfRenderer();
_renderer.RenderingOptions.MarginTop = 10;
_renderer.RenderingOptions.MarginBottom = 10;
_renderer.RenderingOptions.PrintHtmlBackgrounds = true;
}
public byte[] GenerateInvoice(Invoice invoice)
{
var html = BuildInvoiceHtml(invoice);
// Add footer with page numbers
_renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
{
MaxHeight = 15,
HtmlFragment = "<center><i>{page} of {total-pages}</i></center>",
DrawDividerLine = true
};
var pdf = _renderer.RenderHtmlAsPdf(html);
return pdf.BinaryData;
}
private string BuildInvoiceHtml(Invoice invoice)
{
var subtotal = invoice.Items.Sum(i => i.Total);
var taxAmount = subtotal * (invoice.Tax / 100);
var total = subtotal + taxAmount;
var itemsHtml = string.Join("", invoice.Items.Select(item =>
$@"<tr>
<td>{item.Description}</td>
<td class='text-center'>{item.Quantity}</td>
<td class='text-right'>${item.UnitPrice:F2}</td>
<td class='text-right'>${item.Total:F2}</td>
</tr>"));
return $@"
<!DOCTYPE html>
<html>
<head>
<style>
body {{ font-family: Arial, sans-serif; }}
.invoice-header {{
background-color: #f8f9fa;
padding: 20px;
margin-bottom: 20px;
}}
table {{
width: 100%;
border-collapse: collapse;
}}
th, td {{
padding: 10px;
border-bottom: 1px solid #ddd;
}}
th {{
background-color: #007bff;
color: white;
}}
.text-right {{ text-align: right; }}
.text-center {{ text-align: center; }}
.total-section {{
margin-top: 20px;
text-align: right;
}}
</style>
</head>
<body>
<div class='invoice-header'>
<h1>Invoice #{invoice.InvoiceNumber}</h1>
<p>Date: {invoice.Date:yyyy-MM-dd}</p>
</div>
<div>
<h3>Bill To:</h3>
<p>{invoice.CustomerName}<br/>{invoice.CustomerAddress}</p>
</div>
<table>
<thead>
<tr>
<th>Description</th>
<th>Quantity</th>
<th>Unit Price</th>
<th>Total</th>
</tr>
</thead>
<tbody>
{itemsHtml}
</tbody>
</table>
<div class='total-section'>
<p>Subtotal: ${subtotal:F2}</p>
<p>Tax ({invoice.Tax}%): ${taxAmount:F2}</p>
<h3>Total: ${total:F2}</h3>
</div>
</body>
</html>";
}
}
public class InvoiceService
{
private readonly ChromePdfRenderer _renderer;
public InvoiceService()
{
_renderer = new ChromePdfRenderer();
_renderer.RenderingOptions.MarginTop = 10;
_renderer.RenderingOptions.MarginBottom = 10;
_renderer.RenderingOptions.PrintHtmlBackgrounds = true;
}
public byte[] GenerateInvoice(Invoice invoice)
{
var html = BuildInvoiceHtml(invoice);
// Add footer with page numbers
_renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
{
MaxHeight = 15,
HtmlFragment = "<center><i>{page} of {total-pages}</i></center>",
DrawDividerLine = true
};
var pdf = _renderer.RenderHtmlAsPdf(html);
return pdf.BinaryData;
}
private string BuildInvoiceHtml(Invoice invoice)
{
var subtotal = invoice.Items.Sum(i => i.Total);
var taxAmount = subtotal * (invoice.Tax / 100);
var total = subtotal + taxAmount;
var itemsHtml = string.Join("", invoice.Items.Select(item =>
$@"<tr>
<td>{item.Description}</td>
<td class='text-center'>{item.Quantity}</td>
<td class='text-right'>${item.UnitPrice:F2}</td>
<td class='text-right'>${item.Total:F2}</td>
</tr>"));
return $@"
<!DOCTYPE html>
<html>
<head>
<style>
body {{ font-family: Arial, sans-serif; }}
.invoice-header {{
background-color: #f8f9fa;
padding: 20px;
margin-bottom: 20px;
}}
table {{
width: 100%;
border-collapse: collapse;
}}
th, td {{
padding: 10px;
border-bottom: 1px solid #ddd;
}}
th {{
background-color: #007bff;
color: white;
}}
.text-right {{ text-align: right; }}
.text-center {{ text-align: center; }}
.total-section {{
margin-top: 20px;
text-align: right;
}}
</style>
</head>
<body>
<div class='invoice-header'>
<h1>Invoice #{invoice.InvoiceNumber}</h1>
<p>Date: {invoice.Date:yyyy-MM-dd}</p>
</div>
<div>
<h3>Bill To:</h3>
<p>{invoice.CustomerName}<br/>{invoice.CustomerAddress}</p>
</div>
<table>
<thead>
<tr>
<th>Description</th>
<th>Quantity</th>
<th>Unit Price</th>
<th>Total</th>
</tr>
</thead>
<tbody>
{itemsHtml}
</tbody>
</table>
<div class='total-section'>
<p>Subtotal: ${subtotal:F2}</p>
<p>Tax ({invoice.Tax}%): ${taxAmount:F2}</p>
<h3>Total: ${total:F2}</h3>
</div>
</body>
</html>";
}
}
Imports System
Imports System.Linq
Public Class InvoiceService
Private ReadOnly _renderer As ChromePdfRenderer
Public Sub New()
_renderer = New ChromePdfRenderer()
_renderer.RenderingOptions.MarginTop = 10
_renderer.RenderingOptions.MarginBottom = 10
_renderer.RenderingOptions.PrintHtmlBackgrounds = True
End Sub
Public Function GenerateInvoice(invoice As Invoice) As Byte()
Dim html = BuildInvoiceHtml(invoice)
' Add footer with page numbers
_renderer.RenderingOptions.HtmlFooter = New HtmlHeaderFooter With {
.MaxHeight = 15,
.HtmlFragment = "<center><i>{page} of {total-pages}</i></center>",
.DrawDividerLine = True
}
Dim pdf = _renderer.RenderHtmlAsPdf(html)
Return pdf.BinaryData
End Function
Private Function BuildInvoiceHtml(invoice As Invoice) As String
Dim subtotal = invoice.Items.Sum(Function(i) i.Total)
Dim taxAmount = subtotal * (invoice.Tax / 100)
Dim total = subtotal + taxAmount
Dim itemsHtml = String.Join("", invoice.Items.Select(Function(item) _
$"<tr>
<td>{item.Description}</td>
<td class='text-center'>{item.Quantity}</td>
<td class='text-right'>${item.UnitPrice:F2}</td>
<td class='text-right'>${item.Total:F2}</td>
</tr>"))
Return $"
<!DOCTYPE html>
<html>
<head>
<style>
body {{ font-family: Arial, sans-serif; }}
.invoice-header {{
background-color: #f8f9fa;
padding: 20px;
margin-bottom: 20px;
}}
table {{
width: 100%;
border-collapse: collapse;
}}
th, td {{
padding: 10px;
border-bottom: 1px solid #ddd;
}}
th {{
background-color: #007bff;
color: white;
}}
.text-right {{ text-align: right; }}
.text-center {{ text-align: center; }}
.total-section {{
margin-top: 20px;
text-align: right;
}}
</style>
</head>
<body>
<div class='invoice-header'>
<h1>Invoice #{invoice.InvoiceNumber}</h1>
<p>Date: {invoice.Date:yyyy-MM-dd}</p>
</div>
<div>
<h3>Bill To:</h3>
<p>{invoice.CustomerName}<br/>{invoice.CustomerAddress}</p>
</div>
<table>
<thead>
<tr>
<th>Description</th>
<th>Quantity</th>
<th>Unit Price</th>
<th>Total</th>
</tr>
</thead>
<tbody>
{itemsHtml}
</tbody>
</table>
<div class='total-section'>
<p>Subtotal: ${subtotal:F2}</p>
<p>Tax ({invoice.Tax}%): ${taxAmount:F2}</p>
<h3>Total: ${total:F2}</h3>
</div>
</body>
</html>"
End Function
End Class
Son olarak, API kullanarak faturaları erişmek ve oluşturmak için yeni bir Kontrolör oluşturun:
[ApiController]
[Route("api/[controller]")]
public class InvoiceController : ControllerBase
{
private readonly InvoiceService _invoiceService;
public InvoiceController(InvoiceService invoiceService)
{
_invoiceService = invoiceService;
}
[HttpPost("generate")]
public IActionResult GenerateInvoice([FromBody] Invoice invoice)
{
try
{
var pdfBytes = _invoiceService.GenerateInvoice(invoice);
var fileName = $"Invoice_{invoice.InvoiceNumber}.pdf";
return File(pdfBytes, "application/pdf", fileName);
}
catch (Exception ex)
{
return StatusCode(500, $"Error generating invoice: {ex.Message}");
}
}
}
[ApiController]
[Route("api/[controller]")]
public class InvoiceController : ControllerBase
{
private readonly InvoiceService _invoiceService;
public InvoiceController(InvoiceService invoiceService)
{
_invoiceService = invoiceService;
}
[HttpPost("generate")]
public IActionResult GenerateInvoice([FromBody] Invoice invoice)
{
try
{
var pdfBytes = _invoiceService.GenerateInvoice(invoice);
var fileName = $"Invoice_{invoice.InvoiceNumber}.pdf";
return File(pdfBytes, "application/pdf", fileName);
}
catch (Exception ex)
{
return StatusCode(500, $"Error generating invoice: {ex.Message}");
}
}
}
Imports Microsoft.AspNetCore.Mvc
<ApiController>
<Route("api/[controller]")>
Public Class InvoiceController
Inherits ControllerBase
Private ReadOnly _invoiceService As InvoiceService
Public Sub New(invoiceService As InvoiceService)
_invoiceService = invoiceService
End Sub
<HttpPost("generate")>
Public Function GenerateInvoice(<FromBody> invoice As Invoice) As IActionResult
Try
Dim pdfBytes = _invoiceService.GenerateInvoice(invoice)
Dim fileName = $"Invoice_{invoice.InvoiceNumber}.pdf"
Return File(pdfBytes, "application/pdf", fileName)
Catch ex As Exception
Return StatusCode(500, $"Error generating invoice: {ex.Message}")
End Try
End Function
End Class
Gelişmiş fatura özellikleri için barkod, QR kodları, sayfa numaraları ve özel başlık/alt başlıklar eklemeyi düşünün. Uzun süreli arşivleme veya elektronik imza işleriyle entegre için PDF/A uyumu da uygulayabilirsiniz.
Fatura Çıktısı Nasıl Görünür?

Konteyner Dağıtım Dikkatlerini Nelerdir?
Bu eğitim, yerel geliştirme üzerinde yoğunlaşırken, PDF API'nizi kapsüllemenin kısa bir genel bakışını işte böyle sunar:
Temel bir Dockerfile Nasıl Oluşturulur?
FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
WORKDIR /app
EXPOSE 80
FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
WORKDIR /src
COPY ["PdfApiService.csproj", "."]
RUN dotnet restore
COPY . .
RUN dotnet build -c Release -o /app/build
FROM build AS publish
RUN dotnet publish -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
# IronPDF requires additional dependencies on Linux
RUN apt-get update && apt-get install -y \
libgdiplus \
libc6-dev \
libx11-dev \
&& rm -rf /var/lib/apt/lists/*
ENTRYPOINT ["dotnet", "PdfApiService.dll"]
Detaylı dağıtım rehberleri için .NET PDF API'nizi inceleyin:
- IronPDF Docker Belgelendirmesi - Tam kapsama kılavuzu
- IronPDF Azure Dağıtımı - Azure Fonksiyonları ve App Service
- IronPDF AWS Dağıtımı - Lambda ve EC2 dağıtımı
- IronPDF Linux Kurulumu - Linux'a özgü yapılandırma
- Uzaktan Kapsülleme Olarak Çalıştırma - IronPDF Engine kapsülleme
- Yerel ve Uzaktan Motor - Dağıtım mimarisi seçenekleri
Hata Yönetimi En İyi Uygulamaları Nelerdir?
Hata tolere edici programlar için, tutarlı hata yanıtları için küresel bir hata yöneticisi uygulayın:
// Middleware/ErrorHandlingMiddleware.cs
public class ErrorHandlingMiddleware
{
private readonly RequestDelegate _next;
private readonly ILogger<ErrorHandlingMiddleware> _logger;
public ErrorHandlingMiddleware(RequestDelegate next, ILogger<ErrorHandlingMiddleware> logger)
{
_next = next;
_logger = logger;
}
public async Task InvokeAsync(HttpContext context)
{
try
{
await _next(context);
}
catch (Exception ex)
{
_logger.LogError(ex, "An error occurred processing request {Path}", context.Request.Path);
await HandleExceptionAsync(context, ex);
}
}
private static async Task HandleExceptionAsync(HttpContext context, Exception ex)
{
context.Response.ContentType = "application/json";
context.Response.StatusCode = ex switch
{
ArgumentNullException => 400,
UnauthorizedAccessException => 401,
_ => 500
};
var response = new
{
error = "An error occurred processing your request",
message = ex.Message,
statusCode = context.Response.StatusCode
};
await context.Response.WriteAsync(JsonSerializer.Serialize(response));
}
}
// Middleware/ErrorHandlingMiddleware.cs
public class ErrorHandlingMiddleware
{
private readonly RequestDelegate _next;
private readonly ILogger<ErrorHandlingMiddleware> _logger;
public ErrorHandlingMiddleware(RequestDelegate next, ILogger<ErrorHandlingMiddleware> logger)
{
_next = next;
_logger = logger;
}
public async Task InvokeAsync(HttpContext context)
{
try
{
await _next(context);
}
catch (Exception ex)
{
_logger.LogError(ex, "An error occurred processing request {Path}", context.Request.Path);
await HandleExceptionAsync(context, ex);
}
}
private static async Task HandleExceptionAsync(HttpContext context, Exception ex)
{
context.Response.ContentType = "application/json";
context.Response.StatusCode = ex switch
{
ArgumentNullException => 400,
UnauthorizedAccessException => 401,
_ => 500
};
var response = new
{
error = "An error occurred processing your request",
message = ex.Message,
statusCode = context.Response.StatusCode
};
await context.Response.WriteAsync(JsonSerializer.Serialize(response));
}
}
' Middleware/ErrorHandlingMiddleware.vb
Public Class ErrorHandlingMiddleware
Private ReadOnly _next As RequestDelegate
Private ReadOnly _logger As ILogger(Of ErrorHandlingMiddleware)
Public Sub New(ByVal [next] As RequestDelegate, ByVal logger As ILogger(Of ErrorHandlingMiddleware))
_next = [next]
_logger = logger
End Sub
Public Async Function InvokeAsync(ByVal context As HttpContext) As Task
Try
Await _next(context)
Catch ex As Exception
_logger.LogError(ex, "An error occurred processing request {Path}", context.Request.Path)
Await HandleExceptionAsync(context, ex)
End Try
End Function
Private Shared Async Function HandleExceptionAsync(ByVal context As HttpContext, ByVal ex As Exception) As Task
context.Response.ContentType = "application/json"
context.Response.StatusCode = If(TypeOf ex Is ArgumentNullException, 400, If(TypeOf ex Is UnauthorizedAccessException, 401, 500))
Dim response = New With {
.error = "An error occurred processing your request",
.message = ex.Message,
.statusCode = context.Response.StatusCode
}
Await context.Response.WriteAsync(JsonSerializer.Serialize(response))
End Function
End Class
Belirli IronPDF sorun giderme senaryoları için:
Üretim .NET PDF API'nizi Oluşturmaya Hazır mısınız?
Şimdi, çeşitli belge oluşturma senaryolarını ele alan ASP.NET Core ve IronPDF kullanarak sağlam bir .NET PDF API'si oluşturdunuz. Bu REST API, uygulamalarınızdaki merkezi PDF işlemleri için sağlam bir temel sağlar.
Ana çıkarımlar:
- IronPDF, Chrome tabanlı işleme ile Web API projelerinde PDF oluşturmayı kolaylaştırır.
- IronPDF'in gelişmiş düzenleme araçları ile mevcut PDF'leri kolayca düzenleyin.
- RESTful tasarım ilkeleri, PDF API'nizin sezgisel ve sürdürülebilir olmasını sağlar.
- Üretim için uygun hata yönetimi ve güvenlik önlemleri gereklidir.
- Async operasyonları ve önbellekleme yolu ile performans optimizasyonu, ölçeklenebilirliği artırır.
- Masaüstü ve web uygulamaları için ölçeklenebilir belge çözümleri ile tam destek.
IronPDF geliştiricilerin PDF oluşturma, PDF dosyalarını kaydetme ve HTML'yi verimli bir şekilde dönüştürmesini sağlar, modern .NET Framework uygulamaları için gerekli PDF API'sidir.
Bir sonraki adımlar nelerdir?
Üretim .NET PDF API'nizde IronPDF'yi uygulamaya hazır mısınız? İşte sonraki adımlar:
- Ücretsiz denemeye başlayın - Geliştirme ortamınızda IronPDF'i tam işlevsellikle test edin.
- Gelişmiş özellikleri keşfedin - Dijital imzalar, PDF formları, PDF/A uyumluluğu, metadata yönetimi ve diğer gelişmiş PDF özelliklerine göz atın.
- Güvenle ölçeklendirin - Üretim API ihtiyaçlarınız için lisanslama seçeneklerini inceleyin, eklentiler ve yükseltmeler dahil.
Bugün bir .NET PDF API inşa edin ve IronPDF ile tüm uygulama ekosisteminizde doküman üretimini hızlandırın!
Sıkça Sorulan Sorular
.NET uygulamalarında IronPDF ne için kullanılır?
IronPDF, .NET uygulamalarında PDF oluşturma, düzenleme ve dönüştürme için kullanılır, bu da merkezi PDF hizmetleri oluşturma için idealdir.
IronPDF ASP.NET Core ile nasıl entegre edilebilir?
IronPDF, merkezi bir PDF oluşturma hizmeti sunmanızı sağlayarak, IronPDF NuGet paketini yükleyerek ASP.NET Core ile entegre edilebilir.
IronPDF'nin PDF oluşturma için başlıca özellikleri nelerdir?
IronPDF'nin temel özellikleri, HTML'den PDF'ye dönüşüm, PDF'leri birleştirme ve bölme, üstbilgiler ve altbilgiler ekleme ve metin ile resim çıkarma içermektedir.
IronPDF karmaşık PDF düzenleriyle başa çıkabilir mi?
Evet, IronPDF, HTML ve CSS içeriğini doğru bir şekilde PDF belgelerine dönüştürebildiği için karmaşık PDF düzenlerini yönetebilir.
IronPDF ile PDF oluşturma özelleştirilebilir mi?
Evet, IronPDF, sayfa boyutu ayarlama, kenar boşlukları ekleme ve filigran veya açıklamalar ekleme gibi PDF oluşturmayı özelleştirme imkanı tanır.
IronPDF PDF güvenlik özelliklerini destekliyor mu?
IronPDF, oluşturulan PDF belgelerini güvenceye almak için parola koruması ve şifreleme gibi PDF güvenlik özelliklerini destekler.
IronPDF, hangi formatları PDF'lere dönüştürebilir?
IronPDF, HTML, URL'ler ve ASPX dosyaları dahil olmak üzere çeşitli formatları PDF'lere dönüştürebilir ve bu da farklı kullanım durumları için çok yönlü hale getirir.
IronPDF, büyük ölçekli PDF oluşturma işlemlerini nasıl ele alır?
IronPDF optimizasyon için elverişlidir, bu da .NET uygulamaları icinde büyük ölçekli PDF oluşturma görevlerini verimli bir şekilde ele almasına olanak tanır.
IronPDF bulut tabanlı uygulamalarda kullanılabilir mi?
Evet, IronPDF, Azure ve AWS gibi platformlarda dağıtımı destekleyen bulut tabanlı uygulamalarda kullanılarak ölçeklenebilir PDF hizmetleri sunabilir.
IronPDF, .NET'in hangi sürümlerini destekliyor?
IronPDF, .NET Core ve .NET Framework dahil olmak uzere birden fazla .NET sürümunu destekleyerek genis bir proje yelpazesi ile uyumluluk saglar.




