Zum Fußzeileninhalt springen
VIDEOS

Wie man PDF-Revisionsgeschichte in C# speichert und bearbeitet

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

Feature MigraDoc IronPDF
Definition des Inhalts Programmatisch (Dokument/Abschnitt/Absatz) HTML/CSS
Lernkurve Steep (proprietäres DOM) Einfach (Webkenntnisse)
Gestaltung Begrenzte Eigenschaften Vollständig CSS3
JavaScript None Vollständige Ausführung von Chromium
Tabellen Manuelle Spalten-/Zeilendefinition HTML <table> mit CSS
Diagramme Grundlegende MigraDoc-Diagramme Jede JavaScript-Diagrammbibliothek
Bilder Manuelle Größenbestimmung/Positionierung Standard HTML <img>
Responsive Layouts Nicht unterstützt Flexbox, Grid
Lizenz Offene 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

Feature Komplexität der Migration
Einfacher Text Sehr niedrig
Tabellen Niedrig
Kopf-/Fußzeilen Niedrig
Stile Medium
Bilder Niedrig
Diagramme Medium

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()

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
# 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";
// Add at application startup (Program.cs or Startup.cs)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
' Add at application startup (Program.vb or Startup.vb)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
$vbLabelText   $csharpLabel

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" .
# 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-Klasse IronPDF-Äquivalent
Document ChromePdfRenderer
Section HTML <body> oder <div>
Paragraph HTML <p>, <h1>, etc.
FormattedText HTML <span>, <strong>, etc.
Table HTML <table>
Row HTML <tr>
Column HTML <col> oder CSS
Cell HTML <td>, <th>
PdfDocumentRenderer ChromePdfRenderer

Methoden-Zuordnungen

MigraDoc-Methode IronPDF-Ä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-Methode IronPDF 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");
    }
}
// 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");
    }
}
Imports MigraDoc.DocumentObjectModel
Imports MigraDoc.Rendering
Imports System.Diagnostics

Class Program
    Shared Sub Main()
        ' MigraDoc doesn't support HTML directly
        ' Must manually create document structure
        Dim document As New Document()
        Dim section As Section = document.AddSection()

        Dim paragraph As Paragraph = section.AddParagraph()
        paragraph.AddFormattedText("Hello World", TextFormat.Bold)
        paragraph.Format.Font.Size = 16

        Dim pdfRenderer As New PdfDocumentRenderer()
        pdfRenderer.Document = document
        pdfRenderer.RenderDocument()
        pdfRenderer.PdfDocument.Save("output.pdf")
    End Sub
End Class
$vbLabelText   $csharpLabel

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");
    }
}
// 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");
    }
}
Imports IronPdf

Class Program
    Shared Sub Main()
        Dim renderer = New ChromePdfRenderer()
        Dim pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1>")
        pdf.SaveAs("output.pdf")
    End Sub
End Class
$vbLabelText   $csharpLabel

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");
    }
}
// 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");
    }
}
Imports MigraDoc.DocumentObjectModel
Imports MigraDoc.DocumentObjectModel.Tables
Imports MigraDoc.Rendering

Class Program
    Shared Sub Main()
        Dim document As New Document()
        Dim section As Section = document.AddSection()

        Dim table As Table = section.AddTable()
        table.Borders.Width = 0.75

        Dim column1 As Column = table.AddColumn("3cm")
        Dim column2 As Column = table.AddColumn("3cm")

        Dim row1 As Row = table.AddRow()
        row1.Cells(0).AddParagraph("Name")
        row1.Cells(1).AddParagraph("Age")

        Dim row2 As Row = table.AddRow()
        row2.Cells(0).AddParagraph("John")
        row2.Cells(1).AddParagraph("30")

        Dim pdfRenderer As New PdfDocumentRenderer()
        pdfRenderer.Document = document
        pdfRenderer.RenderDocument()
        pdfRenderer.PdfDocument.Save("table.pdf")
    End Sub
End Class
$vbLabelText   $csharpLabel

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");
    }
}
// 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");
    }
}
Imports IronPdf

Class Program
    Shared Sub Main()
        Dim renderer = New ChromePdfRenderer()
        Dim htmlTable As String = "
            <table border='1'>
                <tr><th>Name</th><th>Age</th></tr>
                <tr><td>John</td><td>30</td></tr>
            </table>"

        Dim pdf = renderer.RenderHtmlAsPdf(htmlTable)
        pdf.SaveAs("table.pdf")
    End Sub
