Wie man PDF-Dateien in .NET Core erzeugt

HTML in PDF in .NET Core mit C# und IronPDF konvertieren

This article was translated from English: Does it need improvement?
Translated
View the article in English

Hochwertige PDFs direkt aus HTML zu generieren, ist eine Routineanforderung in modernen .NET-Anwendungen – Berichte, Rechnungen und Tickets benötigen pixelgenaue Ausgaben, die mit der Web-Oberfläche übereinstimmen. IronPDF rationalisiert diesen Workflow, indem es eine einzige C#-API bereitstellt, um HTML, Razor-Ansichten und vollständige Websites in standardkonforme PDF-Dokumente umzuwandeln. Am Ende dieser Anleitung wird ein Entwickler in der Lage sein, URLs, rohes HTML oder MVC-Ansichten in einem ASP.NET Core-Projekt zu konvertieren und denselben Code auf Windows, Linux, Docker oder serverlosen Umgebungen bereitzustellen.

TippsFür Layoutprobleme liefert IronPDF einen Headless-Chrome-Debugger mit, der CSS-, JavaScript- und Media-Query-Hürden diagnostiziert, bevor das PDF gerendert wird. Überprüfen Sie den speziellen pixelgenauen HTML-zu-PDF-Leitfaden für tiefgehende Techniken.

Schnellstart: Erstellen eines PDFs aus HTML in .NET Core

Mühelos HTML zu PDF in .NET Core mit der IronPDF-Bibliothek konvertieren. Diese Anleitung bietet ein einfaches Beispiel, um Ihnen schnell den Einstieg zu erleichtern, indem Sie HTML-Inhalte mit minimalem Code in ein hochwertiges PDF rendern. Perfekt für Entwickler, die die PDF-Erstellung mühelos in ihre Anwendungen integrieren möchten.

  1. Installieren Sie IronPDF mit NuGet Package Manager

    PM > Install-Package IronPdf
  2. Kopieren Sie diesen Codeausschnitt und führen Sie ihn aus.

    var pdf = new IronPdf.ChromePdfRenderer().RenderHtmlAsPdf("<h1>Hello World</h1>");
  3. Bereitstellen zum Testen in Ihrer Live-Umgebung

    Beginnen Sie noch heute, IronPDF in Ihrem Projekt zu verwenden, mit einer kostenlosen Testversion

    arrow pointer

Schnellstart-Checkliste

  1. InstallInstall-Package IronPdf
  2. EineURLrendernChromePdfRenderer.RenderUrlAsPdf()
  3. Roh-HTML rendernChromePdfRenderer.RenderHtmlAsPdf()
  4. Eine Razor-Ansicht exportierenChromePdfRenderer.RenderHtmlAsPdfAsync()
  5. Output feinabstimmen – nutzen Sie ChromePdfRenderer.RenderingOptions

Was dieses Tutorial abdeckt

  • URL-, HTML-String und Razor-Ansicht-Konvertierung
  • Papier-, Rand- und Medientypkonfiguration
  • Plattformübergreifende Bereitstellung (Windows, Linux, Docker)
  • Nachbearbeitung: Zusammenführen, Wasserzeichen hinzufügen, mit Passwort schützen und PDFs digital signieren
  • End-to-End-Beispiel: MVC-App zur Ticketbuchung

Wie installiere ich die PDF-Bibliothek in .NET Core?

Die Installation der Bibliothek ist eine Einzeiler in jedem .NET 8-Projekt und bleibt vorwärts kompatibel mit .NET 9-Vorschau und dem kommenden .NET 10-Release. Verwenden Sie die Paket-Manager-Konsole von NuGet und der Paketmanager löst jede Abhängigkeit automatisch für Windows, Linux, Docker und serverlose Ziele.

:ProductInstall            # .NET 8 LTS and higher
:ProductInstall            # .NET 8 LTS and higher
SHELL

Hinweis:Benötigen Sie CLI? Der gleiche Befehl funktioniert mit dotnet add package IronPdf innerhalb Ihres Projektordners.

Bestätigen Sie nach der Installation, dass alles funktioniert, indem Sie eine öffentlicheURLin PDF konvertieren:

:path=/static-assets/pdf/content-code-examples/tutorials/dotnet-core-pdf-generating-3.cs
public class ClientModel
{
    [Required]
    public string Name { get; set; }
    [Required]
    public string Phone { get; set; }
    [Required]
    public string Email { get; set; }
}
Public Class ClientModel
	<Required>
	Public Property Name() As String
	<Required>
	Public Property Phone() As String
	<Required>
	Public Property Email() As String
End Class
$vbLabelText   $csharpLabel

Wie es funktioniert

  • ChromePdfRenderer startet eine sandboxed Chromium-Instanz im Hintergrund—eine separate Chrome-Installation ist nicht erforderlich.
  • RenderUrlAsPdf erfasst den vollständig gerenderten DOM, einschließlich JavaScript-gesteuerter Inhalte, CSS-Media-Queries und Schriften.
  • Das resultierende PdfDocument bietet Hilfsmethoden zum Zusammenführen, Passwortschutz oder digitalen Signieren des Outputs—die Möglichkeiten werden später in diesem Tutorial behandelt.

Für mehr Details zu Bereitstellungsnuancen (Azure App Service, AWS Lambda, On-Premise Linux), siehe den speziellen Installationsleitfaden und die erweiterte NuGet-Setup-Seiten. Interne CI/CD-Tipps für Docker und K8s-Cluster werden in den Best Practices für Docker-Bereitstellungen behandelt.


Wie kann ein .NET Core-Dienst eine Live-Website-URL in PDF umwandeln?

Ein einzelner Aufruf von RenderUrlAsPdf genügt: Übergeben Sie eine öffentlich erreichbare URL, und IronPDF gibt ein vollständig gerendertes, standardkonformes PDF zurück. Der unten stehende Code zielt auf .NET 8 LTS ab und kompiliert unverändert auf .NET 9-Vorschau sowie das kommende .NET 10-Release im Jahr 2025.

Schritt-für-Schritt-Beispiel

