Altbilgi içeriğine atla
IRONPDF KULLANARAK

C#'ta Iki PDF Dosyasini Nasıl Karsilastirilir

ASP.NET Core'da PDF dosyası yükleme ve indirme, ikili verilerin işlenmesini, kontrol eylemlerini yönetilmesini ve -- isteğe bağlı olarak -- belgelerin depolama veya teslimat öncesinde sunucu tarafında işlenmesini gerektirir. IronPDF ile, yalnızca basit dosya saklamanın ötesine geçebilir, filigranlar uygulayabilir, HTML'den PDF'ler üretebilir ve işlenen belgeleri kullanıcılarına iade edebilirsiniz. Bu kılavuz, .NET 10 kullanarak C#'ta eksiksiz bir yükleme-indirme iş akışını oluşturma sürecinin her adımını gösterir.

[30] ## IronPDF'i bir ASP.NET Core Projesinde Nasıl Kurarsınız?

Herhangi bir yükleme veya indirme mantığı yazmadan önce, IronPDF'i projenize NuGet Paket Yöneticisi veya .NET CLI kullanarak ekleyin. Package Manager Konsolu'nda Install-Package IronPdf kullanın veya aşağıdaki CLI komutlarını çalıştırarak yeni bir MVC projesi oluşturun ve gerekli tüm paketleri tek seferde ekleyin.

dotnet new mvc -n PdfManager --framework net10.0
cd PdfManager
dotnet add package IronPdf
dotnet add package Microsoft.EntityFrameworkCore.Sqlite
dotnet add package Microsoft.EntityFrameworkCore.Design
dotnet new mvc -n PdfManager --framework net10.0
cd PdfManager
dotnet add package IronPdf
dotnet add package Microsoft.EntityFrameworkCore.Sqlite
dotnet add package Microsoft.EntityFrameworkCore.Design
SHELL

Yüklendikten sonra, IronPDF HTML'den PDF oluşturmak için ChromePdfRenderer, mevcut dosyaları yüklemek ve üzerinde değişiklik yapmak için PdfDocument ve filigranlar, damgalar ve dijital imzalar gibi bir dizi düzenleme aracına erişim sağlar. Versiyon geçmişi ve uyumluluk notları için tam IronPDF NuGet paket sayfasını inceleyin.

Proje Kurulumu

Depolama yolu sabitini Program.cs'ya ekleyin ve ApplicationDbContext'nizi bağımlılık enjeksiyonu ile kaydedin. Proje yapınız, herhangi bir PDF ile ilgili mantık yazmadan önce bir Controllers/PdfController.cs, bir Models/PdfFileModel.cs ve bir Data/ApplicationDbContext.cs içerecektir.

PDF Depolama için Bir Veritabanı Modeli Nasıl Oluşturulur?

Herhangi bir PDF yükleme sisteminin temeli, bir veritabanı tablosuna eşlenen bir model sınıfıdır. Yukarıdaki C# kaydı, temel alanları yakalar -- dosya adı, içerik türü, ham ikili veri ve bir yükleme zaman damgası.

public class PdfFileModel
{
    public int Id { get; set; }
    public string FileName { get; set; } = string.Empty;
    public string ContentType { get; set; } = "application/pdf";
    public byte[] FileData { get; set; } = Array.Empty<byte>();
    public DateTime UploadedDate { get; set; } = DateTime.UtcNow;
}
public class PdfFileModel
{
    public int Id { get; set; }
    public string FileName { get; set; } = string.Empty;
    public string ContentType { get; set; } = "application/pdf";
    public byte[] FileData { get; set; } = Array.Empty<byte>();
    public DateTime UploadedDate { get; set; } = DateTime.UtcNow;
}
Public Class PdfFileModel
    Public Property Id As Integer
    Public Property FileName As String = String.Empty
    Public Property ContentType As String = "application/pdf"
    Public Property FileData As Byte() = Array.Empty(Of Byte)()
    Public Property UploadedDate As DateTime = DateTime.UtcNow
End Class
$vbLabelText   $csharpLabel

FileData PDF'yi ikili büyük nesne (BLOB) olarak depolar. Bu yaklaşım, belgeleri veritabanı içinde kendi kendine yeten hale getirir, yedeklemeyi basitleştirir ve sorguları basitleştirir. Yüksek hacimli senaryolar veya büyük dosyalar için, yalnızca dosya yolunu veritabanında saklamayı ve binariyi Azure Blob Storage veya Amazon S3 gibi bir bulut depolama kovasına yazmayı düşünün.

Entity Framework Core'un Yapılandırılması