End Class
$vbLabelText   $csharpLabel

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");
    }
}
// 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");
    }
}
Imports MigraDoc.DocumentObjectModel
Imports MigraDoc.Rendering

Class Program
    Shared Sub Main()
        Dim document As New Document()
        Dim section As Section = document.AddSection()

        ' Add header
        Dim headerPara As Paragraph = section.Headers.Primary.AddParagraph()
        headerPara.AddText("Document Header")
        headerPara.Format.Font.Size = 12
        headerPara.Format.Alignment = ParagraphAlignment.Center

        ' Add footer
        Dim footerPara As Paragraph = section.Footers.Primary.AddParagraph()
        footerPara.AddText("Page ")
        footerPara.AddPageField()
        footerPara.Format.Alignment = ParagraphAlignment.Center

        ' Add content
        section.AddParagraph("Main content of the document")

        Dim pdfRenderer As New PdfDocumentRenderer()
        pdfRenderer.Document = document
        pdfRenderer.RenderDocument()
        pdfRenderer.PdfDocument.Save("header-footer.pdf")
    End Sub
End Class
$vbLabelText   $csharpLabel

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");
    }
}
// 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");
    }
}
Imports IronPdf

Class Program
    Shared Sub Main()
        IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
        Dim renderer As New ChromePdfRenderer()
        renderer.RenderingOptions.TextHeader = New TextHeaderFooter With {
            .CenterText = "Document Header"
        }
        renderer.RenderingOptions.TextFooter = New TextHeaderFooter With {
            .CenterText = "Page {page}"
        }

        Dim pdf = renderer.RenderHtmlAsPdf("<h1>Main content of the document</h1>")
        pdf.SaveAs("header-footer.pdf")
    End Sub
End Class
$vbLabelText   $csharpLabel

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}"
// MigraDocfield methods:
footerPara.AddPageField();       // Current page
footerPara.AddNumPagesField();   // Total pages

//IronPDF placeholders:
"Page {page} of {total-pages}"
' MigraDocfield methods:
footerPara.AddPageField()       ' Current page
footerPara.AddNumPagesField()   ' Total pages

' IronPDF placeholders:
"Page {page} of {total-pages}"
$vbLabelText   $csharpLabel

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

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;">
// MigraDoc:
table.AddColumn("3cm");

//IronPDF(CSS):
<th style="width: 3cm;">
' MigraDoc:
table.AddColumn("3cm")

' IronPDF(CSS):
<th style="width: 3cm;">
$vbLabelText   $csharpLabel

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");
// 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");
' MigraDocpattern (DELETE):
Dim pdfRenderer As New PdfDocumentRenderer()
pdfRenderer.Document = document
pdfRenderer.RenderDocument()
pdfRenderer.PdfDocument.Save("output.pdf")

' IronPDF pattern:
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("output.pdf")
$vbLabelText   $csharpLabel

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);
// MigraDoc
Document document = new Document();
Section section = document.AddSection();

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

Dim document As New Document()
Dim section As Section = document.AddSection()

Dim html As String = "<html><body>...</body></html>"
Dim pdf = renderer.RenderHtmlAsPdf(html)
$vbLabelText   $csharpLabel

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>"
// MigraDoc
section.AddParagraph("Hello World");

// IronPDF
"<p>Hello World</p>"
$vbLabelText   $csharpLabel

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();
// MigraDoc
PdfDocumentRenderer pdfRenderer = new PdfDocumentRenderer();

// IronPDF
var renderer = new ChromePdfRenderer();
' MigraDoc
Dim pdfRenderer As New PdfDocumentRenderer()

' IronPDF
Dim renderer As New ChromePdfRenderer()
$vbLabelText   $csharpLabel

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}"
};
// MigraDoc
footerPara.AddPageField();

// IronPDF
renderer.RenderingOptions.TextFooter = new TextHeaderFooter
{
    CenterText = "Page {page}"
};
' MigraDoc
footerPara.AddPageField()

' IronPDF
renderer.RenderingOptions.TextFooter = New TextHeaderFooter With {
    .CenterText = "Page {page}"
}
$vbLabelText   $csharpLabel

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

Weiterlesen

Iron-Support-Team

Wir sind 24 Stunden am Tag, 5 Tage die Woche online.
Chat
E-Mail
Rufen Sie mich an