:path=/static-assets/pdf/content-code-examples/tutorials/dotnet-core-pdf-generating-4.cs
public class ClientServices
{
    private static ClientModel _clientModel;
    public static void AddClient(ClientModel clientModel)
    {
        _clientModel = clientModel;
    }
    public static ClientModel GetClient()
    {
        return _clientModel;
    }
}
Public Class ClientServices
	Private Shared _clientModel As ClientModel
	Public Shared Sub AddClient(ByVal clientModel As ClientModel)
		_clientModel = clientModel
	End Sub
	Public Shared Function GetClient() As ClientModel
		Return _clientModel
	End Function
End Class
$vbLabelText   $csharpLabel

Warum es funktioniert

  • ChromePdfRenderer startet eine sandboxed Chromium-Instanz—keine System-Chrome-Abhängigkeit, damit Docker-Images schlank bleiben.
  • RenderUrlAsPdf wartet darauf, dass DOM und JavaScript fertig sind, bevor ein Snapshot erstellt wird, sodass Single-Page-Anwendungen korrekt gerendert werden.
  • Das Setzen von CssMediaType auf Print weist die Engine an, druckspezifische Regeln zu verwenden, die der Print → Save as PDF-Ausgabe eines Browsers entsprechen.
  • Das resultierende PdfDocument kann verschlüsselt, digital signiert, zusammengeführt oder rasterisiert werden—die Fähigkeiten werden in späteren Abschnitten behandelt.

TippsPixelgenaues Debugging: Aktivieren Sie renderer.LoggingOptions.DebugMode = true und folgen Sie der Headless Chrome-Debug-Anleitung, um die DevTools während des Renderings live zu inspizieren.

Verwandte Ressourcen

-API-Referenz– ChromePdfRenderer.RenderUrlAsPdf -API-Referenz– PdfDocument.SaveAs


Wie kann ich rohes HTML in .NET Core in ein PDF konvertieren?

Die Übergabe eines HTML-Strings—oder des gerenderten Markups einer Razor-Ansicht—an ChromePdfRenderer.RenderHtmlAsPdf erzeugt sofort ein standardkonformes PDF. Die Methode startet IronPDFs eingebettete Chromium-Engine, sodass keine externe Browser-Installation oder WebView-Abhängigkeit erforderlich ist. Der unten gezeigte Code kompiliert heute auf .NET 8 LTS und bleibt vorwärts kompatibel mit .NET 9 und dem angesetzten .NET 10-Release im November 2025.

Beispiel — ein PDF aus einem HTML-Fragment generieren

:path=/static-assets/pdf/content-code-examples/tutorials/dotnet-core-pdf-generating-5.cs
@model IronPdfMVCHelloWorld.Models.ClientModel
@{
  ViewBag.Title = "Book Ticket";
}
<h2>Index</h2>
@using (Html.BeginForm())
{
  <div class="form-horizontal">
    @Html.ValidationSummary(true, "", new { @class = "text-danger" })
    <div class="form-group">
      @Html.LabelFor(model => model.Name, htmlAttributes: new { @class = "control-label col-md-2" })
      <div class="col-md-10">
        @Html.EditorFor(model => model.Name, new { htmlAttributes = new { @class = "form-control" } })
        @Html.ValidationMessageFor(model => model.Name, "", new { @class = "text-danger" })
      </div>
    </div>
    <div class="form-group">
      @Html.LabelFor(model => model.Phone, htmlAttributes: new { @class = "control-label col-md-2" })
      <div class="col-md-10">
        @Html.EditorFor(model => model.Phone, new { htmlAttributes = new { @class = "form-control" } })
        @Html.ValidationMessageFor(model => model.Phone, "", new { @class = "text-danger" })
      </div>
    </div>
    <div class="form-group">
      @Html.LabelFor(model => model.Email, htmlAttributes: new { @class = "control-label col-md-2" })
      <div class="col-md-10">
        @Html.EditorFor(model => model.Email, new { htmlAttributes = new { @class = "form-control" } })
        @Html.ValidationMessageFor(model => model.Email, "", new { @class = "text-danger" })
      </div>
    </div>
    <div class="form-group">
      <div class="col-md-10 pull-right">
        <button type="submit" value="Save" class="btn btn-sm">
          <i class="fa fa-plus"></i>
          <span>
            Save
          </span>
        </button>
      </div>
    </div>
  </div>
}
model ReadOnly Property () As IronPdfMVCHelloWorld.Models.ClientModel
  ViewBag.Title = "Book Ticket"
End Property
'INSTANT VB TODO TASK: The following line could not be converted:
(Of h2) Index</h2> [using](Html.BeginForm())
If True Then
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'  <div class="form-horizontal"> @Html.ValidationSummary(True, "", New { @class = "text-danger" }) <div class="form-group"> @Html.LabelFor(model => model.Name, htmlAttributes: New { @class = "control-label col-md-2" }) <div class="col-md-10"> @Html.EditorFor(model => model.Name, New { htmlAttributes = New { @class = "form-control" } }) @Html.ValidationMessageFor(model => model.Name, "", New { @class = "text-danger" }) </div> </div> <div class="form-group"> @Html.LabelFor(model => model.Phone, htmlAttributes: New { @class = "control-label col-md-2" }) <div class="col-md-10"> @Html.EditorFor(model => model.Phone, New { htmlAttributes = New { @class = "form-control" } }) @Html.ValidationMessageFor(model => model.Phone, "", New { @class = "text-danger" }) </div> </div> <div class="form-group"> @Html.LabelFor(model => model.Email, htmlAttributes: New { @class = "control-label col-md-2" }) <div class="col-md-10"> @Html.EditorFor(model => model.Email, New { htmlAttributes = New { @class = "form-control" } }) @Html.ValidationMessageFor(model => model.Email, "", New { @class = "text-danger" }) </div> </div> <div class="form-group"> <div class="col-md-10 pull-right"> <button type="submit" value="Save" class="btn btn-sm"> <i class="fa fa-plus"></i> <span> Save </span> </button> </div> </div> </div> }
$vbLabelText   $csharpLabel