Modeli EF Core'a kaydetmek için ApplicationDbContext'ınıza bir DbSet<PdfFileModel> özelliği ekleyin:

using Microsoft.EntityFrameworkCore;

public class ApplicationDbContext : DbContext
{
    public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
        : base(options) { }

    public DbSet<PdfFileModel> PdfFiles { get; set; }
}
using Microsoft.EntityFrameworkCore;

public class ApplicationDbContext : DbContext
{
    public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
        : base(options) { }

    public DbSet<PdfFileModel> PdfFiles { get; set; }
}
Imports Microsoft.EntityFrameworkCore

Public Class ApplicationDbContext
    Inherits DbContext

    Public Sub New(options As DbContextOptions(Of ApplicationDbContext))
        MyBase.New(options)
    End Sub

    Public Property PdfFiles As DbSet(Of PdfFileModel)
End Class
$vbLabelText   $csharpLabel

Şemayı oluşturmak için dotnet ef migrations add InitialCreate ardından dotnet ef database update çalıştırın. Entity Framework Core, byte[] öğesini SQL Server'da varbinary(max) sütununa veya SQLite'ta BLOB sütununa otomatik olarak eşler -- manuel SQL gerekmez.

ASP.NET Core Kontrolcüsünde PDF Dosyaları Nasıl Yüklenir?

Yüklemeleri işleyen denetleyici işlemi, enctype="multipart/form-data" kullanarak bir HTML formundan IFormFile parametresi alır. İşlem, akışı bir MemoryStream içine okuyup, bir bayt dizisine çevirir ve sonucu Entity Framework Core aracılığıyla kalıcı hale getirir.

using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;

public class PdfController : Controller
{
    private readonly ApplicationDbContext _context;

    public PdfController(ApplicationDbContext context)
    {
        _context = context;
    }

    [HttpPost]
    public async Task<IActionResult> Upload(IFormFile file)
    {
        if (file is null || file.Length == 0)
            return BadRequest("No file selected.");

        if (!file.ContentType.Equals("application/pdf", StringComparison.OrdinalIgnoreCase))
            return BadRequest("Only PDF files are accepted.");

        using var stream = new MemoryStream();
        await file.CopyToAsync(stream);

        var pdfFile = new PdfFileModel
        {
            FileName = Path.GetFileName(file.FileName),
            ContentType = file.ContentType,
            FileData = stream.ToArray(),
            UploadedDate = DateTime.UtcNow
        };

        _context.PdfFiles.Add(pdfFile);
        await _context.SaveChangesAsync();

        return RedirectToAction(nameof(Index));
    }

    public async Task<IActionResult> Index()
    {
        var files = await _context.PdfFiles
            .Select(f => new { f.Id, f.FileName, f.UploadedDate })
            .ToListAsync();
        return View(files);
    }
}
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;

public class PdfController : Controller
{
    private readonly ApplicationDbContext _context;

    public PdfController(ApplicationDbContext context)
    {
        _context = context;
    }

    [HttpPost]
    public async Task<IActionResult> Upload(IFormFile file)
    {
        if (file is null || file.Length == 0)
            return BadRequest("No file selected.");

        if (!file.ContentType.Equals("application/pdf", StringComparison.OrdinalIgnoreCase))
            return BadRequest("Only PDF files are accepted.");

        using var stream = new MemoryStream();
        await file.CopyToAsync(stream);

        var pdfFile = new PdfFileModel
        {
            FileName = Path.GetFileName(file.FileName),
            ContentType = file.ContentType,
            FileData = stream.ToArray(),
            UploadedDate = DateTime.UtcNow
        };

        _context.PdfFiles.Add(pdfFile);
        await _context.SaveChangesAsync();

        return RedirectToAction(nameof(Index));
    }

    public async Task<IActionResult> Index()
    {
        var files = await _context.PdfFiles
            .Select(f => new { f.Id, f.FileName, f.UploadedDate })
            .ToListAsync();
        return View(files);
    }
}
Imports Microsoft.AspNetCore.Mvc
Imports Microsoft.EntityFrameworkCore
Imports System.IO
Imports System.Threading.Tasks

