IRONSOFTWAREHOME
VIDEOS

Wie man PDF-Revisionsgeschichte in C# speichert und bearbeitet

Curtis Chau
Curtis Chau
Updated: 18. Mai 2026

Durch die Migration von MigraDoczu IronPDF wird Ihr .NET-PDF-Workflow von einem langwierigen programmatischen Dokumentenmodell, das eine manuelle Element-für-Element-Konstruktion erfordert, auf einen modernen HTML/CSS-basierten Ansatz umgestellt, der die vorhandenen Webentwicklungskenntnisse nutzt. Dieses Handbuch bietet einen umfassenden, schrittweisen Migrationspfad, der die steile Lernkurve des MigraDoc-eigenen Dokumentobjektmodells für professionelle .NET-Entwickler eliminiert.

Warum von MigraDoczu IronPDF migrieren

Die MigraDoc-Herausforderungen

MigraDoc ist eine Layout-Engine, die auf PDFsharp aufbaut — sie hängt vom PDFsharp-Paket ab und rendert in ein PDFsharp PdfDocument. Wird von empira / dem PDFsharp-Team unter der MIT-Lizenz gepflegt, ist es leistungsfähig für die programmatische Generierung, hat jedoch grundlegende Einschränkungen, die moderne Entwicklungs-Workflows beeinflussen:

  1. Keine HTML-Unterstützung: MigraDocunterstützt HTML nicht direkt. Sie müssen Dokumente manuell Element für Element mit Document, Section, Paragraph und Table Objekten erstellen — Sie können keine vorhandenen HTML/CSS-Designs nutzen.

  2. Proprietäres Dokumentenmodell: MigraDocerfordert das Erlernen eines einzigartigen Dokumentenmodells mit Konzepten wie AddSection(), AddParagraph(), AddTable(), AddRow() und AddCell(). Diese steile Lernkurve ist besonders für Entwickler mit Webentwicklungshintergrund eine Herausforderung.

  3. Begrenzte Gestaltungsmöglichkeiten: MigraDocbietet zwar eine robuste Dokumentenstrukturverwaltung, seine Gestaltungsmöglichkeiten sind jedoch im Vergleich zu modernen Webtools eher bescheiden. Eigenschaften wie Format.Font.Size, Format.Font.Bold und Format.Alignment sind im Vergleich zu vollem CSS3 begrenzt.

  4. Ausführlicher Code: Selbst für einfache Layouts sind Dutzende von Codezeilen erforderlich. Eine einfache Tabelle mit Kopfzeilen kann 15-20 Zeilen MigraDoc-Code erfordern.

  5. Keine JavaScriptUnterstützung: MigraDockann keine dynamischen Inhalte rendern oder JavaScriptausführen, was die Möglichkeiten für moderne Diagramme und interaktive Elemente einschränkt.

  6. Diagramme sind einfach: Die Diagrammfunktionalität von MigraDocist im Vergleich zu modernen JavaScriptDiagrammbibliotheken wie Chart.js oder D3 eingeschränkt.

MigraDocvs IronPDF Vergleich

FeatureMigraDocIronPDF
Definition des InhaltsProgrammatisch (Dokument/Abschnitt/Absatz)HTML/CSS
LernkurveSteep (proprietäres DOM)Einfach (Webkenntnisse)
GestaltungBegrenzte EigenschaftenVollständig CSS3
JavaScriptNoneVollständige Ausführung von Chromium
TabellenManuelle Spalten-/ZeilendefinitionHTML <table> mit CSS
DiagrammeGrundlegende MigraDoc-DiagrammeJede JavaScript-Diagrammbibliothek
BilderManuelle Größenbestimmung/PositionierungStandard HTML <img>
Responsive LayoutsNicht unterstütztFlexbox, Grid
LizenzOffene Quelle (MIT)Kommerziell

Für Teams, die modernes .NET anvisieren, lässt IronPDF Entwicklern vertraute HTML/CSS-Kenntnisse nutzen, anstatt ein proprietäres Dokumentenmodell zu erlernen.


Migrationskomplexitätsbewertung

Geschätzter Aufwand nach Merkmalen

FeatureKomplexität der Migration
Einfacher TextSehr niedrig
TabellenNiedrig
Kopf-/FußzeilenNiedrig
StileMedium
BilderNiedrig
DiagrammeMedium