Was der Code demonstriert

  • Eingebettetes Chromium — IronPDF bündelt die Chromium-Engine und garantiert HTML5-, CSS3- und JavaScript-Parität mit modernen Browsern.
  • Einzelne Abhängigkeit — Eine leichte NuGet-Installation deckt Windows, Linux, Docker und Azure/AWS ab, ohne zusätzliche Systembibliotheken.
  • Render-OptionenPaperSize, CssMediaType, und RenderDelay spiegeln die Druckeinstellungen eines Browsers wider, damit PDFs den Bildschirm-Layouts entsprechen.
  • Zukunftssicheres Targeting — Die API-Oberfläche ist identisch für .NET 8, .NET 9 STS und das kommende .NET 10, sodass langfristige Wartung minimal ist.
  • Post-Processing-HooksPdfDocument bietet Helfer für Zusammenführen, Passwortschutz und digitale Signaturen—jeweils später in diesem Leitfaden behandelt.

Weiterführende Lektüre: Sehen Sie sich das Schritt-für-Schritt-HTML-String-zu-PDF-Tutorial und die vollständige ChromePdfRenderer API-Dokumentation an.


Wie kann eine ASP .NET Core MVC-Ansicht in PDF exportiert werden?

IronPDF rendert eine vollverarbeitete Razor-Ansicht ( .cshtml ) auf die gleiche Weise, wie es ein Browser tun würde, und streamt das Ergebnis als PdfDocument. Der folgende Workflow hält die Controller-Logik sauber, erfordert keine Browser-Plugins und funktioniert in .NET 8 LTS, .NET 9-Vorschau und dem angesetzten .NET 10-Release im November 2025.

End-to-End-Controller-Beispiel

// TicketsController.cs — .NET 8 LTS / MVC
using IronPdf;
using Microsoft.AspNetCore.Mvc;
using YourApp.Models;           // TicketViewModel

public class TicketsController : Controller
{
    private readonly ChromePdfRenderer _renderer;

    public TicketsController()
    {
        _renderer = new ChromePdfRenderer
        {
            RenderingOptions =
            {
                PaperSize        = PdfPaperSize.A5,            // Compact ticket size
                PaperOrientation = PdfPdfOrientation.Portrait,
                FitToPaperWidth  = true,
                CssMediaType     = PdfCssMediaType.Print,
                Margins = new PdfMargins(5, 10, 5, 10)         // mm
            }
        };
    }

    // GET /Tickets/Print/42
    public async Task<IActionResult> Print(int id)
    {
        TicketViewModel vm = await _service.GetTicketAsync(id);

        // 1. Render the Razor view to an HTML string
        string html  = await RazorTemplateEngine.RenderViewAsync(
                           HttpContext, "~/Views/Tickets/Print.cshtml", vm);

        // 2. Convert HTML → PDF
        using PdfDocument pdf = _renderer.RenderHtmlAsPdf(html);

        // 3. Stream back as a file
        return File(pdf.BinaryData, "application/pdf",
                    $"ticket-{id}.pdf");
    }
}
// TicketsController.cs — .NET 8 LTS / MVC
using IronPdf;
using Microsoft.AspNetCore.Mvc;
using YourApp.Models;           // TicketViewModel

public class TicketsController : Controller
{
    private readonly ChromePdfRenderer _renderer;

    public TicketsController()
    {
        _renderer = new ChromePdfRenderer
        {
            RenderingOptions =
            {
                PaperSize        = PdfPaperSize.A5,            // Compact ticket size
                PaperOrientation = PdfPdfOrientation.Portrait,
                FitToPaperWidth  = true,
                CssMediaType     = PdfCssMediaType.Print,
                Margins = new PdfMargins(5, 10, 5, 10)         // mm
            }
        };
    }

    // GET /Tickets/Print/42
    public async Task<IActionResult> Print(int id)
    {
        TicketViewModel vm = await _service.GetTicketAsync(id);

        // 1. Render the Razor view to an HTML string
        string html  = await RazorTemplateEngine.RenderViewAsync(
                           HttpContext, "~/Views/Tickets/Print.cshtml", vm);

        // 2. Convert HTML → PDF
        using PdfDocument pdf = _renderer.RenderHtmlAsPdf(html);

        // 3. Stream back as a file
        return File(pdf.BinaryData, "application/pdf",
                    $"ticket-{id}.pdf");
    }
}
Imports IronPdf
Imports Microsoft.AspNetCore.Mvc
Imports YourApp.Models ' TicketViewModel

Public Class TicketsController
    Inherits Controller

    Private ReadOnly _renderer As ChromePdfRenderer

    Public Sub New()
        _renderer = New ChromePdfRenderer With {
            .RenderingOptions = New PdfRenderingOptions With {
                .PaperSize = PdfPaperSize.A5, ' Compact ticket size
                .PaperOrientation = PdfPdfOrientation.Portrait,
                .FitToPaperWidth = True,
                .CssMediaType = PdfCssMediaType.Print,
                .Margins = New PdfMargins(5, 10, 5, 10) ' mm
            }
        }
    End Sub

    ' GET /Tickets/Print/42
    Public Async Function Print(id As Integer) As Task(Of IActionResult)
        Dim vm As TicketViewModel = Await _service.GetTicketAsync(id)

        ' 1. Render the Razor view to an HTML string
        Dim html As String = Await RazorTemplateEngine.RenderViewAsync(
            HttpContext, "~/Views/Tickets/Print.cshtml", vm)

        ' 2. Convert HTML → PDF
        Using pdf As PdfDocument = _renderer.RenderHtmlAsPdf(html)
            ' 3. Stream back as a file
            Return File(pdf.BinaryData, "application/pdf", $"ticket-{id}.pdf")
        End Using
    End Function
End Class
$vbLabelText   $csharpLabel

Was dieser Code illustriert

  • Keine temporären Dateien — die Razor-Ansicht wird im Speicher gerendert und dann direkt an RenderHtmlAsPdf übergeben, wodurch Festplatten-I/O und Temp-Ordner-Rennen vermieden werden.
  • Ticketgroßes ErgebnisPaperSize = A5 und schmale Ränder halten Heimdruck-Tickets kompakt.
  • Konsistente DruckstileCssMediaType = Print wendet die gleichen @media print CSS-Regeln an, die Browser verwenden.
  • Binär-Streamingpdf.BinaryData streamt das Dokument, ohne das Dateisystem zu berühren; ideal für API-Endpunkte und Lambda-Funktionen.
  • Wiederverwendbarer RendererChromePdfRenderer wird einmal pro Controller instanziiert und dann wiederverwendet, wodurch der Overhead beim Prozessstart minimiert wird.