Public Class PdfController
    Inherits Controller

    Private ReadOnly _context As ApplicationDbContext

    Public Sub New(context As ApplicationDbContext)
        _context = context
    End Sub

    <HttpPost>
    Public Async Function Upload(file As IFormFile) As Task(Of IActionResult)
        If file Is Nothing OrElse file.Length = 0 Then
            Return BadRequest("No file selected.")
        End If

        If Not file.ContentType.Equals("application/pdf", StringComparison.OrdinalIgnoreCase) Then
            Return BadRequest("Only PDF files are accepted.")
        End If

        Using stream As New MemoryStream()
            Await file.CopyToAsync(stream)

            Dim pdfFile As New PdfFileModel With {
                .FileName = Path.GetFileName(file.FileName),
                .ContentType = file.ContentType,
                .FileData = stream.ToArray(),
                .UploadedDate = DateTime.UtcNow
            }

            _context.PdfFiles.Add(pdfFile)
            Await _context.SaveChangesAsync()
        End Using

        Return RedirectToAction(NameOf(Index))
    End Function

    Public Async Function Index() As Task(Of IActionResult)
        Dim files = Await _context.PdfFiles _
            .Select(Function(f) New With {f.Id, f.FileName, f.UploadedDate}) _
            .ToListAsync()
        Return View(files)
    End Function
End Class
$vbLabelText   $csharpLabel

Yüklenen Dosyaların Doğrulanması

İçerik türünü işlemeye başlamadan önce her zaman doğrulayın. file.ContentType kontrolü, kullanıcıların yanlışlıkla PDF olmayan içerik yüklemesine karşı koruma sağlar. Daha güçlü doğrulama için, akışın ilk dört baytını okuyup PDF sihirli numarasını (%PDF) doğrulayın. Akışı kopyalamadan önce file.Length kontrol ederek maksimum dosya boyutunu -- genellikle genel belge iş akışları için 10 MB -- zorunlu hale getirin.

Bu işlemi tetikleyen HTML formunun iki özelliğe ihtiyacı var: method="post" ve enctype="multipart/form-data". Kodu çözme türü olmadan, tarayıcılar dosya adını düz metin olarak gönderir, ikili içeriği değil. Form etiketinin içine bir <input type="file" name="file" accept=".pdf" /> öğesi ve /Pdf/Upload'a işaret eden bir gönder butonu ekleyin.

ASP .NET C# ile IronPDF kullanarak PDF Dosyalarını Yükleme ve İndirme: Resim 1 - Yüklenen PDF'yi gösteren UI

Yüklenen Bir PDF'ye Kaydetmeden Önce Filigran Nasıl Eklenir?

Dosyaların depolama öncesinde sunucu tarafında işlenmesi, IronPDF'in filigranlama özellikleri için en pratik kullanımlardan biridir. Gelen her belgeyi "GİZLİ" etiketi, şirket logosu veya "TASLAK" bildirim ile damgalayabilirsiniz, böylece baytlar veritabanına ulaşmadan önce.

[HttpPost]
public async Task<IActionResult> UploadWithWatermark(IFormFile file)
{
    if (file is null || file.Length == 0)
        return BadRequest("No file selected.");

    using var stream = new MemoryStream();
    await file.CopyToAsync(stream);
    byte[] originalBytes = stream.ToArray();

    // Load the uploaded file into IronPDF
    var pdf = new IronPdf.PdfDocument(originalBytes);

    // Apply an HTML watermark centered on every page
    pdf.ApplyWatermark(
        "<h2 style='color:red;opacity:0.4'>CONFIDENTIAL</h2>",
        rotation: 45,
        opacity: 60,
        verticalAlignment: IronPdf.Editing.VerticalAlignment.Middle,
        horizontalAlignment: IronPdf.Editing.HorizontalAlignment.Center
    );

    var pdfFile = new PdfFileModel
    {
        FileName = Path.GetFileName(file.FileName),
        ContentType = "application/pdf",
        FileData = pdf.BinaryData,
        UploadedDate = DateTime.UtcNow
    };

    _context.PdfFiles.Add(pdfFile);
    await _context.SaveChangesAsync();

    return RedirectToAction(nameof(Index));
}
[HttpPost]
public async Task<IActionResult> UploadWithWatermark(IFormFile file)
{
    if (file is null || file.Length == 0)
        return BadRequest("No file selected.");

    using var stream = new MemoryStream();
    await file.CopyToAsync(stream);
    byte[] originalBytes = stream.ToArray();

    // Load the uploaded file into IronPDF
    var pdf = new IronPdf.PdfDocument(originalBytes);

    // Apply an HTML watermark centered on every page
    pdf.ApplyWatermark(
        "<h2 style='color:red;opacity:0.4'>CONFIDENTIAL</h2>",
        rotation: 45,
        opacity: 60,
        verticalAlignment: IronPdf.Editing.VerticalAlignment.Middle,
        horizontalAlignment: IronPdf.Editing.HorizontalAlignment.Center
    );

    var pdfFile = new PdfFileModel
    {
        FileName = Path.GetFileName(file.FileName),
        ContentType = "application/pdf",
        FileData = pdf.BinaryData,
        UploadedDate = DateTime.UtcNow
    };

    _context.PdfFiles.Add(pdfFile);
    await _context.SaveChangesAsync();

    return RedirectToAction(nameof(Index));
}
Imports System.IO
Imports System.Threading.Tasks
Imports Microsoft.AspNetCore.Mvc