Paradigmen-Verschiebung

Der grundlegende Shift bei dieser MigraDoc-Migration besteht in der Umstellung von der programmatischen Dokumenterstellung auf das HTML-First-Rendering:

MigraDoc: Dokument → AddSection() → AddParagraph() → PdfDocumentRenderer → Save()
IronPDF: ChromePdfRenderer → RenderHtmlAsPdf(html) → SaveAs()
Text

Dieser Paradigmenwechsel reduziert die Komplexität des Codes drastisch und bietet gleichzeitig unbegrenzte Styling-Möglichkeiten durch CSS.


Bevor Sie beginnen

Voraussetzungen

  1. .NET -Umgebung: .NET Framework 4.6.2+ oder .NET Core 3.1+ / .NET 5/6/7/8/9+
  2. NuGet -Zugriff: Möglichkeit zur Installation von NuGet -Paketen
  3. IronPDF -Lizenz: Ihren Lizenzschlüssel erhalten Sie unter IronPDF.

NuGet-Paketänderungen

# Remove MigraDocpackages (package IDs are case-sensitive on nuget.org)
dotnet remove package PDFsharp-MigraDoc
dotnet remove package PDFsharp-MigraDoc-GDI
dotnet remove package PDFsharp-MigraDoc-WPF

# Install IronPDF
dotnet add package IronPdf
SHELL

Lizenz-Konfiguration

// Add at application startup (Program.cs or Startup.cs)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";

Die Verwendung von MigraDocidentifizieren

# Find all MigraDocreferences
grep -r "using MigraDoc\|PdfDocumentRenderer\|AddSection\|AddParagraph" --include="*.cs" .
grep -r "AddTable\|AddRow\|AddColumn\|AddCell\|AddImage" --include="*.cs" .
SHELL

Komplette API-Referenz

Klassen-Zuordnungen

MigraDoc-KlasseIronPDF-Äquivalent
DocumentChromePdfRenderer
SectionHTML <body> oder <div>
ParagraphHTML <p>, <h1>, etc.
FormattedTextHTML <span>, <strong>, etc.
TableHTML <table>
RowHTML <tr>
ColumnHTML <col> oder CSS
CellHTML <td>, <th>
PdfDocumentRendererChromePdfRenderer

Methoden-Zuordnungen

MigraDoc-MethodeIronPDF-Äquivalent
document.AddSection()HTML-Struktur
section.AddParagraph(text)<p>text</p>
section.AddTable()<table>
table.AddColumn(width)CSS width Eigenschaft
table.AddRow()<tr>
row.Cells[n].AddParagraph()<td>content</td>
renderer.RenderDocument()RenderHtmlAsPdf(html)
pdfDocument.Save(path)pdf.SaveAs(path)

Platzhalter-Zuordnungen (Kopf-/Fußzeilen)

MigraDoc-MethodeIronPDF Platzhalter
AddPageField(){page}
AddNumPagesField(){total-pages}
AddDateField(){date}

Beispiele für die Code-Migration

Beispiel 1: Grundlegendes HTML zu PDF (Der grundlegende Unterschied)

Vor (MigraDoc):

// NuGet: Install-Package PDFsharp-MigraDoc-GDI
using MigraDoc.DocumentObjectModel;
using MigraDoc.Rendering;
using System.Diagnostics;

class Program
{
    static void Main()
    {
        // MigraDocdoesn't support HTML directly
        // Must manually create document structure
        Document document = new Document();
        Section section = document.AddSection();
        
        Paragraph paragraph = section.AddParagraph();
        paragraph.AddFormattedText("Hello World", TextFormat.Bold);
        paragraph.Format.Font.Size = 16;
        
        PdfDocumentRenderer pdfRenderer = new PdfDocumentRenderer();
        pdfRenderer.Document = document;
        pdfRenderer.RenderDocument();
        pdfRenderer.PdfDocument.Save("output.pdf");
    }
}
C#

Nach (IronPDF):

// NuGet: Install-Package IronPdf
using IronPdf;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1>");
        pdf.SaveAs("output.pdf");
    }
}

