ASP.NET'te PDF Dosyalarini Programatik Olarak Nasıl Yazdirilir
ASP.NET'de C# kullanarak bir veritabanından PDF dosyası edinmek için üç adım gereklidir: ikili BLOB sütununa sahip veritabanı tablosunu sorgulamak, baytları IronPDF kullanarak bir PdfDocument nesnesine yüklemek ve FileContentResult veya File() yanıtıyla baytları tarayıcıya geri göndermek. IronPDF, işleme, filigranlama ve güvenlik özellikleriyle ilgilenir, böylece siz veri erişim mantığına odaklanabilirsiniz.
ASP.NET için IronPDF Nasıl Kurulur?
Herhangi bir PDF geri alma kodu yazmadan önce, NuGet Paket Yöneticisi aracılığıyla projenize IronPDF'i ekleyin:
Install-Package IronPdf
Kurulumdan sonra, herhangi bir IronPDF yöntemini çağırmadan önce lisans anahtarınızı Program.cs veya appsettings.json içine girin:
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
IronPDF, .NET 10, .NET 8, .NET 6 ve .NET Framework 4.6.2+ ile uyumludur. Windows, Linux ve macOS'ta, herhangi bir ek bağımlılık veya bağımsız tarayıcı kurulumu gerektirmeksizin çalışır. Değerlendirme için bir ücretsiz deneme lisansı mevcuttur.
SQL Server Veritabanı Tablosunu Nasıl Ayarlarsınız?
En yaygın yaklaşım, PDF dosyalarını SQL Server VARBINARY(MAX) sütunu içinde ikili veri olarak depolamaktır. Bu, belgenin ve meta verilerinin tek bir tabloda birlikte tutulmasını sağlar, yedeklemeyi basitleştirir ve dosya sistemi yol yönetimini önler.
Depolama tablosunu oluşturmak için aşağıdaki SQL komut dosyasını kullanın:
// SQL Server table definition (run this in SSMS or via EF migrations)
// CREATE TABLE PdfDocuments (
// Id INT IDENTITY(1,1) PRIMARY KEY,
// FileName NVARCHAR(255) NOT NULL,
// FileContent VARBINARY(MAX) NOT NULL,
// UploadedAt DATETIME2 DEFAULT GETUTCDATE()
// );
// SQL Server table definition (run this in SSMS or via EF migrations)
// CREATE TABLE PdfDocuments (
// Id INT IDENTITY(1,1) PRIMARY KEY,
// FileName NVARCHAR(255) NOT NULL,
// FileContent VARBINARY(MAX) NOT NULL,
// UploadedAt DATETIME2 DEFAULT GETUTCDATE()
// );
Tablo oluşturulduktan sonra, bağlantı dizesini appsettings.json içinde yapılandırın:
// appsettings.json snippet (not C# -- shown as reference)
// "ConnectionStrings": {
// "DefaultConnection": "Server=localhost;Database=PdfStorage;Integrated Security=True;"
// }
// appsettings.json snippet (not C# -- shown as reference)
// "ConnectionStrings": {
// "DefaultConnection": "Server=localhost;Database=PdfStorage;Integrated Security=True;"
// }
' appsettings.json snippet (not VB.NET -- shown as reference)
' "ConnectionStrings": {
' "DefaultConnection": "Server=localhost;Database=PdfStorage;Integrated Security=True;"
' }
Bağlantı dizesini Program.cs içinde bağımlılık enjeksiyonu ile kaydedin:
using Microsoft.Extensions.DependencyInjection;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllers();
builder.Services.AddSingleton<IConfiguration>(builder.Configuration);
IronPdf.License.LicenseKey = builder.Configuration["IronPdf:LicenseKey"];
var app = builder.Build();
app.MapControllers();
app.Run();
using Microsoft.Extensions.DependencyInjection;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllers();
builder.Services.AddSingleton<IConfiguration>(builder.Configuration);
IronPdf.License.LicenseKey = builder.Configuration["IronPdf:LicenseKey"];
var app = builder.Build();
app.MapControllers();
app.Run();
Imports Microsoft.Extensions.DependencyInjection
Dim builder = WebApplication.CreateBuilder(args)
builder.Services.AddControllers()
builder.Services.AddSingleton(Of IConfiguration)(builder.Configuration)
IronPdf.License.LicenseKey = builder.Configuration("IronPdf:LicenseKey")
Dim app = builder.Build()
app.MapControllers()
app.Run()
SQL Server'dan ASP.NET Core'da PDF Nasıl Alınır?
Edinim deseni üç adımdan oluşur: bağlantıyı açmak, parametreli bir SELECT sorgusu yürütmek ve ikili sütunu byte[] içine okumak. IronPDF daha sonra o diziyi istemciye akış başlamadan önce isteğe bağlı işlem için bir PdfDocument nesnesine yükler.
API Denetleyicisini Oluşturma
Hem satır içi görüntüleme hem de dosya indirme için GET uç noktalarını açığa çıkaran bir denetleyici oluşturun:
using IronPdf;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Data.SqlClient;
[ApiController]
[Route("api/[controller]")]
public class PdfController : ControllerBase
{
private readonly string _connectionString;
public PdfController(IConfiguration configuration)
{
_connectionString = configuration.GetConnectionString("DefaultConnection")
?? throw new InvalidOperationException("Connection string not found.");
}
[HttpGet("{id}")]
public async Task<IActionResult> GetPdf(int id)
{
byte[] pdfBytes = await RetrievePdfBytesAsync(id);
if (pdfBytes is null || pdfBytes.Length == 0)
return NotFound("PDF document not found.");
// Load into IronPDF for validation or optional modification
using var pdfDocument = new PdfDocument(pdfBytes);
// Inline display -- browser opens PDF viewer
Response.Headers.Append("Content-Disposition", "inline; filename=\"document.pdf\"");
return File(pdfDocument.BinaryData, "application/pdf");
}
private async Task<byte[]> RetrievePdfBytesAsync(int documentId)
{
await using var connection = new SqlConnection(_connectionString);
await connection.OpenAsync();
const string query = "SELECT FileContent FROM PdfDocuments WHERE Id = @Id";
await using var command = new SqlCommand(query, connection);
command.Parameters.AddWithValue("@Id", documentId);
var result = await command.ExecuteScalarAsync();
return result as byte[] ?? Array.Empty<byte>();
}
}
using IronPdf;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Data.SqlClient;
[ApiController]
[Route("api/[controller]")]
public class PdfController : ControllerBase
{
private readonly string _connectionString;
public PdfController(IConfiguration configuration)
{
_connectionString = configuration.GetConnectionString("DefaultConnection")
?? throw new InvalidOperationException("Connection string not found.");
}
[HttpGet("{id}")]
public async Task<IActionResult> GetPdf(int id)
{
byte[] pdfBytes = await RetrievePdfBytesAsync(id);
if (pdfBytes is null || pdfBytes.Length == 0)
return NotFound("PDF document not found.");
// Load into IronPDF for validation or optional modification
using var pdfDocument = new PdfDocument(pdfBytes);
// Inline display -- browser opens PDF viewer
Response.Headers.Append("Content-Disposition", "inline; filename=\"document.pdf\"");
return File(pdfDocument.BinaryData, "application/pdf");
}
private async Task<byte[]> RetrievePdfBytesAsync(int documentId)
{
await using var connection = new SqlConnection(_connectionString);
await connection.OpenAsync();
const string query = "SELECT FileContent FROM PdfDocuments WHERE Id = @Id";
await using var command = new SqlCommand(query, connection);
command.Parameters.AddWithValue("@Id", documentId);
var result = await command.ExecuteScalarAsync();
return result as byte[] ?? Array.Empty<byte>();
}
}
Imports IronPdf
Imports Microsoft.AspNetCore.Mvc
Imports Microsoft.Data.SqlClient
<ApiController>
<Route("api/[controller]")>
Public Class PdfController
Inherits ControllerBase
Private ReadOnly _connectionString As String
Public Sub New(configuration As IConfiguration)
_connectionString = configuration.GetConnectionString("DefaultConnection")
If _connectionString Is Nothing Then
Throw New InvalidOperationException("Connection string not found.")
End If
End Sub
<HttpGet("{id}")>
Public Async Function GetPdf(id As Integer) As Task(Of IActionResult)
Dim pdfBytes As Byte() = Await RetrievePdfBytesAsync(id)
If pdfBytes Is Nothing OrElse pdfBytes.Length = 0 Then
Return NotFound("PDF document not found.")
End If
' Load into IronPDF for validation or optional modification
Using pdfDocument As New PdfDocument(pdfBytes)
' Inline display -- browser opens PDF viewer
Response.Headers.Append("Content-Disposition", "inline; filename=""document.pdf""")
Return File(pdfDocument.BinaryData, "application/pdf")
End Using
End Function
Private Async Function RetrievePdfBytesAsync(documentId As Integer) As Task(Of Byte())
Await Using connection As New SqlConnection(_connectionString)
Await connection.OpenAsync()
Const query As String = "SELECT FileContent FROM PdfDocuments WHERE Id = @Id"
Await Using command As New SqlCommand(query, connection)
command.Parameters.AddWithValue("@Id", documentId)
Dim result = Await command.ExecuteScalarAsync()
Return If(TryCast(result, Byte()), Array.Empty(Of Byte)())
End Using
End Using
End Function
End Class
Bu denetleyici, SQL enjeksiyonunu önlemek için parametrelendirilmiş sorgular ve await using kullanarak SqlConnection ve SqlCommand doğru şekilde elden çıkarır. PdfDocument sınıfı bayt dizisini doğrular ve akış için BinaryData özelliğini sunar.
İndirilmek Üzere İsimli Dosya Döndürme
Kullanıcılar belgeyi satır içi olarak görüntülemek yerine kaydetmek istediklerinde, Content-Disposition başlığını attachment olarak ayarlayın ve orijinal dosya adını geçirin:
[HttpGet("download/{id}")]
public async Task<IActionResult> DownloadPdf(int id)
{
await using var connection = new SqlConnection(_connectionString);
await connection.OpenAsync();
const string query = "SELECT FileName, FileContent FROM PdfDocuments WHERE Id = @Id";
await using var command = new SqlCommand(query, connection);
command.Parameters.AddWithValue("@Id", documentId);
await using var reader = await command.ExecuteReaderAsync();
if (!await reader.ReadAsync())
return NotFound("Document not found.");
var fileName = reader.GetString(reader.GetOrdinal("FileName"));
var pdfBytes = (byte[])reader["FileContent"];
using var pdfDocument = new PdfDocument(pdfBytes);
return File(pdfDocument.BinaryData, "application/pdf", fileName);
}
[HttpGet("download/{id}")]
public async Task<IActionResult> DownloadPdf(int id)
{
await using var connection = new SqlConnection(_connectionString);
await connection.OpenAsync();
const string query = "SELECT FileName, FileContent FROM PdfDocuments WHERE Id = @Id";
await using var command = new SqlCommand(query, connection);
command.Parameters.AddWithValue("@Id", documentId);
await using var reader = await command.ExecuteReaderAsync();
if (!await reader.ReadAsync())
return NotFound("Document not found.");
var fileName = reader.GetString(reader.GetOrdinal("FileName"));
var pdfBytes = (byte[])reader["FileContent"];
using var pdfDocument = new PdfDocument(pdfBytes);
return File(pdfDocument.BinaryData, "application/pdf", fileName);
}
Imports System.Data.SqlClient
Imports Microsoft.AspNetCore.Mvc
<HttpGet("download/{id}")>
Public Async Function DownloadPdf(id As Integer) As Task(Of IActionResult)
Await Using connection As New SqlConnection(_connectionString)
Await connection.OpenAsync()
Const query As String = "SELECT FileName, FileContent FROM PdfDocuments WHERE Id = @Id"
Await Using command As New SqlCommand(query, connection)
command.Parameters.AddWithValue("@Id", id)
Await Using reader As SqlDataReader = Await command.ExecuteReaderAsync()
If Not Await reader.ReadAsync() Then
Return NotFound("Document not found.")
End If
Dim fileName As String = reader.GetString(reader.GetOrdinal("FileName"))
Dim pdfBytes As Byte() = CType(reader("FileContent"), Byte())
Using pdfDocument As New PdfDocument(pdfBytes)
Return File(pdfDocument.BinaryData, "application/pdf", fileName)
End Using
End Using
End Using
End Using
End Function
File()'e üçüncü argüman olarak fileName geçmek, Content-Disposition başlığını otomatik olarak attachment olarak ayarlar. ASP.NET Core, boşluklar içeren dosya adlarının doğru bir şekilde alıntılanmasını yönetir.
Alınan PDF'e Filigran Nasıl Eklenir?
Belge hizmetine sunulmadan önce her sayfaya bir filigran basmak, en pratik gönderi alım işlemlerinden biridir. Bu, gizli raporlar, taslak belgeler veya görünür bir güvenlik işareti gerektiren herhangi bir dosya için kullanışlıdır.
IronPDF ile HTML Filigran Uygulama
IronPDF'in filigran API'si herhangi bir HTML dizgiyi kabul eder, bu da filigran metnini satır içi CSS kullanarak stilize edebileceğiniz anlamına gelir. Altta yatan içeriğin okunabilir kalmasını sağlamak için opaklığı yeterince düşük ayarlayın:
[HttpGet("watermarked/{id}")]
public async Task<IActionResult> GetWatermarkedPdf(int id)
{
byte[] pdfBytes = await RetrievePdfBytesAsync(id);
if (pdfBytes is null || pdfBytes.Length == 0)
return NotFound("PDF document not found.");
using var pdfDocument = new PdfDocument(pdfBytes);
// HTML watermark applied to every page
string watermarkHtml = "<h2 style='color:red; opacity:0.4; font-family:Arial;'>CONFIDENTIAL</h2>";
pdfDocument.ApplyWatermark(
watermarkHtml,
rotation: 30,
verticalAlignment: VerticalAlignment.Middle,
horizontalAlignment: HorizontalAlignment.Center
);
return File(pdfDocument.BinaryData, "application/pdf");
}
[HttpGet("watermarked/{id}")]
public async Task<IActionResult> GetWatermarkedPdf(int id)
{
byte[] pdfBytes = await RetrievePdfBytesAsync(id);
if (pdfBytes is null || pdfBytes.Length == 0)
return NotFound("PDF document not found.");
using var pdfDocument = new PdfDocument(pdfBytes);
// HTML watermark applied to every page
string watermarkHtml = "<h2 style='color:red; opacity:0.4; font-family:Arial;'>CONFIDENTIAL</h2>";
pdfDocument.ApplyWatermark(
watermarkHtml,
rotation: 30,
verticalAlignment: VerticalAlignment.Middle,
horizontalAlignment: HorizontalAlignment.Center
);
return File(pdfDocument.BinaryData, "application/pdf");
}
Imports Microsoft.AspNetCore.Mvc
<HttpGet("watermarked/{id}")>
Public Async Function GetWatermarkedPdf(id As Integer) As Task(Of IActionResult)
Dim pdfBytes As Byte() = Await RetrievePdfBytesAsync(id)
If pdfBytes Is Nothing OrElse pdfBytes.Length = 0 Then
Return NotFound("PDF document not found.")
End If
Using pdfDocument As New PdfDocument(pdfBytes)
' HTML watermark applied to every page
Dim watermarkHtml As String = "<h2 style='color:red; opacity:0.4; font-family:Arial;'>CONFIDENTIAL</h2>"
pdfDocument.ApplyWatermark(
watermarkHtml,
rotation:=30,
verticalAlignment:=VerticalAlignment.Middle,
horizontalAlignment:=HorizontalAlignment.Center
)
Return File(pdfDocument.BinaryData, "application/pdf")
End Using
End Function
ApplyWatermark yöntemi, standart HTML ve CSS'yi kabul eder, böylece yazı tipi, renk, opaklık ve konum üzerinde tam kontrol sahibi olursunuz. Filigran belge üzerindeki tüm sayfalara otomatik olarak uygulanır. Görüntü damgalama, başlıklar ve altbilgilerin eklenmesi veya birden fazla belgenin birleştirilmesi gibi ek PDF manipülasyon özellikleri için IronPDF belgelerine bakın.
Yüklenen PDF'leri SQL Server'a Geri Nasıl Yüklersiniz?
Tam turu tamamlamak, gelen form dosyalarını okuyup veritabanına yazan bir yükleme uç noktası gerektirir. Bu, yukarıdaki alma uç noktaları ile birleştirilerek eksiksiz bir belge yönetim sistemi oluşturur:
[HttpPost("upload")]
public async Task<IActionResult> UploadPdf(IFormFile file)
{
if (file is null || file.Length == 0)
return BadRequest("No file uploaded.");
if (!file.ContentType.Equals("application/pdf", StringComparison.OrdinalIgnoreCase))
return BadRequest("Only PDF files are accepted.");
using var memoryStream = new MemoryStream();
await file.CopyToAsync(memoryStream);
byte[] pdfBytes = memoryStream.ToArray();
// Validate using IronPDF before storage
using var pdfDocument = new PdfDocument(pdfBytes);
await using var connection = new SqlConnection(_connectionString);
await connection.OpenAsync();
const string insertQuery = @"
INSERT INTO PdfDocuments (FileName, FileContent)
VALUES (@FileName, @FileContent);
SELECT SCOPE_IDENTITY();";
await using var command = new SqlCommand(insertQuery, connection);
command.Parameters.AddWithValue("@FileName", file.FileName);
command.Parameters.AddWithValue("@FileContent", pdfDocument.BinaryData);
var newId = Convert.ToInt32(await command.ExecuteScalarAsync());
return Ok(new { id = newId, fileName = file.FileName });
}
[HttpPost("upload")]
public async Task<IActionResult> UploadPdf(IFormFile file)
{
if (file is null || file.Length == 0)
return BadRequest("No file uploaded.");
if (!file.ContentType.Equals("application/pdf", StringComparison.OrdinalIgnoreCase))
return BadRequest("Only PDF files are accepted.");
using var memoryStream = new MemoryStream();
await file.CopyToAsync(memoryStream);
byte[] pdfBytes = memoryStream.ToArray();
// Validate using IronPDF before storage
using var pdfDocument = new PdfDocument(pdfBytes);
await using var connection = new SqlConnection(_connectionString);
await connection.OpenAsync();
const string insertQuery = @"
INSERT INTO PdfDocuments (FileName, FileContent)
VALUES (@FileName, @FileContent);
SELECT SCOPE_IDENTITY();";
await using var command = new SqlCommand(insertQuery, connection);
command.Parameters.AddWithValue("@FileName", file.FileName);
command.Parameters.AddWithValue("@FileContent", pdfDocument.BinaryData);
var newId = Convert.ToInt32(await command.ExecuteScalarAsync());
return Ok(new { id = newId, fileName = file.FileName });
}
Imports System
Imports System.IO
Imports System.Threading.Tasks
Imports Microsoft.AspNetCore.Http
Imports Microsoft.AspNetCore.Mvc
Imports System.Data.SqlClient
Imports IronPdf
<HttpPost("upload")>
Public Async Function UploadPdf(file As IFormFile) As Task(Of IActionResult)
If file Is Nothing OrElse file.Length = 0 Then
Return BadRequest("No file uploaded.")
End If
If Not file.ContentType.Equals("application/pdf", StringComparison.OrdinalIgnoreCase) Then
Return BadRequest("Only PDF files are accepted.")
End If
Using memoryStream As New MemoryStream()
Await file.CopyToAsync(memoryStream)
Dim pdfBytes As Byte() = memoryStream.ToArray()
' Validate using IronPDF before storage
Using pdfDocument As New PdfDocument(pdfBytes)
Await Using connection As New SqlConnection(_connectionString)
Await connection.OpenAsync()
Const insertQuery As String = "
INSERT INTO PdfDocuments (FileName, FileContent)
VALUES (@FileName, @FileContent);
SELECT SCOPE_IDENTITY();"
Await Using command As New SqlCommand(insertQuery, connection)
command.Parameters.AddWithValue("@FileName", file.FileName)
command.Parameters.AddWithValue("@FileContent", pdfDocument.BinaryData)
Dim newId As Integer = Convert.ToInt32(Await command.ExecuteScalarAsync())
Return Ok(New With {.id = newId, .fileName = file.FileName})
End Using
End Using
End Using
End Using
End Function
Depolamadan önce doğrulamak için PdfDocument kullanmak, yalnızca ayrıştırılabilir, iyi biçimlendirilmiş PDF dosyalarının veritabanına girmesini sağlar. Bayt dizisi bozulmuş veya kısaltılmışsa, IronPDF yakalayabileceğiniz ve 400 Bad Request yanıtı olarak dönebileceğiniz bir istisna fırlatır.
PDF Depolaması İçin Önerilen Ana Tablolar ve Kolon Türleri Nelerdir?
Kullandığınız şema, sorgu performansını ve depolama verimliliğini etkiler. Aşağıdaki tablo, SQL Server için önerilen kolon yapılandırmasını göstermektedir.
| Sütun | Veri Türü | Amaç |
|---|---|---|
| Id | INT IDENTITY | Birincil anahtar, otomatik artış |
| FileName | NVARCHAR(255) | İndirme başlıkları için orijinal dosya adı |
| FileContent | VARBINARY(MAX) | Ham PDF ikili verisi (BLOB) |
| ContentType | NVARCHAR(100) | MIME türü, örn., application/pdf |
| DosyaBoyutuBayt | BIGINT | Kota yönetimi için saklanan boyut |
| UploadedAt | DATETIME2 | Denetleme için UTC zaman damgası |
| Yükleyen | NVARCHAR(100) | Erişim kontrolü için kullanıcı kimliği |
SQL Server dosya akışı gereken büyük ölçekli sistemler için, Microsoft FILESTREAM özelliğini belgeler. Bu, büyük BLOB'ları dosya sisteminde saklayan ve yine de T-SQL ile sorgulanabilir kalır. Bununla birlikte, belgeleri birkaç yüz megabayta kadar servis eden çoğu ASP.NET uygulaması için VARBINARY(MAX) satır içi depolama iyi çalışır ve dağıtımı basitleştirir.
Hataları Nasıl Yönetir ve Performansı Optimize Edersiniz?
Üretimde güvenilir PDF alımı, her katmanda hata yönetimini gerektirir -- veritabanı, IronPDF ve HTTP yanıtı. Aşağıdaki tablo, ana uygulamaları özetlemektedir:
| Endişe | Öneri | Sebep |
|---|---|---|
| Bağlantı imhası | await using ifadeleri |
Bağlantı havuzu tükenmesini önler |
| PdfDocument imhası | using ifadeleri |
Yönetilmeyen belleği hızlıca serbest bırakır |
| SQL enjeksiyonu | Yalnızca parametreli sorgular | Kötü niyetli girdilerin sorguları değiştirmesini önler |
| Dosya türü doğrulaması | MIME türünü ve sihirli baytları kontrol edin | Depolamadan önce PDF olmayan yüklemeleri engeller |
| Büyük dosya işleme | FileStreamResult ile yanıt akışı |
Tüm dosyanın sunucu belleğine yüklenmesinden kaçınılır |
| Önbelleğe alma | IMemoryCache veya IDistributedCache kullanın |
Tekrarlayan veritabanı tur-gezintiğini azaltır |
| Asenkron işlemler | async/await kullanımı |
Disk ve ağ beklemeleri sırasında iş parçacıklarını serbest bırakır |
Bağlantı dizesi yönetimi için, değeri appsettings.json'de saklayın ve asla kaynak dosyalarda kodlamayın. Yerel geliştirme sırasında ASP.NET Core'un yerleşik sır yönetimini ve üretimde Azure Key Vault veya AWS Secrets Manager kullanın. Bağlantı dizelerini veya lisans anahtarlarını asla kaynak kontrolüne eklemeyin.
Büyük PDF dosyalarını servis ederken, tüm bayt dizisini belleğe yüklemek yerine bir FileStreamResult döndürmeyi düşünün, desteklenmiş bir MemoryStream ile. Çok büyük belgeler için -- 100 MB'ın üzerinde -- SQL Server FILESTREAM API, dosya sisteminden doğrudan parçalı akış sağlar.
Sık Erişilen Belgeleri Önbelleğe Alma
Belirli PDF dosyaları -- örneğin, bir şartlar ve koşullar belgesi veya bir ürün kataloğu -- tekrarlı olarak isteniyorsa, IMemoryCache içinde bayt dizisini önbelleğe almak tekrarlı veritabanı dolaşımlarını önler. IMemoryCache'yu builder.Services.AddMemoryCache() ile Program.cs'ye kaydedin, daha sonra kontrolöre enjekte edin ve veritabanını sorgulamadan önce önbelleği kontrol edin. Belgelerin beklenen güncelleme sıklığıyla eşleşen mutlak bir sona erme ayarlayın. Bir belgede güncelleme yapıldığında, sonraki isteğin yeni sürümü getirmesi için anahtarla önbelleğe alınmış girdiyi kaldırın.
Dağıtılmış senaryolar için -- örneğin, birden fazla sunucu örneğiyle yük paylaşımlı bir dağıtım -- IMemoryCache'yi Redis veya SQL Server tarafından desteklenen IDistributedCache ile değiştirin. ASP.NET Core'un dağıtılmış önbellek soyutlamaları denetleyici kodunu neredeyse aynı tutar; sadece Program.cs kaydı değişir.
IronPDF ile PDF Alımını Platformlar Arası Nasıl Dağıtırız?
IronPDF, ayrı bir Chromium kurulumu veya herhangi bir yapılandırma değişikliği gerektirmeden Linux, Windows ve macOS'ta çalışır. Aynı NuGet paketi tüm platformlara hedeflenmiştir, bu yüzden PDF denetleyiciniz aşağıdaki gibi dağıtıldığında aynen çalışır:
- IIS ile Windows Server
- Docker veya Kubernetes'te Ubuntu konteynerleri
- Azure App Service (Linux veya Windows)
- AWS Elastic Beanstalk
Docker ve Linux'a Dağıtım
Docker dağıtımları için IronPDF bağımlılıklarını Dockerfile'ınıza ekleyin. IronPDF Linux belgeleri, Debian ve Alpine temel görüntüleri için gereken apt paketlerini sağlar. Tipik bir çok aşamalı Dockerfile, çalışma zamanı görüntü aşamasında OS bağımlılıklarını yükler, ardından yayınlanmış ASP.NET uygulamasını üzerine kopyalar. Azure kullanırken, Azure dağıtım kılavuzu, PDF işleme ölçeğinde destekleyen bellek ve CPU ayarlarını içeren App Service yapılandırmasını kapsar.
Çünkü IronPDF kendi Chromium tabanlı işleme motorunu paketler, sunucuya ayrı bir tarayıcı yüklemenize gerek kalmaz. Bu, sistem düzeyinde bir tarayıcı gerektiren çözümlerle karşılaştırıldığında, Linux konteyner kurulumlarını önemli ölçüde basitleştirir. IronPDF ekibi, her sürümde en yaygın Linux temel görüntülerine karşı test yapar, böylece bir Alpine veya Debian konteynerinin kutudan çıkacağına güvenebilirsiniz.
ADO.NET Yerine Entity Framework Core Kullanmak
IronPDF ayrıca ham ADO.NET yerine Entity Framework Core ile entegre olur. Projeniz zaten EF Core kullanıyorsa, FileContent sütununu bir model sınıfındaki byte[] özelliğine eşleyebilirsiniz ve EF sorgu oluşturmayı halledecektir. Bu yaklaşım, şablon kodu önemli ölçüde azaltır ve EF'nin LINQ sağlayıcısı aracılığıyla filtreleme, sayfalandırma ve denetleme davranışlarını eklemeyi kolaylaştırır.
Ticari-off, EF Core'un tüm BLOB'u varlık grafiğinin bir parçası olarak belleğe yüklemesidir. Çok büyük PDF dosyaları için, sadece bayt dizisi sütununu seçen bir projeksiyonla EF Core'un FromSql yöntemi veya ham ADO.NET kullanmayı düşünün.
Sonraki Adımlarınız Neler?
ASP.NET Core'da C# ve IronPDF kullanarak bir SQL Server veritabanından PDF dosyalarını almak açık bir deseni takip eder: parametreli bir SELECT ile BLOB sütununu sorgulamak, baytları bir PdfDocument içine yüklemek ve doğru Content-Disposition başlığı ile ikili veriyi geri göndermek. IronPDF, belgeler sunucunuzu terk etmeden önce doğrulama, filigran ekleme, birleştirme veya güvenli hale getirme yeteneği ekler.
IronPDF'nin belge yönetimi yeteneklerini daha fazla keşfetmek için bu kaynakları inceleyin:
- IronPDF ile HTML'den PDF Üretimi -- PDF'leri dinamik olarak üretin ve doğrudan veritabanınıza kaydedin
- IronPDF Merge and Split PDFs -- elde edilen belgeleri tek bir yanıtla birleştirin
- IronPDF Güvenlik ve İzinler -- hassas belgeleri sunmadan önce parola koruması ekleyin
- IronPDF HTML to PDF Tutorial -- web sayfası içeriğini arşivlemek için PDF'lere dönüştürün
- IronPDF PDF Damgalama -- alınan dosyalara metin ve resim damgaları uygulayın
- IronPDF Licensing -- geliştirme, hazırlık ve üretim kullanımı için lisans katmanlarını gözden geçirin
Ücretsiz IronPDF deneme lisansı ile tüm özellikleri sınırlama olmadan test etmeye başlayın. Deneme su izli çıktı üretir; ücretli bir lisans anahtarı uygulayarak filigranı kaldırın. Bu makalede kullanılan her yöntem için IronPDF web sitesinde tam API referans belgeleri ve kod örnekleri mevcuttur.
Projeniz zaten Entity Framework Core kullanıyorsa, IronPDF EF Core entegrasyon rehberi, ham ADO.NET'i entity modelleriyle nasıl değiştireceğinizi ve aynı IronPDF işlem hattını nasıl koruyacağınızı gösterir. .NET 10 ve en son ASP.NET Core özellikleriyle çalışan ekipler için burada açıklanan aynı kalıplar, değişiklik gerektirmeden çalışır -- IronPDF, her aktif .NET LTS ve STS sürümünü destekler.
IronPDF fiyatlandırma sayfasını inceleyerek dağıtımınız için doğru lisans seviyesini bulun. Tek bir geliştirici lisansı, yerel geliştirme ve testleri kapsar; SaaS ürünleri ve birden fazla sunuculu yerinde dağıtım için yeniden dağıtım lisansları mevcuttur.
Sıkça Sorulan Sorular
IronPDF nedir?
IronPDF, C# uygulamalarında PDF dosyaları oluşturmayı, düzenlemeyi ve içeriği çıkarmayı sağlayan bir .NET kütüphanesidir.
ASP.NET kullanarak bir veritabanından PDF dosyasını nasıl alabilirim?
ASP.NET'te bir veritabanından PDF dosyasını almak için, veritabanını sorgulamak ve PDF verilerini bir byte dizisine okumak üzere C# kodunu kullanabilirsiniz. Bu byte dizisi daha sonra, PDF'yi gerektiği gibi işlemek veya manipüle etmek için IronPDF ile kullanılabilir.
ASP.NET uygulamamda PDF'lerle ilgili işlemler için neden IronPDF'yi kullanmalıyım?
IronPDF, PDF'lerle ilgili işlemler için geniş bir özellik seti sunar, bunlar arasında PDF oluşturma, HTML'den dönüştürme ve manipülasyon bulunur. ASP.NET ile entegre olur ve PDF'lerle çalışmak için kullanımı kolay bir API sunar.
ASP.NET'te IronPDF kullanmanın ön koşulları nelerdir?
ASP.NET'te IronPDF kullanmak için, bir .NET geliştirme ortamına ihtiyacınız vardır, örneğin Visual Studio gibi, ve IronPDF kütüphanesini Proje'ye NuGet paket yöneticisi üzerinden dahil etmelisiniz.
IronPDF mevcut PDF dosyalarını düzenlemek için kullanılabilir mi?
Evet, IronPDF mevcut PDF dosyalarını düzenlemek için kullanılabilir. Metin veya resim ekleme, belgeleri birleştirme gibi değişikliklere olanak tanır.
HTML'i PDF'ye IronPDF ile dönüştürmek mümkün mü?
Evet, IronPDF HTML içeriğini doğrudan PDF formatına dönüştürebilir, bu da web sayfalarından veya diğer HTML içeriğinden PDF'ler oluşturmayı kolaylaştırır.
IronPDF ile PDF güvenlik özelliklerini nasıl yönetirim?
IronPDF, PDF'ler için çeşitli güvenlik özelliklerini destekler, bunlar arasında şifre koruması ve belge erişimi ve düzenlemesini kontrol etmeye yönelik izinlerin ayarlanması bulunur.
IronPDF ile PDF alımı için uyumlu veri tabanları nelerdir?
IronPDF, SQL Server, MySQL veya PostgreSQL gibi ikili verileri depolayabilen herhangi bir veritabanı ile çalışabilir, böylece PDF dosyalarını alabilir ve işleyebilir.

