Wie man PDF-Dateien in ASP.NET Core mit C# hochlädt und herunterlädt
Das Hoch- und Herunterladen von PDF-Dateien in ASP.NET Core erfordert die Verarbeitung von Binärdaten, die Verwaltung von Controller-Aktionen und -- optional - die serverseitige Verarbeitung der Dokumente vor der Speicherung oder Zustellung. Mit IronPDF können Sie über die einfache Dateispeicherung hinausgehen, indem Sie Wasserzeichen hinzufügen, PDFs aus HTML generieren und die verarbeiteten Dokumente an die Benutzer zurückgeben – alles innerhalb Ihrer bestehenden MVC-Pipeline. Diese Anleitung führt Sie Schritt für Schritt durch die Erstellung eines vollständigen Upload-Download-Workflows in C# mit .NET 10.
Wie installiert man IronPDF in einem ASP.NET Core -Projekt?
Bevor Sie eine Upload- oder Download-Logik schreiben, fügen Sie IronPDF mithilfe des NuGet -Paketmanagers oder der .NET Befehlszeilenschnittstelle zu Ihrem Projekt hinzu. Verwenden Sie Install-Package IronPdf in der Paketverwaltungskonsole, oder führen Sie die unten aufgeführten CLI-Befehle aus, um ein neues MVC-Projekt zu erstellen und alle erforderlichen Pakete auf einmal hinzuzufügen.
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
Nach der Installation bietet IronPDF Zugriff auf ChromePdfRenderer zum Erzeugen von PDFs aus HTML, PdfDocument zum Laden und Bearbeiten vorhandener Dateien und eine Reihe von Bearbeitungswerkzeugen wie Wasserzeichen, Stempel und digitale Signaturen. Auf der vollständigen NuGet-Paketseite von IronPDF finden Sie die Versionshistorie und Hinweise zur Kompatibilität.
Einrichten des Projekts
Fügen Sie eine Speicherpfadkonstante zu Program.cs hinzu und registrieren Sie Ihren ApplicationDbContext mit dem Dependency Injection Container. Ihre Projektstruktur wird einen Controllers/PdfController.cs, einen Models/PdfFileModel.cs und einen Data/ApplicationDbContext.cs enthalten, bevor Sie eine PDF-spezifische Logik schreiben.
Wie erstellt man ein Datenbankmodell für die PDF-Speicherung?
Grundlage jedes PDF-Upload-Systems ist eine Modellklasse, die einer Datenbanktabelle zugeordnet ist. Der folgende C#-Datensatz erfasst die wichtigsten Felder – Dateiname, Inhaltstyp, die rohen Binärdaten und einen Upload-Zeitstempel.
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
FileData speichert das PDF als binäres großes Objekt (BLOB). Durch diesen Ansatz bleiben die Dokumente in der Datenbank in sich abgeschlossen, was die Datensicherung vereinfacht und Abfragen unkomplizierter macht. Bei hohem Datenaufkommen oder großen Dateien empfiehlt es sich, nur den Dateipfad in der Datenbank zu speichern und die Binärdatei in einem Cloud-Speicher wie Azure Blob Storage oder Amazon S3 zu speichern.
Konfigurieren von Entity Framework Core
Registrieren Sie das Modell bei EF Core, indem Sie eine DbSet<PdfFileModel> Eigenschaft zu Ihrem ApplicationDbContext hinzufügen:
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
Führen Sie dotnet ef migrations add InitialCreate gefolgt von dotnet ef database update aus, um das Schema zu erstellen. Entity Framework Core ordnet byte[] automatisch einer varbinary(max)-Spalte in SQL Server oder einer BLOB-Spalte in SQLite zu - es ist kein manuelles SQL erforderlich.
Wie lädt man PDF-Dateien in einen ASP.NET Core -Controller hoch?
Die Controller-Aktion, die Uploads verarbeitet, erhält einen IFormFile Parameter von einem HTML-Formular mit enctype="multipart/form-data". Die Aktion liest den Stream in ein MemoryStream, konvertiert ihn in ein Byte-Array und persistiert das Ergebnis durch Entity Framework Core.
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
Überprüfung der hochgeladenen Dateien
Vor der Verarbeitung muss stets der Inhaltstyp überprüft werden. Die Überprüfung von file.ContentType verhindert, dass Benutzer versehentlich Nicht-PDF-Inhalte hochladen. Zur genaueren Überprüfung lesen Sie die ersten vier Bytes des Datenstroms und überprüfen Sie die magische PDF-Zahl (%PDF). Sie sollten auch eine maximale Dateigröße durchsetzen - typischerweise 10 MB für allgemeine Dokumenten-Workflows - indem Sie file.Length vor dem Kopieren des Streams überprüfen.
Das HTML-Formular, das diese Aktion auslöst, benötigt zwei Attribute: method="post" und enctype="multipart/form-data". Ohne Angabe des Kodierungstyps senden Browser den Dateinamen als Klartext anstatt des Binärinhalts. Fügen Sie ein <input type="file" name="file" accept=".pdf" /> Element und einen Submit-Button innerhalb des Form-Tags ein, der auf /Pdf/Upload zeigt.