<HttpPost>
Public Async Function UploadWithWatermark(file As IFormFile) As Task(Of IActionResult)
    If file Is Nothing OrElse file.Length = 0 Then
        Return BadRequest("No file selected.")
    End If

    Using stream As New MemoryStream()
        Await file.CopyToAsync(stream)
        Dim originalBytes As Byte() = stream.ToArray()

        ' Load the uploaded file into IronPDF
        Dim pdf = New IronPdf.PdfDocument(originalBytes)

        ' Apply an HTML watermark centered on every page
        pdf.ApplyWatermark(
            "<h2 style='color:red;opacity:0.4'>CONFIDENTIAL</h2>",
            rotation:=45,
            opacity:=60,
            verticalAlignment:=IronPdf.Editing.VerticalAlignment.Middle,
            horizontalAlignment:=IronPdf.Editing.HorizontalAlignment.Center
        )

        Dim pdfFile As New PdfFileModel With {
            .FileName = Path.GetFileName(file.FileName),
            .ContentType = "application/pdf",
            .FileData = pdf.BinaryData,
            .UploadedDate = DateTime.UtcNow
        }

        _context.PdfFiles.Add(pdfFile)
        Await _context.SaveChangesAsync()

        Return RedirectToAction(NameOf(Index))
    End Using
End Function
$vbLabelText   $csharpLabel

Filigran Yapılandırma Seçenekleri

IronPDF'nin ApplyWatermark yöntemi bir HTML dizesini kabul eder, bu da filigranınızın herhangi bir geçerli HTML ve satır içi CSS içerebileceği anlamına gelir -- gradyanlar, özel yazı tipleri, döndürülmüş metin veya hatta gömülü SVG simgeleri. rotation parametresi filigranı sayfa köşegenine döndürürken, opacity saydamlığı 0 (görünmez) ile 100 (tamamen opak) arasında kontrol eder.

Filigranların ötesinde, aynı PdfDocument nesnesi üstbilgi ve altbilgi ekleme, resim damgalama ve mevcut form alanlarını düzenleme yöntemlerini sunar. Son bayt dizisini almak için pdf.BinaryData çağrılmadan önce birden fazla işleme adımı zincirleyebilirsiniz.

ASP .NET C# ile IronPDF kullanarak PDF Dosyalarını Yükleme ve İndirme: Resim 2 - PDF filigranlandıktan sonra veritabanına kaydedildi

Veritabanında Saklanan PDF Dosyalarını Nasıl İndirirsiniz?

Depolanan bir PDF'yi tarayıcıya geri sunmak için kaydı ID ile alın ve bir FileResult döndürün. ASP.NET Core File yardımcı yöntemi doğru Content-Type başlığını ayarlar ve tarayıcının indirme diyalogunu orijinal dosya adıyla tetikler.

public async Task<IActionResult> Download(int id)
{
    var pdfFile = await _context.PdfFiles.FindAsync(id);

    if (pdfFile is null)
        return NotFound();

    return File(pdfFile.FileData, pdfFile.ContentType, pdfFile.FileName);
}
public async Task<IActionResult> Download(int id)
{
    var pdfFile = await _context.PdfFiles.FindAsync(id);

    if (pdfFile is null)
        return NotFound();

    return File(pdfFile.FileData, pdfFile.ContentType, pdfFile.FileName);
}
Imports System.Threading.Tasks
Imports Microsoft.AspNetCore.Mvc

Public Async Function Download(id As Integer) As Task(Of IActionResult)
    Dim pdfFile = Await _context.PdfFiles.FindAsync(id)

    If pdfFile Is Nothing Then
        Return NotFound()
    End If

    Return File(pdfFile.FileData, pdfFile.ContentType, pdfFile.FileName)
End Function
$vbLabelText   $csharpLabel

Görünümde İndirme Listesi Görüntülenmesi

Index işlemi tüm depolanan dosya kayıtlarını alır ve bir Razor görünüme geçirir. Basit bir HTML tablo, her kayıt için dosya adını, yükleme tarihini ve bir indirme bağlantısını render eder.