Dieses Beispiel verdeutlicht den grundlegenden Unterschied zwischen MigraDocund IronPDF. MigraDocerfordert das Erstellen eines Document, das Hinzufügen eines Section, das Hinzufügen eines Paragraph, die Verwendung von AddFormattedText() mit TextFormat.Bold, das Setzen von Format.Font.Size, das Erstellen eines PdfDocumentRenderer, das Zuweisen des Dokuments, das Aufrufen von RenderDocument() und schließlich das Speichern. Das sind mehr als 10 Zeilen Code mit mehreren Objekten.

IronPDF erreicht das gleiche Ergebnis in 3 Zeilen: einen Renderer erstellen, HTML rendern und speichern. Das HTML <h1> Tag bietet von Natur aus den fetten, großen Überschriftenstil. Weitere Rendering-Optionen finden Sie in der HTML to PDF Dokumentation.

Beispiel 2: Tabellen erstellen

Vor (MigraDoc):

// NuGet: Install-Package PDFsharp-MigraDoc-GDI
using MigraDoc.DocumentObjectModel;
using MigraDoc.DocumentObjectModel.Tables;
using MigraDoc.Rendering;

class Program
{
    static void Main()
    {
        Document document = new Document();
        Section section = document.AddSection();
        
        Table table = section.AddTable();
        table.Borders.Width = 0.75;
        
        Column column1 = table.AddColumn("3cm");
        Column column2 = table.AddColumn("3cm");
        
        Row row1 = table.AddRow();
        row1.Cells[0].AddParagraph("Name");
        row1.Cells[1].AddParagraph("Age");
        
        Row row2 = table.AddRow();
        row2.Cells[0].AddParagraph("John");
        row2.Cells[1].AddParagraph("30");
        
        PdfDocumentRenderer pdfRenderer = new PdfDocumentRenderer();
        pdfRenderer.Document = document;
        pdfRenderer.RenderDocument();
        pdfRenderer.PdfDocument.Save("table.pdf");
    }
}
C#

Nach (IronPDF):

// NuGet: Install-Package IronPdf
using IronPdf;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        string htmlTable = @"
            <table border='1'>
                <tr><th>Name</th><th>Age</th></tr>
                <tr><td>John</td><td>30</td></tr>
            </table>";
        
        var pdf = renderer.RenderHtmlAsPdf(htmlTable);
        pdf.SaveAs("table.pdf");
    }
}

Die Erstellung von MigraDoc-Tabellen erfordert das Verständnis der Table, Column, Row und Cell Hierarchie. Sie müssen explizit Spalten mit AddColumn() hinzufügen, Zeilen mit AddRow() erstellen, Zellen durch Index mit Cells[n] ansprechen und Inhalte mit AddParagraph() hinzufügen. Der Rahmen wird über table.Borders.Width festgelegt.

IronPDF verwendet die Standard-HTML-Tabellensyntax, die jeder Webentwickler kennt. Das border='1' Attribut stellt den Rahmen bereit, <th> Elemente erstellen Kopfzellen, und <td> Elemente erstellen Datenzellen. CSS kann für fortgeschrittenes Gestaltungwie Zebra Striping, Hover-Effekte oder responsive Layouts hinzugefügt werden. Erfahren Sie mehr über die Erstellung von Tabellen in PDFs.

Beispiel 3: Kopf- und Fußzeilen mit Seitenzahlen

Vor (MigraDoc):

// NuGet: Install-Package PDFsharp-MigraDoc-GDI
using MigraDoc.DocumentObjectModel;
using MigraDoc.Rendering;

class Program
{
    static void Main()
    {
        Document document = new Document();
        Section section = document.AddSection();
        
        // Add header
        Paragraph headerPara = section.Headers.Primary.AddParagraph();
        headerPara.AddText("Document Header");
        headerPara.Format.Font.Size = 12;
        headerPara.Format.Alignment = ParagraphAlignment.Center;
        
        // Add footer
        Paragraph footerPara = section.Footers.Primary.AddParagraph();
        footerPara.AddText("Page ");
        footerPara.AddPageField();
        footerPara.Format.Alignment = ParagraphAlignment.Center;
        
        // Add content
        section.AddParagraph("Main content of the document");
        
        PdfDocumentRenderer pdfRenderer = new PdfDocumentRenderer();
        pdfRenderer.Document = document;
        pdfRenderer.RenderDocument();
        pdfRenderer.PdfDocument.Save("header-footer.pdf");
    }
}
C#

Nach (IronPDF):

