Altbilgi içeriğine atla
IRONPDF KULLANARAK

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"
$vbLabelText   $csharpLabel

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()
// );
$vbLabelText   $csharpLabel

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;"
' }
$vbLabelText   $csharpLabel

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()
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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.

PDF BLOB depolaması için önerilen SQL Server şeması
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:

PDF alımı için hata yönetimi ve performans modelleri
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:

Ü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.

Curtis Chau
Teknik Yazar

Curtis Chau, Bilgisayar Bilimleri alanında Lisans Derecesine (Carleton Üniversitesi) sahip ve Node.js, TypeScript, JavaScript ve React konularında uzmanlaşmış ön uç geliştirmeyle ilgileniyor. Sezgisel ve estetik açıdan hoş kullanıcı arayüzleri oluşturma tutkunu, Curtis modern çerçevelerle çalışmayı ve iyi yapı...

Daha Fazla Oku

Iron Destek Ekibi

Haftada 5 gün, 24 saat çevrimiçiyiz.
Sohbet
E-posta
Beni Ara