<table class="content__data-table" data-content-table>
    <caption>Uploaded PDF Files</caption>
    <thead>
        <tr>
            <th>File Name</th>
            <th>Uploaded</th>
            <th>Action</th>
        </tr>
    </thead>
    <tbody>
        @foreach (var item in Model)
        {
            <tr>
                <td>@item.FileName</td>
                <td>@item.UploadedDate.ToString("yyyy-MM-dd HH:mm")</td>
                <td><a href="/Pdf/Download/@item.Id">Download</a></td>
            </tr>
        }
    </tbody>
</table>
<table class="content__data-table" data-content-table>
    <caption>Uploaded PDF Files</caption>
    <thead>
        <tr>
            <th>File Name</th>
            <th>Uploaded</th>
            <th>Action</th>
        </tr>
    </thead>
    <tbody>
        @foreach (var item in Model)
        {
            <tr>
                <td>@item.FileName</td>
                <td>@item.UploadedDate.ToString("yyyy-MM-dd HH:mm")</td>
                <td><a href="/Pdf/Download/@item.Id">Download</a></td>
            </tr>
        }
    </tbody>
</table>
$vbLabelText   $csharpLabel

return File(bytes, contentType, fileName) aşırı yükleme hem Content-Type: application/pdf hem de Content-Disposition: attachment; ayarlar filename="..." başlıklarını ayarlar. Tarayıcının PDF'yi indirme yerine satır içi açmasını istiyorsanız, üçüncü bağımsız değişken olmadan return File(bytes, contentType) kullanın -- bu, Content-Disposition: attachment talimatını atlar.

ASP .NET C# ile IronPDF kullanarak PDF Dosyalarını Yükleme ve İndirme: Resim 3 - Saklanmış PDF dosyalarının listesi

Alternatif Olarak Dosya Sistemi Depolaması

Büyük dağıtımlar için, ham ikili verileri veritabanında saklamak satır boyutlarını arttırır ve sorguları yavaşlatabilir. Alternatif olarak, dosyayı diske veya bir bulut sağlayıcıya yazmak ve veritabanında yalnızca göreceli yolu saklamak mümkündür. FileData byte[]'u FilePath string ile değiştirin, yükleme sırasında System.IO.File.WriteAllBytesAsync(path, bytes) yazın ve indirme sırasında System.IO.File.ReadAllBytesAsync(path) okuyun. Her iki yol da denetleyicide aynı return File(...) çağrısında birleşir.

Talep Üzerine PDF Belgeleri Nasıl Oluşturulur ve İndirme İçin Sunulur?

Önceden saklanmış dosyaları sunmakla sınırlı değilsiniz. IronPDF'in HTML'den PDF'ye dönüşümü, istekteki verilere göre dinamik olarak belgeler oluşturmanıza olanak tanır -- faturalar, raporlar, sertifikalar ve veri dışa aktarımları için kullanışlıdır.

public IActionResult GenerateInvoice(int orderId)
{
    // Build HTML content from your data model
    string html = $@"
        <html>
        <body style='font-family: Arial, sans-serif; padding: 40px;'>
            <h1>Invoice #{orderId}</h1>
            <p>Generated: {DateTime.UtcNow:yyyy-MM-dd HH:mm} UTC</p>
            <table border='1' cellpadding='8'>
                <tr><th>Item</th><th>Qty</th><th>Price</th></tr>
                <tr><td>IronPDF License</td><td>1</td><td>$999</td></tr>
            </table>
        </body>
        </html>";

    var renderer = new IronPdf.ChromePdfRenderer();
    using var pdf = renderer.RenderHtmlAsPdf(html);

    return File(pdf.BinaryData, "application/pdf", $"invoice-{orderId}.pdf");
}
public IActionResult GenerateInvoice(int orderId)
{
    // Build HTML content from your data model
    string html = $@"
        <html>
        <body style='font-family: Arial, sans-serif; padding: 40px;'>
            <h1>Invoice #{orderId}</h1>
            <p>Generated: {DateTime.UtcNow:yyyy-MM-dd HH:mm} UTC</p>
            <table border='1' cellpadding='8'>
                <tr><th>Item</th><th>Qty</th><th>Price</th></tr>
                <tr><td>IronPDF License</td><td>1</td><td>$999</td></tr>
            </table>
        </body>
        </html>";

    var renderer = new IronPdf.ChromePdfRenderer();
    using var pdf = renderer.RenderHtmlAsPdf(html);

    return File(pdf.BinaryData, "application/pdf", $"invoice-{orderId}.pdf");
}
Imports System
Imports Microsoft.AspNetCore.Mvc
Imports IronPdf