PaperSize , PaperOrientation , FitToPaperWidth

Margins , Header , Footer , Watermark

Nächster Schritt: Fügen Sie Verschlüsselung, digitale Signaturen hinzu oder fügen Sie mehrere Tickets in einer Datei zusammen. Siehe das Zusammenführungsbeispiel und das Digitalsignatur-How-To.


Icon Quote related to Was dieser Code illustriert

Meine Lieblingsbibliothek dieser Art ist IronPDF. Es ermöglicht eine schnelle und effiziente Bearbeitung von PDF-Dateien. Es verfügt auch über viele wertvolle Funktionen, wie das Exportieren in das PDF/A-Format und das digitale Signieren von PDF-Dokumenten.

Milan Jovanovic related to Was dieser Code illustriert

Milan Jovanovic

Microsoft MVP

Fallstudie ansehen
Icon Quote related to Was dieser Code illustriert

IronOCR bedeutet, dass wir jährlich 40.000 $ durch manuelle Verarbeitung einsparen können, während die Produktivität gesteigert wird und Ressourcen für wichtige Aufgaben freigesetzt werden. Ich würde es sehr empfehlen.

Brent Matzelle related to Was dieser Code illustriert

Brent Matzelle

Technischer Leiter, OPYN

Fallstudie ansehen
Icon Quote related to Was dieser Code illustriert

Die Iron Suite spielt eine entscheidende Rolle in unseren Operationen. Diese Werkzeuge erhöhen die Effizienz im gesamten Unternehmen, einschließlich der Erstellung von Grundrissen und der Verbesserung des Bestandsmanagements.

David Jones related to Was dieser Code illustriert

David Jones

Leitender Software-Ingenieur, Agorus Build

Fallstudie ansehen

Wie kann ich Papiergröße, Ränder, Kopfzeilen, Wasserzeichen und Sicherheit vor dem Rendern anpassen?

IronPDF stellt ein einzelnes ChromePdfRenderOptions Objekt zur Verfügung, das jeden Aspekt des Outputs steuert—Papierabmessungen, Orientierung, Kopf- und Fußzeilen, JavaScript-Zeitsteuerung, Wasserzeichen, Verschlüsselung und digitale Signaturen—alles ohne zusätzliche Browser-Plugins.

Codebeispiel – Wenden Sie mehrere Optionen gleichzeitig an

:path=/static-assets/pdf/content-code-examples/tutorials/dotnet-core-pdf-generating-7.cs
[HttpPost]
public ActionResult Index(ClientModel model)
{
    if (ModelState.IsValid)
    {
        ClientServices.AddClient(model);
        return RedirectToAction("TicketView");
    }
  return View(model);
}
<HttpPost>
Public Function Index(ByVal model As ClientModel) As ActionResult
	If ModelState.IsValid Then
		ClientServices.AddClient(model)
		Return RedirectToAction("TicketView")
	End If
  Return View(model)
End Function
$vbLabelText   $csharpLabel

Warum diese Optionen wichtig sind

  • PaperSize, Margins, und CssMediaType spiegeln den Druckdialog eines Browsers wider, sodass Bildschirm-Layouts und das PDF auf Windows, Linux und Docker identisch bleiben.
  • HTML-Kopf- und Fußzeilen unterstützen Razor-Token, CSS und JavaScript – praktisch für dynamische Seitennummern oder Branding.
  • HtmlStamp ermöglicht es, mit einer einzelnen Zeile gebrandete Wasserzeichen mit vollständiger HTML + CSS-Kontrolle zu erstellen.
  • Sicherheitsoptionen ermöglichen 128-Bit-Verschlüsselung, Besitzer-/Benutzerpasswörter und granulare Berechtigungen ohne Drittanbieter-Tools.
  • Digitale Signaturen fügen einen kryptografischen Siegel direkt im Code hinzu und bewahren die rechtliche Authentizität und Manipulationsbeweise.
  • Extraktionshelfer wie ExtractAllText und ExtractAllImages kehren den Prozess um, wenn eine Analyse erforderlich ist.

Schnellreferenz — Beliebte Einstellungen

##

PaperSize , PaperOrientation , Margins , CssMediaType , RenderDelay

##

`HtmlHeader`, `HtmlFooter`, dynamische Razor-Platzhalter, Seitenzahl-Token

##

`Wasserzeichen`, `HtmlStamp`, Deckkraft, Ausrichtung

##

`SecurityOptions`, `SignAndStamp`, Eigentümer-/Benutzerpasswörter, Zertifikatsversiegelung

Nächste Aufgaben: Mehrere PDFs zusammenführen, Text & Bilder extrahieren und an Docker oder serverlos bereitstellen. Fahren Sie mit dem Bereitstellungsabschnitt fort, um plattformübergreifende Kompatibilität sicherzustellen.


Wie kann ich PDF-Erstellungscode in Docker unter Linux und Windows bereitstellen?

IronPdf wird als einzelnes eigenständiges NuGet-Paket geliefert, sodass die Containerisierung einer ASP.NET Core-(oder Konsolen-)App auf sowohl Windows als auch Linux unkompliziert ist. Der Schlüssel besteht darin, die veröffentlichten Binärdateien in ein schlankes Laufzeit-Image zu kopieren und, unter Linux, die beiden nativen Bibliotheken hinzuzufügen, die IronPDF benötigt (libnss3 und libatk1.0-0).

Multi-Stage-Dockerfile (Ubuntu 22.04)

Hinweis:Warum Multi-Stage? Das SDK-Image (Stufe 1) kompiliert das Projekt; das finale Laufzeit-Image (Stufe 2) bleibt schlank – < 120 MB – weil Build-Tools verworfen werden.