// NuGet: Install-Package IronPdf
using IronPdf;

class Program
{
    static void Main()
    {
        IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
        var renderer = new ChromePdfRenderer();
        renderer.RenderingOptions.TextHeader = new TextHeaderFooter
        {
            CenterText = "Document Header"
        };
        renderer.RenderingOptions.TextFooter = new TextHeaderFooter
        {
            CenterText = "Page {page}"
        };

        var pdf = renderer.RenderHtmlAsPdf("<h1>Main content of the document</h1>");
        pdf.SaveAs("header-footer.pdf");
    }
}

MigraDoc-Kopf- und Fußzeilen erfordern den Zugriff auf section.Headers.Primary und section.Footers.Primary, das Erstellen von Absätzen darin, das Hinzufügen von Text mit AddText() und die Verwendung spezieller Methoden wie AddPageField() für dynamische Inhalte. Ausrichtung erfordert das Setzen von Format.Alignment.

IronPDF konfiguriert Kopf- und Fußzeilen auf RenderingOptions.TextHeader / RenderingOptions.TextFooter mit TextHeaderFooter, mit LeftText, CenterText und RightText Regionen. Der {page} Platzhalter fügt automatisch die aktuelle Seitenzahl ein. Für reichere Layouts verwenden Sie HtmlHeader / HtmlFooter mit HtmlHeaderFooter für volle HTML/CSS-Unterstützung. Siehe die Kopf- und Fußzeilen-Dokumentation für erweiterte Optionen.


Kritische Hinweise zur Migration

Seitennummern-Platzhalter-Syntax

Die wichtigste Änderung für Kopf- und Fußzeilen ist die Syntax der Platzhalter:

// MigraDocfield methods:
footerPara.AddPageField();       // Current page
footerPara.AddNumPagesField();   // Total pages

//IronPDF placeholders:
"Page {page} of {total-pages}"
C#

Formateigenschaften in CSS

MigraDocs Format Eigenschaften korrelieren mit CSS:

// MigraDoc:
paragraph.Format.Font.Size = 16;
paragraph.Format.Font.Bold = true;
paragraph.Format.Alignment = ParagraphAlignment.Center;

//IronPDF(CSS):
<p style="font-size: 16pt; font-weight: bold; text-align: center;">

Einheitsumwandlung

MigraDoc verwendet verschiedene Einheiten;IronPDF verwendet Millimeter-Ränder:

  • "1 cm" = 10 mm
  • "1in" = 25.4mm
  • "72pt" = 25,4 mm
// MigraDoc:
table.AddColumn("3cm");

//IronPDF(CSS):
<th style="width: 3cm;">

Rendering-Muster ändern

Das gesamte Rendering-Muster ändert sich:

// MigraDocpattern (DELETE):
PdfDocumentRenderer pdfRenderer = new PdfDocumentRenderer();
pdfRenderer.Document = document;
pdfRenderer.RenderDocument();
pdfRenderer.PdfDocument.Save("output.pdf");

//IronPDF pattern:
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
C#

Fehlerbehebung

Problem 1: Dokument/Abschnitt nicht gefunden

Problem: Document und Section Klassen existieren nicht in IronPDF.

Lösung: Ersetzen Sie dies durch die HTML-Struktur:

// MigraDoc
Document document = new Document();
Section section = document.AddSection();

// IronPDF
string html = "<html><body>...</body></html>";
var pdf = renderer.RenderHtmlAsPdf(html);

Ausgabe 2: AddParagraph nicht gefunden

Problem: AddParagraph() Methode existiert nicht.

Lösung: HTML-Elemente verwenden:

// MigraDoc
section.AddParagraph("Hello World");

// IronPDF
"<p>Hello World</p>"

Ausgabe 3: PdfDocumentRenderer nicht gefunden

Problem: PdfDocumentRenderer Klasse existiert nicht.

Lösung: Verwenden Sie ChromePdfRenderer:

// MigraDoc
PdfDocumentRenderer pdfRenderer = new PdfDocumentRenderer();

// IronPDF
var renderer = new ChromePdfRenderer();

Ausgabe 4: AddPageField funktioniert nicht

Problem: AddPageField() Methode existiert nicht.

Lösung: Verwenden Sie die IronPDF Platzhaltersyntax:

// MigraDoc
footerPara.AddPageField();