Public Class InvoiceController
    Inherits Controller

    Public Function GenerateInvoice(orderId As Integer) As IActionResult
        ' Build HTML content from your data model
        Dim html As String = $"
            <html>
            <body style='font-family: Arial, sans-serif; padding: 40px;'>
                <h1>Invoice #{orderId}</h1>
                <p>Generated: {DateTime.UtcNow:yyyy-MM-dd HH:mm} UTC</p>
                <table border='1' cellpadding='8'>
                    <tr><th>Item</th><th>Qty</th><th>Price</th></tr>
                    <tr><td>IronPDF License</td><td>1</td><td>$999</td></tr>
                </table>
            </body>
            </html>"

        Dim renderer As New ChromePdfRenderer()
        Using pdf = renderer.RenderHtmlAsPdf(html)
            Return File(pdf.BinaryData, "application/pdf", $"invoice-{orderId}.pdf")
        End Using
    End Function
End Class
$vbLabelText   $csharpLabel

Talep Üzerine PDF'ler İçin Render Seçenekleri

ChromePdfRenderer Google Chrome'a güç veren aynı Chromium render motorunu kullanarak piksel bazlı doğru çıktı üretir. Bu, tarayıcıda gösterilebilen her CSS'nin -- flexbox yerleşimleri, ızgaralar, özel yazıtipleri, SVG grafikler -- oluşturulan PDF'de düzgün bir şekilde görüntülenmesi anlamına gelir. Kağıt boyutunu, kenar boşluklarını ve yönlendirmeyi RenderHtmlAsPdf çağrısından önce RenderingOptions özelliği aracılığıyla ayarlayabilirsiniz.

Daha karmaşık belgeler için, HTML dizesi yerine RenderUrlAsPdf'ya tam bir URL gönderin. IronPDF, sayfayı başsız bir tarayıcıda yükler, JavaScript'i yürütür, stilleri uygular ve tam olarak render edilen DOM'u PDF'ye dönüştürür. HTML'den PDF'ye dönüşüm kılavuzunu inceleyin ve özel başlıklar, altbilgiler ve sayfa numaralandırma belirteçleri dâhil olmak üzere render seçeneklerinin tam setini görün.

ASP .NET C# ile IronPDF kullanarak PDF Dosyalarını Yükleme ve İndirme: Resim 4 - Oluşturulan örnek PDF

ASP.NET Core'da Birden Fazla PDF Dosyasını Nasıl Birleştirirsiniz?

Tek dosya işlemlerinin ötesinde, birkaç yüklenmiş belgeyi birleştirmeniz gerekebilir. IronPDF'nin PDF birleştirme yeteneği, bir PdfDocument nesne listesini kabul eder ve tek bir birleştirilmiş dosya döndürür.

public async Task<IActionResult> MergeAll()
{
    var allFiles = await _context.PdfFiles.ToListAsync();

    if (allFiles.Count < 2)
        return BadRequest("At least two files are required for merging.");

    var documents = allFiles
        .Select(f => new IronPdf.PdfDocument(f.FileData))
        .ToList();

    using var merged = IronPdf.PdfDocument.Merge(documents);

    return File(merged.BinaryData, "application/pdf", "merged.pdf");
}
public async Task<IActionResult> MergeAll()
{
    var allFiles = await _context.PdfFiles.ToListAsync();

    if (allFiles.Count < 2)
        return BadRequest("At least two files are required for merging.");

    var documents = allFiles
        .Select(f => new IronPdf.PdfDocument(f.FileData))
        .ToList();

    using var merged = IronPdf.PdfDocument.Merge(documents);

    return File(merged.BinaryData, "application/pdf", "merged.pdf");
}
Imports System.Threading.Tasks
Imports Microsoft.AspNetCore.Mvc

Public Async Function MergeAll() As Task(Of IActionResult)
    Dim allFiles = Await _context.PdfFiles.ToListAsync()

    If allFiles.Count < 2 Then
        Return BadRequest("At least two files are required for merging.")
    End If

    Dim documents = allFiles _
        .Select(Function(f) New IronPdf.PdfDocument(f.FileData)) _
        .ToList()

    Using merged = IronPdf.PdfDocument.Merge(documents)
        Return File(merged.BinaryData, "application/pdf", "merged.pdf")
    End Using
End Function
$vbLabelText   $csharpLabel

Bir PDF'den Sayfaları Ayırma