####### ---------- stage 1 ----------
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
WORKDIR /src
COPY ["MyPdfApp.csproj", "."]
RUN dotnet restore

COPY . .
RUN dotnet publish -c Release -o /app/publish

####### ---------- stage 2 ----------
FROM mcr.microsoft.com/dotnet/aspnet:8.0-jammy
######## Install two native libs required by Chromium
RUN apt-get update && \
    apt-get install -y --no-install-recommends libnss3 libatk1.0-0 && \
    rm -rf /var/lib/apt/lists/*

WORKDIR /app
COPY --from=build /app/publish .
ENTRYPOINT ["dotnet", "MyPdfApp.dll"]

Hinweis:Windows-Container? Ersetzen Sie die zweite Stufe durch mcr.microsoft.com/dotnet/aspnet:8.0-windowsservercore-ltsc2022—es sind keine zusätzlichen Pakete erforderlich, da Chromium-DLLs gebündelt sind.

End-to-End-Validierungsskript

docker build -t pdf-demo .
docker run --rm -p 8080:80 pdf-demo
######### ↳ Navigate to http://localhost:8080/api/pdf?url=https://example.com
docker build -t pdf-demo .
docker run --rm -p 8080:80 pdf-demo
######### ↳ Navigate to http://localhost:8080/api/pdf?url=https://example.com
SHELL
  • Die API-Aktion ruft intern ChromePdfRenderer.RenderUrlAsPdf auf, genau wie in Abschnitt 2.
  • IronPDF startet seinen sandboxed Chromium-Prozess im Container – kein X-Server erforderlich, da es im Headless-Modus rendert.
  • Der Speicherbedarf bleibt auch bei großen Renderings unter 200 MB.

TippsFehlerbehebungstipp: Wenn die Containerprotokolle einen "libnss3.so nicht gefunden"-Fehler anzeigen, stellen Sie sicher, dass sowohl libnss3 als auch libatk1.0-0 vorhanden sind. Alpine-Images werden nicht unterstützt, da die musl C-Bibliothek erforderliche Symbole fehlt.

Interne Ressourcen


Wie kann ich bestehende PDFs in .NET Core öffnen, zusammenführen, mit Wasserzeichen versehen und Inhalte extrahieren?

IronPDF behandelt jedes PDF—egal ob von IronPDF, Adobe® Acrobat oder Drittanbietertools generiert—als ein erstklassiges PdfDocument Objekt, das geöffnet, bearbeitet, gesichert und ohne Qualitätsverlust erneut gespeichert werden kann. Die gleiche API-Oberfläche funktioniert heute unter .NET 8 LTS und lässt sich unverändert mit .NET 9 Preview und der kommenden .NET 10-Version kompilieren.

Einheitliches Beispiel — öffnen → zusammenführen → Wasserzeichen → extrahieren

:path=/static-assets/pdf/content-code-examples/tutorials/dotnet-core-pdf-generating-10.cs
[HttpPost]
public ActionResult TicketView(TicketModel model)
{
    IronPdf.Installation.TempFolderPath = $@"{Directory.GetParent}/irontemp/";
    IronPdf.Installation.LinuxAndDockerDependenciesAutoConfig = true;
    var html = this.RenderViewAsync("_TicketPdf", model);
    var renderer = new IronPdf.ChromePdfRenderer();
    using var pdf = renderer.RenderHtmlAsPdf(html.Result, @"wwwroot/css");
    return File(pdf.Stream.ToArray(), "application/pdf");
}
<HttpPost>
Public Function TicketView(ByVal model As TicketModel) As ActionResult
	IronPdf.Installation.TempFolderPath = $"{AddressOf Directory.GetParent}/irontemp/"
	IronPdf.Installation.LinuxAndDockerDependenciesAutoConfig = True
	Dim html = Me.RenderViewAsync("_TicketPdf", model)
	Dim renderer = New IronPdf.ChromePdfRenderer()
	Dim pdf = renderer.RenderHtmlAsPdf(html.Result, "wwwroot/css")
	Return File(pdf.Stream.ToArray(), "application/pdf")
End Function
$vbLabelText   $csharpLabel

Warum das wichtig ist

  • Öffnen & ZusammenführenPdfDocument.FromFile lädt jedes standardkonforme PDF, inklusive verschlüsselter Dateien, während PdfDocument.Merge eine beliebige Anzahl von Dokumenten in einem einzigen Aufruf zusammenfügt.
  • WasserzeichenApplyStamp (alias HtmlStamp) bettet vollständig gestylte HTML/CSS-Overlays—Logo, QR-Code oder diagonaler Text—auf ausgewählten Seiten ein, ohne Rasterung.
  • InhaltsextraktionExtractAllText und ExtractAllImages ziehen rohen UTF-8-Text oder binäre Bildströme für die Downstream-Archivierung oder AI-Pipelines.
  • Digitale Signaturen bereit – die gleiche PdfDocument Instanz kann mit SignAndStamp versiegelt werden, was RFC 3161-konforme Hashes erzeugt, die mit den ISO 32000-2-Digitalsignaturanforderungen übereinstimmen.
  • Off-Standard-Konformität – IronPDF behält die ursprüngliche PDF-Struktur (Schriften, Ebenen, XMP-Metadaten) bei, sodass die Ausgabe mit Adobe® Reader und anderen ISO 32000-1 Betrachtern kompatibel bleibt.
  • Zukunftssicher – Die API vermeidet Interop-Assemblies und Win32-GDI-Aufrufe, sodass der Code unverändert auf Windows, Linux, Docker und kommenden .NET 10-serverlosen SKUs läuft.

Benötigen Sie Seitenaufteilung, Drehen oder Löschen? Siehe das seitenspezifische Bearbeitungs-Tutorial für granulare Operationen.


Wie können PDFs in .NET Core verschlüsselt und digital signiert werden?

IronPDF sichert ein Dokument in zwei Schritten: AES-basierte Verschlüsselung (Benutzer-/Besitzerpasswörter + granulare Berechtigungen) und X.509 digitale Signaturen, die die Datei mit einem kryptografischen Hash versiegeln. Beide APIs leben auf demselben PdfDocument Objekt, daher ist der Workflow heute auf .NET 8 LTS identisch und kompiliert unverändert auf .NET 9-Vorschau und dem kommenden .NET 10-Release.

Beispiel — 256-Bit-AES anwenden, Druckrechte sperren und eine sichtbare Signatur hinzufügen

:path=/static-assets/pdf/content-code-examples/tutorials/dotnet-core-pdf-generating-11.cs
using System.IO;
using System.Threading.Tasks;

public static class ControllerExtensions
{
    public static async Task<string> RenderViewAsync<TModel>(this Controller controller, string viewName, TModel model, bool partial = false)
    {
        if (string.IsNullOrEmpty(viewName))
        {
            viewName = controller.ControllerContext.ActionDescriptor.ActionName;
        }
        controller.ViewData.Model = model;
        using (var writer = new StringWriter())
        {
            IViewEngine viewEngine = controller.HttpContext.RequestServices.GetService(typeof(ICompositeViewEngine)) as ICompositeViewEngine;
            ViewEngineResult viewResult = viewEngine.FindView(controller.ControllerContext, viewName, !partial);
            if (viewResult.Success == false)
            {
                return $"A view with the name {viewName} could not be found";
            }
            ViewContext viewContext = new ViewContext(controller.ControllerContext, viewResult.View, controller.ViewData, controller.TempData, writer, new HtmlHelperOptions());
            await viewResult.View.RenderAsync(viewContext);
            return writer.GetStringBuilder().ToString();
        }
    }
}
Imports System.IO
Imports System.Threading.Tasks

Public Module ControllerExtensions
	<System.Runtime.CompilerServices.Extension> _
	Public Async Function RenderViewAsync(Of TModel)(ByVal controller As Controller, ByVal viewName As String, ByVal model As TModel, Optional ByVal As Boolean = False) As Task(Of String)
		If String.IsNullOrEmpty(viewName) Then
			viewName = controller.ControllerContext.ActionDescriptor.ActionName
		End If
		controller.ViewData.Model = model
		Using writer = New StringWriter()
			Dim viewEngine As IViewEngine = TryCast(controller.HttpContext.RequestServices.GetService(GetType(ICompositeViewEngine)), ICompositeViewEngine)
			Dim viewResult As ViewEngineResult = viewEngine.FindView(controller.ControllerContext, viewName, Not partial)
			If viewResult.Success = False Then
				Return $"A view with the name {viewName} could not be found"
			End If
			Dim viewContext As New ViewContext(controller.ControllerContext, viewResult.View, controller.ViewData, controller.TempData, writer, New HtmlHelperOptions())
			Await viewResult.View.RenderAsync(viewContext)
			Return writer.GetStringBuilder().ToString()
		End Using
	End Function
End Module
$vbLabelText   $csharpLabel

Hinter den Kulissen

  • AES-256-Verschlüsselung — IronPDF umschließt die Nutzlast mit NIST-geprüften AES-Schlüsseln und blockiert nicht autorisiertes Öffnen, Drucken oder Kopieren.
  • Berechtigungsgranularität — Eigenschaften wie AllowUserPrinting und AllowUserFormData schalten die Rechte pro Aktion um; ein Besitzerpasswort ist erforderlich, damit eine Einschränkung wirksam wird.
  • Digitale SignaturenSignAndStamp bettet einen RFC 3161-Zeitstempel und eine Zertifikatskette ein, wodurch manipulationssichere Hashes entsteht, die von Adobe® Acrobat und anderen ISO 32000-2-Viewern erkannt werden.
  • All-in-One-API — sowohl Verschlüsselung als auch Signieren ändern die gleiche PdfDocument Instanz, vermeiden mehrere Dateidurchläufe und bewahren interne Schriften, Ebenen und Metadaten.

TippsFehlerbehebungstipp: wenn Adobe Reader "ungültige Signatur" meldet, stellen Sie sicher, dass die PFX ein vertrauenswürdiges Stammzertifikat enthält und die location Strings ASCII-clean sind.

Kern-Sicherheitseinstellungen

##

`PdfSecuritySettings` → `OwnerPassword` , `UserPassword` , `EncryptionAlgorithm` , `AllowUserPrinting`

##

`PdfDocument.SignAndStamp` - PFX Pfad, Autorität, Ort, Grund, Zeitstempel

Interne Ressourcen für tiefere Einblicke


Wie kann die HTML-zu-PDF-Leistung in .NET Core optimiert und skaliert werden?

IronPDFs Chromium-Engine rendert die meisten Seiten bereits in < 1 s auf moderner Hardware, aber der Durchsatz kann durch Batch-Verarbeitung, Aktivierung von Multithreading und Reduzierung des Headless Chrome-Overheads vervielfacht werden. Die folgenden Tipps gelten gleichermaßen für alle .NET-Versionen.

1. Batch-Rendern in einem Hintergrund-Thread-Pool

:path=/static-assets/pdf/content-code-examples/tutorials/dotnet-core-pdf-generating-12.cs
IronPdf.License.LicenseKey = "YourLicenseKey";
ChromePdfRenderer renderer = new ChromePdfRenderer();

// Set rendering options
renderer.RenderingOptions.PaperSize = IronPdf.Rendering.PdfPaperSize.A4;
renderer.RenderingOptions.PaperOrientation = IronPdf.Rendering.PdfPaperOrientation.Portrait;

renderer.RenderHtmlFileAsPdf(@"testFile.html").SaveAs("GeneratedFile.pdf");
Imports IronPdf

License.LicenseKey = "YourLicenseKey"
Dim renderer As New ChromePdfRenderer()

' Set rendering options
renderer.RenderingOptions.PaperSize = Rendering.PdfPaperSize.A4
renderer.RenderingOptions.PaperOrientation = Rendering.PdfPaperOrientation.Portrait

renderer.RenderHtmlFileAsPdf("testFile.html").SaveAs("GeneratedFile.pdf")
$vbLabelText   $csharpLabel

2. Startkosten für Headless Chrome reduzieren

IronPDF liefert sein eigenes Chromium-Build, aber jeder Render verursacht eine kleine Startsteuer. Pooling hilft, und Linux-Container müssen zwei native libs enthalten:

RUN apt-get update && \
    apt-get install -y --no-install-recommends libnss3 libatk1.0-0

Das Fehlen einer der Bibliotheken manifestiert sich als libnss3.so not found Fehler in den Docker-Protokollen.

Empfohlene Chrome-Flags (automatisch von IronPDF angewendet) beinhalten --disable-gpu und --no-sandbox, um Speicher- und Root-User-Probleme in Containern zu reduzieren.

3. Warten Sie auf spätes JavaScript mit RenderDelay oder WaitFor

Seiten, die Zähler animieren oder Daten nach DOMContentLoaded abrufen, benötigen möglicherweise eine kurze Verzögerung:

renderer.RenderingOptions.RenderDelay = 200;        // ms
// OR: renderer.RenderingOptions.JavaScript = "WaitFor('window.doneLoading')";
renderer.RenderingOptions.RenderDelay = 200;        // ms
// OR: renderer.RenderingOptions.JavaScript = "WaitFor('window.doneLoading')";
renderer.RenderingOptions.RenderDelay = 200 ' ms
' OR: renderer.RenderingOptions.JavaScript = "WaitFor('window.doneLoading')";
$vbLabelText   $csharpLabel

Siehe das dedizierte WaitFor-Tutorial für benutzerdefinierte Versprechen und DOM-Abfragen.

4. Debug-Logging für eine Anfrage aktivieren

:path=/static-assets/pdf/content-code-examples/tutorials/dotnet-core-pdf-generating-15.cs
IronPdf.License.LicenseKey = "YourLicenseKey";
PdfDocument pdf = PdfDocument.FromFile("1.pdf");
PdfDocument pdf2 = PdfDocument.FromFile("2.pdf");
pdf.AppendPdf(pdf2);
pdf.SaveAs("appendedFile.pdf");
IronPdf.License.LicenseKey = "YourLicenseKey"
Dim pdf As PdfDocument = PdfDocument.FromFile("1.pdf")
Dim pdf2 As PdfDocument = PdfDocument.FromFile("2.pdf")
pdf.AppendPdf(pdf2)
pdf.SaveAs("appendedFile.pdf")
$vbLabelText   $csharpLabel

Live DevTools-Spuren zeigen fehlende Schriftarten, 404-Bilder und Zeitsereignisse ohne erneutes Kompilieren des Codes.

5. PDF-Vorlagen wiederverwenden anstatt neu zu rendern

Für Rechnungsdurchläufe, erstellen Sie ein Vorlagen-PDF mit Platzhaltern wie [[name]] und führen Sie einen Textaustausch durch, anstatt komplexes HTML neu zu erstellen. Es ist 10× schneller und speicherschonend.

Schnellabstimmungs-Checkliste

##

`Parallel.ForEach`, `async/await`, Wiederverwendung eines einzelnen `ChromePdfRenderer`

##

Verwenden Sie `aspnet:8.0-jammy`; installieren Sie `libnss3` + `libatk1.0-0`; Flags `--no-sandbox`, `--disable-gpu`

##

`RenderDelay`, `WaitFor()`, log DevTools Zeitleiste für langsame SPA-Hydrationen

Weiterführende Lektüre


Wo kann ich eine kostenlose Testversion herunterladen, eine Lizenz auswählen und Expertenunterstützung finden?

Ein 30-tägiger Testschlüssel wird sofort über das Start Free Trial-Formular ausgegeben und schaltet alle Funktionen frei, einschließlich HTML-zu-PDF, digitale Signaturen und Verschlüsselung, ohne Wasserzeichen.

Nach der Bewertung der Bibliothek wählen Sie eine unbefristete Entwickler-, Bereitstellungs- oder Unternehmens-Lizenz; jeder Plan beinhaltet kostenlose kleinere Updates, Nutzungsrechte für Entwicklung/Test/Produktion und eine 30-tägige Geld-zurück-Garantie. Das Anwenden des Schlüssels ist eine einzelne Codezeile (IronPdf.License.LicenseKey = "YOUR-KEY";) und kann in CI/CD-Pipelines automatisiert werden.

Umfassende Dokumentation—Schnellstart-Anleitungen, API-Referenz und Tutorial-Videos—stehen im Dokumentationsportal zur Verfügung und werden für jede .NET-Version aktualisiert.

Ingenieurfragen erhalten eine Antwort innerhalb eines Geschäftstages via Live-Chat, E-Mail oder Telefon vom in Chicago ansässigen Support-Team.

Leistungsoptimierung und Bereitstellungs-FAQs sind im Performance Assistance Centre zusammengefasst.

Ressource URL Warum es wichtig ist
Erhalten Sie einen 30-tägigen Testschlüssel https://ironpdf.com/demos/ Schaltet alle Funktionen ohne Wasserzeichen frei
Lizenzierung & Preisgestaltung https://ironpdf.com/licensing/ Unbefristete oder Abonnementpläne; Iron Suite bündelt 10 Bibliotheken
API-Referenz https://ironpdf.com/object-reference/api/ Vollständige Klassendokumentation, z.B. ChromePdfRenderer
Dokumentenportal https://ironpdf.com/docs/ Anleitungen, Tutorials, Beispielprojekte
Performance-Unterstützung https://ironpdf.com/troubleshooting/ironpdf-performance-assistance/ Optimierungs- und Skalierungstipps
Kontaktieren Sie den Support https://ironsoftware.com/contact-us/ Live-Chat, E-Mail, Telefonunterstützung

Nächste Schritte

  1. Klone das Beispiel-Repo, das jede Hauptfunktion demonstriert—von MVC-Ansicht-Rendering bis hin zu AES-256-Verschlüsselung.
  2. Probeschlüssel einstecken in eine bestehende Lösung und die Modultests ausführen, um plattformübergreifende Kompatibilität zu validieren.
  3. Buchen Sie eine Live-Demo mit dem Engineering-Team für projektspezifische Empfehlungen.

Mit diesen Ressourcen in der Hand kann jedes .NET-Team pixelgenaue PDFs in der Produktion bereitstellen—on-prem, in Docker oder serverlos—innerhalb eines einzigen Sprints.

Häufig gestellte Fragen

Wie kann ich HTML in .NET Core in PDF umwandeln?

Sie können HTML in .NET Core mit der IronPDF-Bibliothek in PDF umwandeln. Installieren Sie zuerst das IronPDF NuGet-Paket und erstellen Sie dann eine ChromePdfRenderer-Instanz. Verwenden Sie die RenderHtmlAsPdf-Methode, um HTML-Strings in PDFs umzuwandeln.

Wie konvertiere ich eine Website-URL in ein PDF-Dokument?

Um eine Website-URL in ein PDF-Dokument zu konvertieren, installieren Sie das IronPDF NuGet-Paket, erstellen Sie eine ChromePdfRenderer-Instanz und verwenden Sie die RenderUrlAsPdf-Methode, um die URL in ein PDF zu rendern. Das Ergebnis kann mit der SaveAs-Methode gespeichert werden.

Was ist der beste Weg, um Razor-Ansichten in PDFs zu konvertieren?

Der beste Weg, um Razor-Ansichten in PDFs zu konvertieren, ist die Verwendung von IronPDF. Rendern Sie zuerst die Razor-Ansicht in einen HTML-String und übergeben Sie diesen String dann an die RenderHtmlAsPdf-Methode, um ein PDF-Dokument zu erstellen.

Wie kann ich die Sicherheit meiner PDF-Dokumente erhöhen?

Verbessern Sie die PDF-Sicherheit durch die Verwendung von IronPDF, indem Sie AES-256-Verschlüsselung anwenden, Passwörter setzen und Benutzerberechtigungen steuern. Konfigurieren Sie diese Einstellungen über die SecuritySettings-Eigenschaft, um Aktionen wie Drucken und Bearbeiten einzuschränken.

Welche Optionen gibt es zur Anpassung der PDF-Renderung?

IronPDF bietet verschiedene Renderoptionen über die ChromePdfRenderOptions-Klasse, einschließlich der Einstellung von Papiergröße, Ausrichtung, Rändern und der Anwendung von CSS-Medien-Typen. Sie können auch Kopf- und Fußzeilen sowie Wasserzeichen für einen individuell gestalteten Dokumentenausgang hinzufügen.

Wie deploye ich eine PDF-Generierungsanwendung in einem Docker-Container?

Um eine PDF-Generierungsanwendung in einem Docker-Container zu deployen, konfigurieren Sie Linux-Abhängigkeiten in Ihrer Dockerfile und setzen Sie Benutzerberechtigungen. Verwenden Sie IronPdf.Installation.LinuxAndDockerDependenciesAutoConfig für die automatische Verwaltung von Abhängigkeiten.

Wie kann ich Wasserzeichen mit C# zu einem PDF hinzufügen?

Sie können Wasserzeichen zu PDFs mit IronPDF hinzufügen, indem Sie die Watermark-Eigenschaft mit HtmlStamp-Objekten nutzen. Für erweiterte Optionen erlaubt die HtmlStamper-Klasse benutzerdefinierte Positionierung und Transparenzeffekte.

Kann ich digitale Signaturen zu PDF-Dokumenten hinzufügen?

Ja, Sie können digitale Signaturen zu PDFs mit der PdfSignature-Klasse von IronPDF hinzufügen. Verwenden Sie die Sign-Methode an einem PdfDocument und geben Sie eine Zertifikatsdatei an, um die Integrität und Authentizität des Dokuments sicherzustellen.

Wie kann ich die Leistung der PDF-Generierung in .NET Core optimieren?

Optimieren Sie die PDF-Generierungsleistung, indem Sie eine threadsichere ChromePdfRenderer-Instanz wiederverwenden, Multithreading aktivieren und unnötige Headless-Chrome-Start-Flags entfernen. Diese Praktiken tragen zur Effizienzsteigerung Ihrer Anwendung bei.

Funktioniert das .NET Core HTML-zu-PDF-Beispiel in diesem Tutorial auch mit .NET 10?

Ja. IronPDF ist vollständig kompatibel mit .NET 10, sodass Sie das ChromePdfRenderer HTML-zu-PDF-Beispiel aus diesem Tutorial in .NET 10 Projekten verwenden können, ohne den Kerncode zu ändern. Der Hauptunterschied besteht darin, dass Sie .NET 10 beim Erstellen des Projekts anvisieren, dann das neueste IronPDF-Paket von NuGet installieren, um pixelgenaue PDFs aus HTML, Razor-Ansichten oder URLs zu erstellen.

Jacob Mellor, Chief Technology Officer @ Team Iron
Chief Technology Officer

Jacob Mellor ist Chief Technology Officer bei Iron Software und ein visionärer Ingenieur, der Pionierarbeit in der C# PDF-Technologie leistet. Als der ursprüngliche Entwickler hinter der Kern-Codebasis von Iron Software hat er die Produktarchitektur des Unternehmens seit seiner Gründung geprägt und es zusammen mit CEO ...

Weiterlesen
Rezensiert von
Jeff Fritz
Jeffrey T. Fritz
Principal Program Manager - .NET Community Team
Jeff ist außerdem Principal Program Manager für das .NET- und Visual Studio-Team. Er ist der ausführende Produzent der .NET Conf Virtual Conference Series und moderiert ‚Fritz and Friends‘, einen Livestream für Entwickler, der zweimal wöchentlich ausgestrahlt wird. Dort spricht er über Technik und schreibt gemeinsam mit den Zuschauern Code. Jeff schreibt Workshops, Präsentationen und plant Inhalte für die größten Microsoft-Entwicklerveranstaltungen, einschließlich Microsoft Build, Microsoft Ignite, .NET Conf und dem Microsoft MVP Summit.
Bereit anzufangen?
Nuget Downloads 20,296,129 | Version: 2026.7 gerade veröffentlicht
Still Scrolling Icon

Scrollst du immer noch?

Sie brauchen schnell einen Beweis? PM > Install-Package IronPdf
Führen Sie eine Probe aus Sehen Sie zu, wie Ihr HTML-Code in eine PDF-Datei umgewandelt wird.