Wie fügt man einem hochgeladenen PDF vor dem Speichern ein Wasserzeichen hinzu?
Die serverseitige Verarbeitung von Dateien vor der Speicherung ist eine der praktischsten Anwendungen für die Wasserzeichenfunktionen von IronPDF . Sie können jedes eingehende Dokument mit einem "VERTRAULICH"-Etikett, einem Firmenlogo oder einem "ENTWURF"-Hinweis versehen, bevor die Bytes überhaupt die Datenbank erreichen.
[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
Optionen zur Konfiguration des Wasserzeichens
Die ApplyWatermark-Methode von IronPDF akzeptiert eine HTML-Zeichenkette, was bedeutet, dass Ihr Wasserzeichen jedes gültige HTML und Inline-CSS enthalten kann - Farbverläufe, benutzerdefinierte Schriftarten, gedrehten Text oder sogar eingebettete SVG-Symbole. Der Parameter rotation dreht das Wasserzeichen über die Seitendiagonale, während opacity die Transparenz von 0 (unsichtbar) bis 100 (völlig undurchsichtig) steuert.
Neben Wasserzeichen bietet das gleiche PdfDocument-Objekt Methoden für Kopf- und Fußzeilen hinzufügen, Bilder stempeln und Bearbeiten bestehender Formularfelder. Sie können mehrere Verarbeitungsschritte verketten, bevor Sie pdf.BinaryData aufrufen, um das endgültige Byte-Array abzurufen.

Wie lädt man in der Datenbank gespeicherte PDF-Dateien herunter?
Um eine gespeicherte PDF-Datei an den Browser zurückzugeben, rufen Sie den Datensatz anhand der ID ab und geben einen FileResult zurück. Die ASP.NET Core File-Hilfsmethode setzt den korrekten Content-Type-Header und löst den Download-Dialog des Browsers mit dem ursprünglichen Dateinamen aus.
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
Anzeigen einer Downloadliste in der Ansicht
Die Aktion Index ruft alle gespeicherten Dateidatensätze ab und übergibt sie an eine Razor-Ansicht. Eine einfache HTML-Tabelle zeigt für jeden Datensatz den Dateinamen, das Upload-Datum und einen Download-Anker an.
<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>
Die Überladung return File(bytes, contentType, fileName) setzt sowohl Content-Type: application/pdf als auch Content-Disposition: attachment; Dateiname="..." Header. Wenn Sie möchten, dass der Browser die PDF-Datei inline öffnet, anstatt einen Download anzufordern, verwenden Sie return File(bytes, contentType) ohne das dritte Argument - dadurch entfällt die Anweisung Content-Disposition: attachment.

Dateisystemspeicher als Alternative
Bei großen Installationen führt das Speichern von rohen Binärdaten in der Datenbank zu größeren Zeilengrößen und kann Abfragen verlangsamen. Eine Alternative besteht darin, die Datei in ein Verzeichnis auf der Festplatte oder bei einem Cloud-Anbieter zu schreiben und nur den relativen Pfad in der Datenbank zu speichern. Ersetzen Sie FileData byte[] durch FilePath string, schreiben Sie System.IO.File.WriteAllBytesAsync(path, bytes) beim Upload und lesen Sie System.IO.File.ReadAllBytesAsync(path) beim Download. Beide Pfade laufen auf denselben return File(...)-Aufruf im Controller zu.
Wie generiert man PDF-Dokumente auf Abruf und stellt sie zum Download bereit?
Sie sind nicht auf die Bereitstellung vorab gespeicherter Dateien beschränkt. Mit der HTML-zu-PDF-Konvertierung von IronPDF können Sie Dokumente dynamisch aus Daten zum Zeitpunkt der Anfrage generieren – nützlich für Rechnungen, Berichte, Zertifikate und Datenexporte.
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>$749</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>$749</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>$749</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
Rendering-Optionen für On-Demand-PDFs
ChromePdfRenderer erzeugt eine pixelgenaue Ausgabe mit der gleichen Chromium-Rendering-Engine, die auch in Google Chrome zum Einsatz kommt. Das bedeutet, dass jegliches CSS, das Sie in einem Browser anzeigen können – Flexbox-Layouts, Raster, benutzerdefinierte Schriftarten, SVG-Diagramme – im generierten PDF korrekt gerendert wird. Sie können Papiergröße, Ränder und Ausrichtung über die Eigenschaft RenderingOptions einstellen, bevor Sie RenderHtmlAsPdf aufrufen.
Für komplexere Dokumente übergeben Sie bitte eine vollständige URL an RenderUrlAsPdf anstelle eines HTML-Strings. IronPDF lädt die Seite in einem Headless-Browser, führt JavaScript aus, wendet Stile an und konvertiert das vollständig gerenderte DOM in PDF. Im Leitfaden zur HTML-zu-PDF-Konvertierung finden Sie alle Rendering-Optionen, einschließlich benutzerdefinierter Kopf- und Fußzeilen sowie Seitennummerierungs-Tokens.

Wie führt man mehrere PDF-Dateien in ASP.NET Core zusammen?
Über die Bearbeitung einzelner Dateien hinaus kann es erforderlich sein, mehrere hochgeladene Dokumente zu einem einzigen Dokument zusammenzufassen. IronPDFs PDF-Zusammenführungsfunktion akzeptiert eine Liste von PdfDocument-Objekten und gibt eine einzelne zusammengeführte Datei zurück.
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
Seiten aus einer PDF-Datei extrahieren
Für den umgekehrten Vorgang - das Extrahieren einer Teilmenge von Seiten - wird CopyPages verwendet. Laden Sie einen PdfDocument aus den gespeicherten Bytes, rufen Sie source.CopyPages(startIndex, endIndex) mit null-basierten Seitenindizes auf, und geben Sie den resultierenden PdfDocument.BinaryData als FileResult zurück. Dieses Muster eignet sich für Seitenansichtsvorschauen, das Aufteilen von mehrteiligen Berichten oder das Extrahieren einer Titelseite zur Erstellung von Miniaturansichten. Sie können die zusammengeführte oder aufgeteilte Ausgabe auch mit digitalen Signaturen versehen, bevor Sie sie den Benutzern bereitstellen.
Wie handhabt man das Hochladen großer Dateien auf sichere Weise?
Große PDF-Dateien erfordern zusätzliche Konfigurationen auf der ASP.NET Core Middleware-Ebene. Standardmäßig ist die maximale Größe des Anfragetextes auf etwa 28 MB festgelegt. Um sie zu erhöhen, rufen Sie builder.Services.Configure<FormOptions> auf, um MultipartBodyLengthLimit und builder.WebHost.ConfigureKestrel auf Limits.MaxRequestBodySize zu setzen -- beide auf die gewünschte Byteanzahl, wie 50 * 1024 * 1024 für 50 MB -- in Program.cs vor builder.Build().
Abgesehen von den Größenbeschränkungen sollten Sie diese Sicherheitspraktiken auf jeden Upload-Endpunkt anwenden: Validieren Sie den Header des Inhaltstyps, prüfen Sie die ersten Bytes des Datenstroms auf die magische Zahl %PDF, scannen Sie mit der IronPDF-API zur Dokumentenprüfung nach eingebetteten Skripten und speichern Sie verarbeitete Dateien außerhalb des Web-Root, damit sie nie direkt als statische Inhalte bereitgestellt werden. Die Sicherheitsdokumentation von ASP.NET Core umfasst zusätzliche Härtungstechniken, darunter die Validierung von Antifälschungstoken und die Integration von Virenscans.
Streaming großer Dateien zur Vermeidung von Speicherengpässen
Wenn Dateien größer als 10 MB sind, kann das Lesen des gesamten Datenstroms in einen MemoryStream vor der Verarbeitung den Speicherverbrauch erheblich steigern. Verwenden Sie IronPdf.PdfDocument.FromStream, um nach Möglichkeit direkt aus dem Anforderungsstrom zu laden, oder schreiben Sie in einen temporären Dateipfad und laden Sie von der Festplatte:
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)
Dieses Muster hält die Heap-Speicherbelegung gering und eignet sich gut für Hintergrundverarbeitungswarteschlangen, bei denen Dateien asynchron verarbeitet werden, nachdem die HTTP-Antwort bereits gesendet wurde. Weitere Muster für die asynchrone Verarbeitung finden Sie in der IronPDF -Dokumentation .
Was sind Ihre nächsten Schritte?
Sie verfügen nun über eine vollständige Grundlage für das Hochladen, Verarbeiten, Speichern und Herunterladen von PDF-Dateien in einer ASP.NET Core MVC-Anwendung, die auf IronPDF basiert. Berücksichtigen Sie von hier aus die folgenden Anweisungen, um den Arbeitsablauf zu erweitern.
Erweitern Sie die Verarbeitungsmöglichkeiten. IronPDF unterstützt das Ausfüllen und Lesen von PDF-Formularfeldern , das Extrahieren von Text und Bildern mit der PDF-Textextraktions-API sowie das Konvertieren von PDF-Seiten in Bilder für Miniaturansichten. Alle diese Funktionen sind in das oben gezeigte Controller-Muster integriert.
Fügen Sie digitale Signaturen hinzu. Signieren Sie jedes generierte oder hochgeladene Dokument vor dem Speichern mit einer digitalen Signatur unter Verwendung eines X.509-Zertifikats. Signierte PDFs enthalten manipulationssichere Metadaten, die viele Compliance-Anforderungen erfüllen.
Scale storage to the cloud. Ersetzen Sie die lokale byte[] Datenbankspalte durch eine Azure Blob Storage oder Amazon S3 Referenz. Laden Sie die verarbeiteten Bytes nach dem Hinzufügen eines Wasserzeichens in den Cloud-Speicher hoch und speichern Sie nur die URI in der Datenbank – dies reduziert die Größe der Datenbankzeilen drastisch und ermöglicht die CDN-Auslieferung.
Starten Sie eine kostenlose Testphase. Besuchen Sie die IronPDF Testlizenzseite, um einen 30-Tage-Testschlüssel mit vollem Funktionsumfang zu erhalten. Sie können auch die vollständige Funktionsübersicht von IronPDF durchstöbern, um den vollen Umfang der in Ihrer .NET Anwendung verfügbaren PDF-Funktionen zu verstehen, oder die Seite zu Preisen und Lizenzen konsultieren, wenn Sie für die Produktionsbereitstellung bereit sind.
Häufig gestellte Fragen
Wie kann ich PDF-Dateien in eine ASP.NET Core MVC-Anwendung hochladen?
Um PDF-Dateien in eine ASP.NET Core MVC-Anwendung hochzuladen, können Sie die IFormFile-Schnittstelle verwenden, um Dateidaten aus einem Formular zu erfassen und sie dann vor dem Speichern serverseitig zu verarbeiten, möglicherweise mit Hilfe von IronPDF zur weiteren PDF-Bearbeitung.
Wie kann ich PDF-Dateien in ASP.NET am besten herunterladen?
Der beste Weg, PDF-Dateien in ASP.NET herunterzuladen, ist die Verwendung der FileResult-Aktion in Ihrem Controller. IronPDF kann bei der serverseitigen Generierung und Modifizierung von PDFs helfen, um sicherzustellen, dass sie zum Download bereit sind.
Kann ich mit ASP.NET PDF-Dateien in einer Datenbank speichern?
Ja, Sie können PDF-Dateien mit ASP.NET in einer Datenbank speichern, indem Sie die Datei in ein Byte-Array konvertieren und als Binary Large Object (BLOB) speichern. IronPDF kann bei der Verarbeitung der PDF-Datei vor der Speicherung helfen.
Wie hilft IronPDF bei der Erstellung von Wasserzeichen in PDFs in ASP.NET?
IronPDF bietet Funktionen zum einfachen Hinzufügen von Text- oder Bild-Wasserzeichen zu PDFs, die in Ihre ASP.NET-Anwendung integriert werden können, um Dokumente vor dem Herunterladen oder Speichern zu ändern.
Was sind die Vorteile der Verwendung von EF Core für die PDF-Speicherung?
EF Core ermöglicht ein effizientes objektrelationales Mapping, das die strukturierte und skalierbare Verwaltung der Speicherung und des Abrufs von PDF-Dateien in Ihrer ASP.NET-Anwendung erleichtert.
Ist es möglich, PDF-Inhalte in ASP.NET-Anwendungen zu bearbeiten?
Ja, mit IronPDF können Sie PDF-Inhalte manipulieren, einschließlich der Bearbeitung von Text, Bildern und Metadaten, was für die Anpassung von Dokumenten nützlich sein kann, bevor sie den Benutzern zur Verfügung gestellt werden.
Wie kann ich Datei-Uploads in ASP.NET sicher handhaben?
Um Datei-Uploads in ASP.NET sicher zu handhaben, sollten Sie die Dateitypen validieren, die Dateigrößen begrenzen und die Dateien an sicheren Orten speichern. Die Verwendung von Bibliotheken wie IronPDF kann auch dazu beitragen, die Integrität der PDF-Dateien selbst zu gewährleisten.
Was sind die häufigsten Herausforderungen bei der Arbeit mit PDFs in Webanwendungen?
Zu den häufigsten Herausforderungen gehören die Sicherstellung der Dateikompatibilität, die Verwaltung großer Dateigrößen und die Wahrung der Dokumentintegrität. IronPDF hilft, diese Herausforderungen zu meistern, indem es robuste Werkzeuge für die Erstellung und Bearbeitung von PDF-Dateien bereitstellt.
Kann ich in ASP.NET verschiedene Dateitypen in PDF konvertieren?
Ja, IronPDF ermöglicht es Ihnen, verschiedene Dateitypen wie HTML- oder Bilddateien nahtlos in Ihrer ASP.NET-Anwendung in PDFs zu konvertieren.
Welche Rolle spielt der Model-View-Controller (MVC) bei der Verarbeitung von PDFs in ASP.NET?
Das MVC-Muster hilft bei der Organisation des Codes für den Umgang mit PDFs, indem es die Datenverarbeitung (Model), die Benutzeroberfläche (View) und die Anwendungslogik (Controller) voneinander trennt und so die Verwaltung und Erweiterung von PDF-Funktionen erleichtert.