Ters işlem -- belirli sayfaların çıkarılması -- CopyPages kullanır. Depolanan baytlardan bir PdfDocument yükleyin, sıfır bazlı sayfa indeksleri ile source.CopyPages(startIndex, endIndex) çağrısı yapın ve sonuçtaki PdfDocument.BinaryData'yı FileResult olarak döndürün. Bu desen, sayfalama önizlemeleri için, çok bölümlü raporları ayırmak veya küçük resim oluşturmak için bir kapak sayfa çıkarmak için kullanışlıdır. Sonuç dosyasına dijital imzalar uygulayabilir ve kullanıcıya sunmadan önce birleştirilmiş veya ayrılmış dokümanlara bu imzaları ekleyebilirsiniz.

Büyük Dosya Yüklemeleri Nasıl Güvenli Bir Şekilde Yönetirsiniz?

Büyük PDF dosyaları, ASP.NET Core ara yazılım seviyesinde ek yapılandırmalar gerektirir. Varsayılan olarak, istek gövde boyutu limiti yaklaşık 28 MB olarak ayarlanmıştır. Bunu yükseltmek için, builder.WebHost.ConfigureKestrel yani dosya boyutunu 50 MB olarak ayarlamak istediğiniz MultipartBodyLengthLimit ayarlamak için builder.Services.Configure<FormOptions> çağrısı yapın - builder.Build() öncesinde Program.cs içinde.

Boyut sınırlamalarının ötesinde, her yükleme uç noktasına bu güvenlik uygulamalarını uygulayın: içerik türü başlığını doğrulayın, %PDF sihirli numarasını kontrol etmek için akışın ilk baytlarını inceleyin, gömülü scriptler için IronPDF'nin belge inceleme API'sini kullanarak tarayın ve işlenmiş dosyaları web kökü dışında saklayarak doğrudan statik içerik olarak sunulmamasını sağlayın. ASP.NET Core güvenlik dokümantasyonu, sahtecilik token doğrulama ve virüs tarama entegrasyonunu içeren ek sertleştirme tekniklerini kapsar.

Büyük Dosyaları Bellek Baskısından Kaçınmak İçin Yayınlama

Dosyalar 10 MB'yi aştığında, işleme başlamadan önce tüm akışı bir MemoryStream'ye okumak bellek kullanımını önemli ölçüde artırabilir. Mümkünse talep akışından doğrudan yüklemek için IronPdf.PdfDocument.FromStream kullanın veya geçici bir dosya yoluna yazıp diskten yükleyin:

string tempPath = Path.GetTempFileName();
await using (var fs = System.IO.File.Create(tempPath))
{
    await file.CopyToAsync(fs);
}

using var pdf = new IronPdf.PdfDocument(tempPath);
// process...
System.IO.File.Delete(tempPath);
string tempPath = Path.GetTempFileName();
await using (var fs = System.IO.File.Create(tempPath))
{
    await file.CopyToAsync(fs);
}

using var pdf = new IronPdf.PdfDocument(tempPath);
// process...
System.IO.File.Delete(tempPath);
Imports System.IO
Imports IronPdf

Dim tempPath As String = Path.GetTempFileName()

Using fs As FileStream = System.IO.File.Create(tempPath)
    Await file.CopyToAsync(fs)
End Using

Using pdf As PdfDocument = New IronPdf.PdfDocument(tempPath)
    ' process...
End Using

System.IO.File.Delete(tempPath)
$vbLabelText   $csharpLabel

Bu desen yığın tahsislerini düşük tutar ve HTTP yanıtı gönderildikten sonra dosyaların eşzamanlı olarak işlendiği arka plan işleme kuyruklarında iyi çalışır. Ek eşzamanlı işleme desenleri için IronPDF dokümantasyonunu araştırın.

Sonraki Adımlarınız Neler?

Şimdi, IronPDF tarafından desteklenen bir ASP.NET Core MVC uygulamasında PDF dosyalarını yüklemek, işlemek, depolamak ve indirmek için eksiksiz bir temele sahipsiniz. Buradan itibaren, iş akışını genişletmek için aşağıdaki yönleri göz önünde bulundurun.

İşleme yeteneklerini genişletin. IronPDF, PDF form alanlarını doldurma ve okuma, mevcut PDF dosyalarından metin ve görüntüleri çıkarma ve PDF sayfalarını görüntülere dönüştürme destekler. Bu özelliklerden her biri, yukarıda gösterilen aynı kontrolör desenine entegre edilir.

Dijital imzaları ekleyin. Her üretilen veya yüklenen belgeyi bir X.509 sertifikası ile dijital imza ekleyerek depolamadan önce imzalayın. İmzalı PDF'ler, birçok uyum gereksinimini karşılayan oynanamayan metaveriye sahiptir.

