C# Kullanarak ASP.NET'te Veritabanindan PDF Dosyalari Nasıl Alinir
ASP.NET ile bir veritabanından C# kullanarak bir PDF dosyası almak üç adım gerektirir: ikili BLOB sütunu için veritabanı tablosunu sorgulamak, baytları IronPDF kullanarak bir PdfDocument nesnesine yüklemek ve baytları Dosya İçeriğiResult veya File() yanıtı aracılığıyla tarayıcıya döndürmek. IronPDF, ver rendering, filigranlama ve güvenlik özelliklerini ele alır, böylece veri erişim mantığına odaklanabilirsiniz.
ASP.NET için IronPDF Nasıl Yüklenir?
Herhangi bir PDF alma kodu yazmadan önce, NuGet Paket Yöneticisi kullanarak projenize IronPDF ekleyin:
Install-Package IronPdf
dotnet add package IronPdf
Install-Package IronPdf
dotnet add package IronPdf
Yüklemeden sonra, herhangi bir IronPDF metodunu çağırmadan önce Program.cs veya appsettings.json içinde lisans anahtarınızı belirleyin:
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+ destekler. Ek herhangi bir bağımlılığa veya başsız tarayıcı kurulumlarına ihtiyaç duymadan Windows, Linux ve macOS'ta çalışır. Değerlendirme için bir ücretsiz deneme lisansı mevcuttur.
SQL Server Veritabanı Tablosu Nasıl Kurulur?
En yaygın yaklaşım PDF dosyalarını SQL Server VARBINARY(MAX) sütununda ikili veri olarak saklamaktır. Bu, belgeyi ve meta verilerini tek bir tabloda bir arada tutar, yedeklemeyi basitleştirir ve dosya sistemi yol yönetiminden kaçınılır.
Depolama tablosu oluşturmak için aşağıdaki SQL betiğini kullanın:
// SQL Server table definition (run this in SSMS or via EF migrations)
// CREATE TABLE PdfDocuments (
// Kimlik INT KİMLİK(1,1) PRIMARY KEY,
// Dosya Adı NVARCHAR(255) NOT NULL,
// Dosya İçeriği VARBINARY(MAX) NOT NULL,
// Yüklendiği Zaman DATETIME2 DEFAULT GETUTCDATE()
// );
// SQL Server table definition (run this in SSMS or via EF migrations)
// CREATE TABLE PdfDocuments (
// Kimlik INT KİMLİK(1,1) PRIMARY KEY,
// Dosya Adı NVARCHAR(255) NOT NULL,
// Dosya İçeriği VARBINARY(MAX) NOT NULL,
// Yüklendiği Zaman DATETIME2 DEFAULT GETUTCDATE()
// );
' SQL Server table definition (run this in SSMS or via EF migrations)
' CREATE TABLE PdfDocuments (
' Kimlik INT IDENTITY(1,1) PRIMARY KEY,
' DosyaAdi NVARCHAR(255) NOT NULL,
' DosyaIcerigi VARBINARY(MAX) NOT NULL,
' YuklendigiZaman DATETIME2 DEFAULT GETUTCDATE()
' )
Tablo var olduğunda, appsettings.json içinde bağlantı dizgesini 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;"
' }
Program.cs içinde bağımlılık enjeksiyonu yoluyla bağlantı dizgesini 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()
ASP.NET Core'da SQL Server'dan Bir PDF Nasıl Alınır?
Alım deseni üç adımı izler: bir bağlantı açın, parametreleştirilmiş bir SELECT sorgusu yürütün ve ikili sütunu bir byte[] içine okuyun. Daha sonra IronPDF bu diziyi istemciye yayınlamadan önce isteğe bağlı işleme için bir PdfDocument nesnesine yükler.
API Denetleyicisini Oluşturma
Satır içi görüntüleme ve dosya indirme için GET uç noktalarını açık hale getiren 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 documentKimlik)
{
await using var connection = new SqlConnection(_connectionString);
await connection.OpenAsync();
const string query = "SELECT Dosya İçeriği FROM PdfDocuments WHERE Kimlik = @Kimlik";
await using var command = new SqlCommand(query, connection);
command.Parameters.AddWithValue("@Kimlik", documentKimlik);
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 documentKimlik)
{
await using var connection = new SqlConnection(_connectionString);
await connection.OpenAsync();
const string query = "SELECT Dosya İçeriği FROM PdfDocuments WHERE Kimlik = @Kimlik";
await using var command = new SqlCommand(query, connection);
command.Parameters.AddWithValue("@Kimlik", documentKimlik);
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(documentKimlik As Integer) As Task(Of Byte())
Await Using connection As New SqlConnection(_connectionString)
Await connection.OpenAsync()
Const query As String = "SELECT Dosya İçeriği FROM PdfDocuments WHERE Kimlik = @Kimlik"
Await Using command As New SqlCommand(query, connection)
command.Parameters.AddWithValue("@Kimlik", documentKimlik)
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 parametreleştirilmiş sorgular ve await using hatalı kullanımı ve SqlConnection ve SqlCommand doğru bir şekilde gerçekleştirmek için kullanır. PdfDocument sınıfı bayt dizisini doğrular ve akış için BinaryData özelliğini ortaya çıkarır.
İndirilecek İsimli Bir Dosya Döndürme
Kullanıcıların belgeyi satır içi görmek yerine kaydetmesi gerektiğinde, Content-Disposition başlığını attachment olarak ayarlayın ve orijinal dosya adını iletin:
[HttpGet("download/{id}")]
public async Task<IActionResult> DownloadPdf(int id)
{
await using var connection = new SqlConnection(_connectionString);
await connection.OpenAsync();
const string query = "SELECT Dosya Adı, Dosya İçeriği FROM PdfDocuments WHERE Kimlik = @Kimlik";
await using var command = new SqlCommand(query, connection);
command.Parameters.AddWithValue("@Kimlik", documentKimlik);
await using var reader = await command.ExecuteReaderAsync();
if (!await reader.ReadAsync())
return NotFound("Document not found.");
var fileName = reader.GetString(reader.GetOrdinal("Dosya Adı"));
var pdfBytes = (byte[])reader["Dosya İçeriği"];
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 Dosya Adı, Dosya İçeriği FROM PdfDocuments WHERE Kimlik = @Kimlik";
await using var command = new SqlCommand(query, connection);
command.Parameters.AddWithValue("@Kimlik", documentKimlik);
await using var reader = await command.ExecuteReaderAsync();
if (!await reader.ReadAsync())
return NotFound("Document not found.");
var fileName = reader.GetString(reader.GetOrdinal("Dosya Adı"));
var pdfBytes = (byte[])reader["Dosya İçeriği"];
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 Dosya Adı, Dosya İçeriği FROM PdfDocuments WHERE Kimlik = @Kimlik"
Await Using command As New SqlCommand(query, connection)
command.Parameters.AddWithValue("@Kimlik", documentKimlik)
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("Dosya Adı"))
Dim pdfBytes As Byte() = CType(reader("Dosya İçeriği"), Byte())
Using pdfDocument As New PdfDocument(pdfBytes)
Return File(pdfDocument.BinaryData, "application/pdf", fileName)
End Using
End Using
End Using
End Using
End Function
fileName öğesini File()'e üçüncü argüman olarak iletmek, Content-Disposition başlığını otomatik olarak attachment olarak ayarlar. ASP.NET Core, boşluk içeren dosya adlarının doğru alıntısını ele alır.
Alınan PDF'ye Filigran Nasıl Eklenir?
En pratik alma sonrası işlemlerden biri, belgeyi kullanıma sunmadan önce her sayfaya bir filigran damgalamaktır. Bu, gizli raporlar için, taslak belgeler veya görünür bir güvenlik işareti gerekliliği olan herhangi bir dosya için faydalıdır.
IronPDF İle HTML Filigran Uygulama
IronPDF'in filigran API'si, herhangi bir HTML dizisini kabul eder, bu da filigran metnini satır içi CSS kullanarak stilize edebileceğiniz anlamına gelir. Temel içeriğin okunabilir kalacak kadar düşük bir opaklı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, bu nedenle yazı tipi, renk, opaklık ve konum üzerinde tam kontrol sahibisiniz. Filigran, belgedeki tüm sayfalara otomatik olarak uygulanır. Daha fazla PDF düzenleme özellikleri, görüntüleme damgalama, üstbilgi ve altbilgi ekleme veya birden fazla belgeyi birleştirme dahil olmak üzere, IronPDF belgelerine bakın.
Yüklenen PDF'ler SQL Server'a Gerçekten Nasıl Depolanır?
Turun tamamlanması, gelen form dosyalarını okuyan ve onları veritabanına yazan bir yükleme uç noktası gerektirir. Bu, yukarıdaki alma uç noktaları ile eşleştirilerek tamam 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.İçerik Türü.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 (Dosya Adı, Dosya İçeriği)
VALUES (@Dosya Adı, @Dosya İçeriği);
SELECT SCOPE_IDENTITY();";
await using var command = new SqlCommand(insertQuery, connection);
command.Parameters.AddWithValue("@Dosya Adı", file.Dosya Adı);
command.Parameters.AddWithValue("@Dosya İçeriği", pdfDocument.BinaryData);
var newKimlik = Convert.ToInt32(await command.ExecuteScalarAsync());
return Ok(new { id = newKimlik, fileName = file.Dosya Adı });
}
[HttpPost("upload")]
public async Task<IActionResult> UploadPdf(IFormFile file)
{
if (file is null || file.Length == 0)
return BadRequest("No file uploaded.");
if (!file.İçerik Türü.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 (Dosya Adı, Dosya İçeriği)
VALUES (@Dosya Adı, @Dosya İçeriği);
SELECT SCOPE_IDENTITY();";
await using var command = new SqlCommand(insertQuery, connection);
command.Parameters.AddWithValue("@Dosya Adı", file.Dosya Adı);
command.Parameters.AddWithValue("@Dosya İçeriği", pdfDocument.BinaryData);
var newKimlik = Convert.ToInt32(await command.ExecuteScalarAsync());
return Ok(new { id = newKimlik, fileName = file.Dosya Adı });
}
Imports System
Imports System.IO
Imports System.Threading.Tasks
Imports Microsoft.AspNetCore.Http
Imports Microsoft.AspNetCore.Mvc
Imports System.Data.SqlClient
<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 (Dosya Adı, Dosya İçeriği)
VALUES (@Dosya Adı, @Dosya İçeriği);
SELECT SCOPE_IDENTITY();"
Await Using command As New SqlCommand(insertQuery, connection)
command.Parameters.AddWithValue("@Dosya Adı", file.FileName)
command.Parameters.AddWithValue("@Dosya İçeriği", pdfDocument.BinaryData)
Dim newKimlik As Integer = Convert.ToInt32(Await command.ExecuteScalarAsync())
Return Ok(New With {.id = newKimlik, .fileName = file.FileName})
End Using
End Using
End Using
End Using
End Function
Saklamadan önce PdfDocument kullanarak doğrulama yapmak, yalnızca ayrıştırılabilir, iyi biçimlendirilmiş PDF dosyalarının veritabanına girmesini sağlar. Bayt dizisi bozuk veya kesilmişse, IronPDF bir istisna fırlatır ve bu istisnayı yakalayarak bir 400 Bad Request yanıtı olarak döndürebilirsiniz.
PDF Depolama için Ana Tablolar ve Sütun Tipleri Nelerdir?
Kullanılan şema, sorgu performansını ve depolama verimliliğini etkiler. Aşağıdaki tablo, SQL Server için önerilen sütun yapılandırmasını göstermektedir:
| Sutun | Veri Tipi | Amaç |
|---|---|---|
| Kimlik | INT KİMLİK | Birincil anahtar, otomatik artış |
| Dosya Adı | NVARCHAR(255) | Başlıkları indirmek için orijinal dosya adı |
| Dosya İçeriği | VARBINARY(MAX) | Ham PDF ikili verisi (BLOB) |
| İçerik Türü | NVARCHAR(100) | MIME türü, örn., application/pdf |
| Dosya Boyutu Baytlar | BÜYÜK İNT | Kota yönetimi için depolanan boyut |
| Yüklendiği Zaman | DATETIME2 | Denetim için UTC zaman damgası |
| Yükleyen | NVARCHAR(100) | Erişim kontrolü için kullanıcı kimliği |
SQL Server dosya akışı gerektiğinde geniş ölçekli sistemler için, Microsoft, büyük BLOB'ları dosya sisteminde saklayan ancak T-SQL üzerinden sorgulanabilir kalan bir alternatif olarak FILESTREAM özellikini belgelemektedir. Ancak, belgeleri birkaç yüz megabayta kadar sunan çoğu ASP.NET uygulaması için VARBINARY(MAX) sıralı saklama iyi çalışır ve dağıtımı basitleştirir.
Hataları Nasıl Yönlendirebilir ve Performansı Nasıl Optimize Edebilirsiniz?
Üretimde güvenilir PDF alma, her katmanda - veritabanı, IronPDF ve HTTP yanıtında hata yönetimi gerektirir. Aşağıdaki tablo ana uygulamaları özetlemektedir:
| Endişe | Öneri | Neden |
|---|---|---|
| Bağlantı bırakma | await using beyanları |
Bağlantı havuzu tükenmesini önler |
| PdfDocument bırakma | using beyanları |
Yönetilmeyen belleği zamanında bırakır |
| SQL enjeksiyonu | Yalnızca parametre destekli sorgular | Kötü niyetli girdilerin sorguları değiştirmesini önler |
| Dosya türü doğrulama | MIME türünü ve sihirli baytları kontrol edin | Depodan önce PDF olmayan yükleri engeller |
| Büyük dosya işlemleri | FileStreamResult ile yanıtı akıtın |
Tüm dosyayı sunucu belleğine yüklemekten kaçınır |
| Önbellekleme | Use IMemoryCache veya IDistributedCache |
Tekrarlanan veritabanı işlemlerini azaltır |
| Async işlemler | async/await tümü boyunca |
Disk ve ağ beklemelerinde thread'leri serbest tutar |
Bağlantı dizgesi yönetimi için değeri appsettings.json içinde saklayın ve kaynak dosyalarına asla sert kodlamayın. Yerel geliştirme sırasında ASP.NET Core'un yerleşik gizli yönetimini kullanın ve üretimde Azure Key Vault veya AWS Secrets Manager'ı kullanın. Bağlantı dizelerini veya lisans anahtarlarını asla kaynak kontrolüne yüklemeyin.
Büyük PDF dosyalarını sunarken, tüm bayt dizisini belleğe yüklemek yerine bir FileStreamResult arka planda MemoryStream kullanılarak döndürmeyi düşünün. Çok büyük belgeler -- 100 MB'ın üzerinde -- için SQL Server FILESTREAM API'si dosya sisteminden doğrudan parçalı akış yapmayı sağlar.
Sık Kullanılan Belgelerin Önbelleğe Alınması
Belirli PDF dosyaları tekrar tekrar isteniyorsa -- örneğin, bir şartlar ve koşullar belgesi veya bir ürün kataloğu -- IMemoryCache içinde bayt dizisini önbelleğe almak, tekrar eden veritabanı gidiş-dönüşlerini önler. IMemoryCache'yi Program.cs'de builder.Services.AddMemoryCache() ile kaydedin, ardından denetleyiciye enjekte edin ve veritabanını sorgulamadan önce önbelleği kontrol edin. Belgelerin beklenen güncelleme sıklığı ile eşleşen mutlak bir sona erme tarihi ayarlayın. Bir belge güncellendiğinde, önbellekteki girdiyi anahtarla kaldırın, böylece sonraki istek yeni sürümü alır.
Dağıtılmış senaryolar için -- birden fazla sunucu örneğiyle yük dengelemesi yapılmış bir dağıtım gibi -- IMemoryCache'yi Redis veya SQL Server destekli IDistributedCache ile değiştirin. ASP.NET Core'un dağıtılmış önbellek soyutlamaları kontrolör kodunu neredeyse aynı tutar; sadece Program.cs içindeki kayıt değişir.
IronPDF ile PDF'leri Platformlar Arası Nasıl Dağıtırsınız?
IronPDF, ayrı bir Chromium kurulumu veya herhangi bir yapılandırma değişikliği olmadan Linux, Windows ve macOS üzerinde çalışır. Aynı NuGet paketi tüm platformları hedefler, bu nedenle PDF kontrolörünüz şu ortamlara dağıtıldığında aynı şekilde çalışır:
- IIS ile Windows Sunucu
- Docker veya Kubernetes üzerinde Ubuntu konteynerleri
- Azure Uygulama Hizmeti (Linux veya Windows)
- AWS Elastic Beanstalk
Docker ve Linux'a Dağıtma
Docker dağıtımları için, IronPDF bağımlılıklarını Dockerfile'ınıza ekleyin. IronPDF Linux dokümantasyonu Debian ve Alpine tabanlı imajlar için gereken tam apt paketlerini sağlar. Tipik bir çok aşamalı Dockerfile, OS bağımlılıklarını çalışma zamanı imajı aşamasında kurar, ardından yayımlanan ASP.NET uygulamasını üzerine kopyalar. Azure kullanırken, Azure dağıtım kılavuzu bellek ve CPU ayarları dahil olmak üzere App Service yapılandırmasını kapsar ve bunlar büyük ölçekli PDF işleme desteği sağlar.
IronPDF kendi Chromium tabanlı işleme motorunu paketlediği için, sunucuya ayrı bir tarayıcı kurmanız gerekmez. Bu durum sistem düzeyinde bir tarayıcı gerektiren çözümlerle kıyaslandığında Linux konteyner kurulumlarını önemli ölçüde basitleştirir. IronPDF ekibi, her sürümle birlikte en yaygın Linux tabanlı imajlarına karşı test eder, bu nedenle bir Alpine veya Debian konteynerinin kutudan çıktığı gibi çalışacağından emin olabilirsiniz.
ADO.NET Yerine Entity Framework Core Kullanmak
IronPDF ayrıca Entity Framework Core ile ham ADO.NET'e alternatif olarak entegre olur. Projeniz zaten EF Core kullanıyorsa, Dosya İçeriği sütununu bir model sınıfındaki byte[] özelliğine eşleyebilir ve EF'nin sorgu oluşturmayı ele almasına izin verebilirsiniz. Bu yaklaşım, gereksiz kodları önemli ölçüde azaltır ve EF'nin LINQ sağlayıcısı aracılığıyla filtreleme, sayfalandırma ve denetim davranışı eklemeyi kolaylaştırır.
Karşılığında EF Core, varlık grafiğinin bir parçası olarak tüm BLOB'u belleğe yükler. Çok büyük PDF dosyaları için, tam varlığı yerine yalnızca bayt dizisi sütununu seçen bir projeksiyon ile ham ADO.NET veya EF Core'nin FromSql yöntemini kullanmayı düşünün.
Sıradaki Adımlarınız Neler?
ASP.NET Core ile SQL Server veritabanı üzerinden C# ve IronPDF kullanarak PDF dosyalarını almak, net bir modeli takip eder: bir parametreleştirilmiş SELECT ile BLOB sütununu sorgulamak, baytları bir PdfDocument içine yüklemek ve doğru Content-Disposition başlığı ile ikili veriyi döndürmek. IronPDF, belgeler sunucunuzdan ayrılmadan önce onları doğrulama, filigranlama, birleştirme veya güvenli hale getirme yeteneği ekler.
IronPDF'nin belge yönetimi özelliklerini daha ileriye taşımak için bu kaynakları keşfedin:
- HTML'den IronPDF PDF Oluşturma -- PDF'lerini dinamik olarak oluşturun ve doğrudan veritabanınıza kaydedin
- IronPDF PDF'leri Birleştirme ve Ayırma -- geri alınan belgeleri tek bir yanıtla birleştirin
- IronPDF Güvenliği ve İzinleri -- hassas belgeleri sunmadan önce parola koruması ekleyin
- IronPDF HTML'den PDF'ye Dönüştürme Eğitimi -- arşivleme için web sayfası içeriğini PDF'lere dönüştürün
- IronPDF PDF Damgalama -- alınan dosyalara metin ve resim damgaları uygulayın
- IronPDF Lisanslama -- geliştirme, ön hazırlık ve üretim kullanımı için lisans seviyelerini inceleyin
Tüm özellikleri kısıtlamasız test etmek için ücretsiz bir IronPDF deneme lisansıyla başlayın. Deneme, filigranlı çıktı üretir; filigranı kaldırmak için ücretli bir lisans anahtarı uygulayın. Bu makalede kullanılan her yöntem için IronPDF web sitesinde tam API referans dokümantasyonu ve kod örnekleri mevcuttur.
Projeniz zaten Entity Framework Core kullanıyorsa, IronPDF EF Core entegrasyon kılavuzu, ham ADO.NET'i varlık modelleriyle nasıl değiştireceğinizi gösterirken aynı IronPDF işleme hattını korur. .NET 10 ve en son ASP.NET Core özellikleriyle çalışan ekipler için, burada tarif edilen aynı desenler hiçbir değişiklik olmadan çalışır -- IronPDF her aktif .NET LTS ve STS sürümünü destekler.
Dağıtımınız için doğru lisans seviyesini bulmak için IronPDF fiyatlandırma sayfasını gözden geçirin. Tek bir geliştirici lisansı yerel geliştirme ve testleri kapsar; adanmış ürünler ve birden fazla sunuculu şirket içi dağıtımlar için yeniden dağıtım lisansları mevcuttur.
Sıkça Sorulan Sorular
IronPDF nedir?
IronPDF, C# uygulamalarında PDF dosyalarını oluşturmak, düzenlemek ve içerik çıkarmak için geliştiricilere olanak tanıyan bir .NET kütüphanesidir.
Bir PDF dosyasını ASP.NET kullanarak veritabanından nasıl alabilirim?
ASP.NET'te veritabanından PDF dosyasını almak için C# koduyla veritabanını sorgulayabilir ve PDF verisini bir bayt dizisine okuyabilirsiniz. Bu bayt dizisi daha sonra gerektiği gibi PDF'yi oluşturmak veya üzerinde işlem yapmak için IronPDF ile kullanılabilir.
ASP.NET uygulamamda PDF'leri işlemek için neden IronPDF kullanmalıyım?
IronPDF, PDF oluşturma, HTML'den dönüştürme ve işlem yapma gibi PDF işleme için kapsamlı bir özellik seti sunar. ASP.NET ile entegre olur ve PDF'lerle çalışmak için kolay bir API sağlar.
ASP.NET'te IronPDF'yi kullanmak için ön koşullar nelerdir?
ASP.NET'te IronPDF kullanmak için, örneğin Visual Studio gibi bir .NET geliştirme ortamına sahip olmanız ve projeye NuGet paket yöneticisi aracılığıyla IronPDF kütüphanesini dahil etmeniz gerekir.
Mevcut PDF dosyalarını düzenlemek için IronPDF kullanılabilir mi?
Evet, IronPDF mevcut PDF dosyalarını düzenlemek için kullanılabilir. Yazı veya resim ekleme, belgelerin birleştirilmesi gibi değişiklikler yapılabilir.
IronPDF ile HTML'yi PDF'ye 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 oluşturmayı kolaylaştırır.
IronPDF kullanarak PDF güvenlik özelliklerini nasıl işleyebilirim?
IronPDF, PDF'ler için parola koruma ve belge erişimi ile düzenlemeyi kontrol etmek için izin ayarları gibi çeşitli güvenlik özelliklerini destekler.
IronPDF ile PDF alma için uyumlu olan veritabanı türleri nelerdir?
IronPDF, SQL Server, MySQL veya PostgreSQL gibi ikili verileri depolayabilen herhangi bir veritabanıyla PDF dosyalarını almak ve üzerinde işlem yapmak için çalışabilir.