// IronPDF
renderer.RenderingOptions.TextFooter = new TextHeaderFooter
{
    CenterText = "Page {page}"
};

Migrations-Checkliste

Vor der Migration

  • Identifizieren Sie alle MigraDocusing Anweisungen
  • Dokumenttabellenstrukturen (Spalten, Zeilen, Formatierung)
  • Beachten Sie den Inhalt von Kopf- und Fußzeile sowie die Verwendung der Seitenfelder.
  • Listen Sie benutzerdefinierte Stile auf, die mit document.Styles definiert wurden -IronPDF-Lizenzschlüssel erhalten

Paketänderungen

  • Entfernen Sie PDFsharp-MigraDoc, PDFsharp-MigraDoc-GDI und PDFsharp-MigraDoc-WPF Pakete
  • Installieren Sie das IronPdf NuGet-Paket: dotnet add package IronPdf
  • Namespace-Importe aktualisieren

Code-Änderungen

  • Lizenzschlüsselkonfiguration beim Start hinzufügen
  • Ersetzen Sie Section mit HTML-Struktur
  • Konvertieren Sie AddParagraph() zu HTML <p> Elementen
  • Konvertieren Sie Cell zu HTML <table> Struktur
  • Ersetzen Sie AddPageField() mit {page} Platzhalter
  • Ersetzen Sie AddNumPagesField() mit {total-pages} Platzhalter
  • Konvertieren Sie Format Eigenschaften zu CSS-Stilen
  • Ersetzen Sie PdfDocumentRenderer mit ChromePdfRenderer

Testen

  • Vergleich der visuellen Darstellung alter und neuer PDFs
  • Überprüfen Sie, ob die Seitenumbrüche korrekt funktionieren.
  • Überprüfen Sie die Darstellung von Kopf- und Fußzeilen sowie die Seitenzahlen.
  • Tabellenformatierung und Rahmen prüfen
  • Test mit komplexen, mehrseitigen Dokumenten

Nach der Migration

  • Entfernen Sie die MigraDoc-bezogene Dokumentation
  • Aktualisierung der Teamschulungsmaterialien
  • Neue Speicherorte für HTML-Vorlagen dokumentieren

Hinweis:: MigraDoc und PDFSharp sind eingetragene Warenzeichen ihrer jeweiligen Inhaber.} Diese Seite steht in keiner Verbindung zu, wird weder befürwortet noch gesponsert von empira Software GmbH. Alle Produktnamen, Logos und Marken sind Eigentum ihrer jeweiligen Eigentümer. Vergleiche dienen nur zu Informationszwecken und spiegeln öffentlich zugängliche Informationen zum Zeitpunkt des Schreibens wider.
Curtis Chau
Technischer Autor

Curtis Chau hat einen Bachelor-Abschluss in Informatik von der Carleton University und ist spezialisiert auf Frontend-Entwicklung mit Expertise in Node.js, TypeScript, JavaScript und React. Leidenschaftlich widmet er sich der Erstellung intuitiver und ästhetisch ansprechender Benutzerschnittstellen und arbeitet gerne mit modernen Frameworks sowie der Erstellung gut strukturierter, optisch ansprechender Handbücher.

...
Weiterlesen

Verwandte Artikel

Key in blue circle

Holen Sie sich sofort Ihren kostenlosen 30-Tage-Testschlüssel.

Your trial license will be sent to your email address

Keine Einschränkungen. 100 % freigeschaltet. Keine Kreditkarte.

bullet_checkedIhr Testlizenzschlüssel wurde Ihnen per E-Mail gesendet.Keine Einschränkungen. 100 % freigeschaltet. Keine Kreditkarte.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Buchen Sie Ihre kostenlose Live-Demo
Booking Badge

Von Millionen von Ingenieur*innen weltweit vertraut

Kundenlogos von Iron Software
Erhalten Sie Ihre unverbindliche Beratung
Füllen Sie das Formular unten aus oder senden Sie eine E-Mail an sales@ironsoftware.com
Ihre Daten werden immer vertraulich behandelt.
Von Millionen von Ingenieur*innen weltweit vertraut
Kundenlogos von Iron Software
Erhalten Sie sofort Ihren kostenlosen 30-Tage-Testschlüssel.
Ihr Testlizenzschlüssel wurde Ihnen per E-Mail gesendet.