Depolamayı buluta ölçekleyin. Yerel byte[] veritabanı sütununu Azure Blob Storage veya Amazon S3 referansı ile değiştirin. İşlenmiş baytları bulut deposuna yükleyin ve veritabanında sadece URI'yi saklayın - bu, veritabanı satır boyutlarını önemli ölçüde azaltır ve CDN dağıtımını etkinleştirir.

Ücretsiz bir deneme başlatın. 30 günlük değerlendirme anahtarı almak için IronPDF deneme lisansı sayfasını ziyaret edin. Ayrıca, .NET uygulamanızda mevcut PDF yeteneklerinin tam kapsamını anlamak için IronPDF özellikleri genel bakışını inceleyebilir veya üretim dağıtımı için hazır olduğunuzda fiyatlandırma ve lisanslama sayfasına danışabilirsiniz.

Sıkça Sorulan Sorular

Bir ASP.NET Core MVC uygulamasında PDF dosyalarını nasıl yükleyebilirim?

Bir ASP.NET Core MVC uygulamasında PDF dosyalarını yüklemek için, formdan dosya verilerini yakalamak için IFormFile arayüzünü kullanabilir ve ardından olasılıkla IronPDF'in PDF manipülasyonu için yardımını alarak kaydetmeden önce sunucu tarafında işleyebilirsiniz.

ASP.NET'te PDF dosyalarını indirmek için en iyi yol nedir?

ASP.NET'te PDF dosyalarını indirmek için en iyi yol, kontrolcünüzdeki FileResult eylemini kullanmaktır. IronPDF, PDF'leri sunucu tarafında oluşturmaya ve değiştirmeye yardımcı olabilir, böylece indirme için hazır hale gelir.

ASP.NET kullanarak PDF dosyalarını bir veritabanında saklayabilir miyim?

Evet, bir dosyayı bayt dizisine çevirerek ve ikili büyük nesne (BLOB) olarak kaydederek ASP.NET kullanarak bir veritabanında PDF dosyalarını saklayabilirsiniz. IronPDF, depolama öncesi PDF'yi işlemekte yardımcı olabilir.

IronPDF, ASP.NET'te PDF'lere filigran eklemekte nasıl yardımcı olur?

IronPDF, PDF belgelerinize kolayca metin veya resim filigranları ekleyen bir işlevsellik sağlar, bu da belgeleri indirme veya depolamadan önce değiştirmek için ASP.NET uygulamanıza entegre edilebilir.

PDF depolamak için EF Core'un kullanmanın avantajları nelerdir?

EF Core, nesneler ve ilişkisel veritabanları arasında verimli eşleme sağlayarak, ASP.NET uygulamanızda PDF depolama ve geri almayı yapılandırılmış ve ölçeklenebilir bir biçimde yönetmeyi kolaylaştırır.

ASP.NET uygulamalarında PDF içeriğini manipüle etmek mümkün mü?

Evet, IronPDF ile PDF içeriğini manipüle edebilirsiniz, bu metin, resimler ve meta veri düzenleme gibi işlemleri içerir; bu, belgeleri kullanıcılara sunulmadan önce özelleştirmek için faydalı olabilir.

ASP.NET'te dosya yüklemelerini güvenli bir şekilde nasıl yapabilirim?

ASP.NET'te dosya yüklemelerini güvenli bir şekilde işlemek için, dosya türlerini doğrulamalı, dosya boyutlarını sınırlamalı ve güvenli yerlere kaydetmelisiniz. IronPDF gibi kütüphaneler kullanarak PDF dosyalarının kendilerinin bütünlüğünü sağlamaya da yardımcı olabilirsiniz.

Web uygulamalarında PDF'lerle çalışırken karşılaşılan yaygın zorluklar nelerdir?

Yaygın zorluklar arasında dosya uyumluluğunun sağlanması, büyük dosya boyutlarının yönetimi ve belge bütünlüğünün korunması yer alır. IronPDF, PDF oluşturma ve manipülasyonu için sağlam araçlar sağlayarak bu zorlukların üstesinden gelmenize yardımcı olur.

ASP.NET'te farklı dosya türlerini PDF'ye çevirebilir miyim?

Evet, IronPDF, ASP.NET uygulamanızda çeşitli dosya türlerini, örneğin HTML veya resim dosyalarını sorunsuz bir şekilde PDF'lere çevirebilir.

ASP.NET'te PDF'lerin işlenmesinde Model-View-Controller (MVC) rolü nedir?

MVC deseni, veri işleme (Model), kullanıcı arayüzü (View) ve uygulama mantığı (Controller) gibi bölümlere ayrılarak PDF'lerin işlenmesi için kod organizasyonunu sağlar ve PDF işlevselliklerini yönetmek ve genişletmek daha kolay hale gelir.

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