Przejdź do treści stopki
PRZEWODNIKI MIGRACJI

Jak przeprowadzić migrację z MigraDoc do IronPDF w języku C#

Przejście zMigraDocna IronPDF zmienia proces pracy z plikami PDF w środowisku .NET z rozbudowanego modelu programowego, wymagającego ręcznego tworzenia elementów, na nowoczesne podejście oparte na HTML/CSS, które wykorzystuje istniejące umiejętności w zakresie tworzenia stron internetowych. Niniejszy przewodnik zawiera kompleksową, szczegółową ścieżkę migracji, która eliminuje trudności związane z nauką obsługi zastrzeżonego modelu obiektowego dokumentówMigraDocdla profesjonalnych programistów .NET.

Dlaczego warto przejść zMigraDocna IronPDF

Wyzwania związane z MigraDoc

MigraDoc to silnik układu, który opiera się na PDFsharp — zależy od pakietu PDFsharp i renderuje do PDFsharp PdfDocument. Utrzymywany przez empira / Zespół PDFsharp na licencji MIT, jest potężny do generowania programowego, ale ma podstawowe ograniczenia wpływające na nowoczesne przepływy robocze:

  1. Brak obsługi HTML:MigraDocnie obsługuje bezpośrednio HTML. Należy ręcznie tworzyć dokumenty element po elemencie, używając obiektów Document, Section, Paragraph i Table — nie można wykorzystywać istniejących projektów HTML/CSS.

  2. Zastrzeżony Model Dokumentu:MigraDocwymaga nauki unikalnego modelu dokumentu z koncepcjami takimi jak AddSection(), AddParagraph(), AddTable(), AddRow() i AddCell(). Ta stroma krzywa uczenia się stanowi szczególne wyzwanie dla programistów z doświadczeniem w tworzeniu stron internetowych.

  3. Ograniczone opcje stylizacji: ChociażMigraDocoferuje solidne zarządzanie strukturą dokumentów, jego możliwości stylizacyjne są skromne w porównaniu z nowoczesnymi narzędziami internetowymi. Właściwości takie jak Format.Font.Size, Format.Font.Bold i Format.Alignment są ograniczone w porównaniu do pełnego CSS3.

  4. Rozbudowany kod: Tworzenie nawet prostych układów wymaga dziesiątek linii kodu. Prosta tabela z nagłówkami może wymagać 15–20 wierszy kodu MigraDoc.

  5. Brak obsługi JavaScript:MigraDocnie może renderować treści dynamicznych ani wykonywać kodu JavaScript, co ogranicza możliwości tworzenia nowoczesnych wykresów i elementów interaktywnych.

  6. Wykresy są podstawowe: Funkcjonalność wykresów wMigraDocjest ograniczona w porównaniu z nowoczesnymi bibliotekami wykresów JavaScript, takimi jak Chart.js czy D3.

PorównanieMigraDoci IronPDF

Funkcja MigraDoc IronPDF
Definicja treści Programowe (dokument/sekcja/akapit) HTML/CSS
Krzywa uczenia się Steep (zastrzeżony DOM) Łatwe (umiejętności internetowe)
Stylizacja Ograniczone właściwości Pełny CSS3
JavaScript None Pełne wykonanie w Chromium
Tabele Ręczne definiowanie kolumn/wierszy HTML z CSS
Wykresy Podstawowe wykresyMigraDoc Dowolna biblioteka do tworzenia wykresów wJavaScript
Obrazy Ręczne dopasowywanie rozmiaru/pozycjonowanie Standardowy HTML
Responsywne układy Nieobsługiwane Flexbox, Grid
Licencja Open Source (MIT) Komercjalne

Dla zespołów celujących w nowoczesne .NET,IronPDF pozwala programistom wykorzystać znane umiejętności HTML/CSS, zamiast uczyć się proprietyjnego modelu dokumentu.


Ocena złożoności migracji

Szacowany nakład pracy według funkcji

Funkcja Złożoność migracji
Prosty tekst Bardzo niski
Tabele Niski
Nagłówki/stopki Niski
Style Medium
Obrazy Niski
Wykresy Medium

Zmiana paradygmatu

Podstawową zmianą w tej migracjiMigraDocjest Shift od programowego tworzenia dokumentów do renderowania opartego na HTML:

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

Ta zmiana paradygmatu radykalnie zmniejsza złożoność kodu, zapewniając jednocześnie nieograniczone możliwości stylizacji za pomocą CSS.


Zanim zaczniesz

Wymagania wstępne

  1. Środowisko .NET: .NET Framework 4.6.2+ lub .NET Core 3.1+ / .NET 5/6/7/8/9+
  2. Dostęp do NuGet: Możliwość instalowania pakietów NuGet
  3. Licencja IronPDF: Uzyskaj klucz licencyjny na stronie ironpdf.com

Zmiany w pakiecie NuGet

# RemoveMigraDocpackages (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
# RemoveMigraDocpackages (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

Konfiguracja licencji

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

Zidentyfikuj zastosowanie MigraDoc

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

Kompletna dokumentacija API

Mapowania klas

KlasaMigraDoc Odpowiednik IronPDF
Document ChromePdfRenderer
Section HTML lub
Paragraph HTML

,

, itd.

FormattedText HTML , , itd.
Table HTML lub CSS
Row HTML
Column HTML
Cell HTML ,
PdfDocumentRenderer ChromePdfRenderer

Mapowanie metod

MetodaMigraDoc Odpowiednik IronPDF
document.AddSection() Struktura HTML
section.AddParagraph(text) <p>text</p>
section.AddTable() <table>
table.AddColumn(width) CSS width property
table.AddRow() <tr>
row.Cells[n].AddParagraph() <td>content</td>
renderer.RenderDocument() RenderHtmlAsPdf(html)
pdfDocument.Save(path) pdf.SaveAs(path)

Mapowanie symboli zastępczych (nagłówki/stopki)

MetodaMigraDoc IronPDF Placeholder
AddPageField() {page}
AddNumPagesField() {total-pages}
AddDateField() {date}

Przykłady migracji kodu

Przykład 1: Podstawowe konwersje z HTML do PDF (podstawowa różnica)

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

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

Ten przykład ilustruje zasadniczą różnicę międzyMigraDoca IronPdf.MigraDocwymaga utworzenia Document, dodania Section, dodania Paragraph, użycia AddFormattedText() z TextFormat.Bold, ustawienia Format.Font.Size, utworzenia PdfDocumentRenderer, przypisania dokumentu, wywołania RenderDocument(), a na koniec zapisania. To ponad 10 wierszy kodu z wieloma obiektami.

IronPDF osiąga ten sam rezultat w trzech krokach: utworzenie renderera, renderowanie HTML i zapisanie. Znacznik HTML <h1> naturalnie zapewnia styl pogrubienia, dużego nagłówka. Dodatkowe opcje renderowania można znaleźć w dokumentacji dotyczącej konwersji HTML do PDF.

Przykład 2: Tworzenie tabel

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

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

Tworzenie tabel wMigraDocwymaga zrozumienia hierarchii Table, Column, Row i Cell. Należy wyraźnie dodać kolumny za pomocą AddColumn(), utworzyć wiersze za pomocą AddRow(), uzyskać dostęp do komórek za pomocą indeksu z Cells[n] i dodać zawartość za pomocą AddParagraph(). Obramowanie jest ustawiane za pomocą table.Borders.Width.

IronPDF wykorzystuje standardową składnię tabel HTML, znaną każdemu programiście stron internetowych. Atrybut border='1' zapewnia obramowanie, elementy

tworzą komórki nagłówka, a elementy tworzą komórki danych. Można dodać CSS w celu uzyskania zaawansowanych stylów, takich jak paski zebry, efekty najechania kursorem lub responsywne układy. Dowiedz się więcej o tworzeniu tabel w plikach PDF.

Przykład 3: Nagłówki i stopki z numerami stron

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

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

Nagłówki i stopkiMigraDocwymagają dostępu do section.Headers.Primary i section.Footers.Primary, tworzenia akapitów w ich obrębie, dodawania tekstu za pomocą AddText() oraz używania specjalnych metod, takich jak AddPageField(), do dynamicznej zawartości. Wyrównanie wymaga ustawienia Format.Alignment.

IronPDF konfiguruje nagłówki i stopki w RenderingOptions.TextHeader / RenderingOptions.TextFooter za pomocą TextHeaderFooter, z regionami LeftText, CenterText i RightText. Ustawienie zastępcze {page} automatycznie wstawia bieżącą numerację strony. Do bogatszych układów używaj HtmlHeader / HtmlFooter z HtmlHeaderFooter dla pełnej obsługi HTML/CSS. Aby zapoznać się z opcjami zaawansowanymi, zapoznaj się z dokumentacją dotyczącą nagłówków i stopek.


Ważne uwagi dotyczące migracji

Składnia symbolu zastępczego numeru strony

Najważniejszą zmianą w nagłówkach i stopkach jest składnia symboli zastępczych:

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

Właściwości formatowania do CSS

WłaściwościMigraDocFormat odwzorowują się na 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

Przeliczanie jednostek

MigraDoc wykorzystuje różne jednostki; W IronPDF marginesy są podawane w milimetrach:

  • "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

Zmiana wzorca renderowania

Cały wzorzec renderowania ulega zmianie:

//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");
' MigraDoc pattern (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

Rozwiązywanie problemów

Problem 1: Nie znaleziono dokumentu/sekcji

Problem: Klasy Document i Section nie istnieją w IronPDF.

Rozwiązanie: Zastąp strukturą HTML:

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

Problem 2: Nie znaleziono akapitu AddParagraph

Problem: Metoda AddParagraph() nie istnieje.

Rozwiązanie: Użyj elementów HTML:

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

// IronPDF
"<p>Hello World</p>"
// MigraDoc
section.AddParagraph("Hello World");

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

Problem 3: Nie znaleziono PdfDocumentRenderer

Problem: Klasa PdfDocumentRenderer nie istnieje.

Rozwiązanie: Użyj 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

Problem 4: AddPageField nie działa

Problem: Metoda AddPageField() nie istnieje.

Rozwiązanie: Użyj składni symboli zastępczych IronPDF:

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

Lista kontrolna migracji

Przed migracją

  • Zidentyfikuj wszystkie instrukcje using MigraDoc
  • Struktury tabel w dokumentach (kolumny, wiersze, stylizacja)
  • Zwróć uwagę na zawartość nagłówków/stopek oraz wykorzystanie pól na stronie
  • Wymień niestandardowe style zdefiniowane za pomocą document.Styles
  • Uzyskaj klucz licencyjny IronPDF

Zmiany w pakiecie

  • Usuń pakiety PDFsharp-MigraDoc, PDFsharp-MigraDoc-GDI i PDFsharp-MigraDoc-WPF
  • Zainstaluj paczkę NuGet IronPdf: dotnet add package IronPdf
  • Zaktualizuj importy przestrzeni nazw

Zmiany w kodzie

  • Dodaj konfigurację klucza licencyjnego podczas uruchamiania
  • Zamień Section na strukturę HTML
  • Konwertuj AddParagraph() to HTML

    elements

  • Konwertuj Cell na strukturę HTML
  • Zamień AddPageField() na zastępstwo {page}
  • Zamień AddNumPagesField() na zastępstwo {total-pages}
  • Konwertuj właściwości Format na style CSS
  • Zamień PdfDocumentRenderer z ChromePdfRenderer
  • Testowanie

    • Porównaj wygląd starych i nowych plików PDF
    • Sprawdź, czy podziały stron działają poprawnie
    • Sprawdź renderowanie nagłówków/stopek oraz numerów stron
    • Sprawdź formatowanie tabeli i obramowania
    • Przetestuj na złożonych dokumentach wielostronicowych

    Po migracji

    • Usuń dokumentację związaną z MigraDoc
    • Aktualizacja materiałów szkoleniowych dla zespołu
    • Dokumentowanie nowych lokalizacji szablonów HTML

    Zwróć uwagęMigraDoc oraz PDFSharp są zarejestrowanymi znakami towarowymi ich odpowiednich właścicieli. Ta strona nie jest powiązana, popierana ani sponsorowana przez empira Software GmbH. Wszystkie nazwy produktów, logo i marki są własnością ich odpowiednich właścicieli. Porównania mają charakter wyłącznie informacyjny i odzwierciedlają informacje dostępne publicznie w momencie pisania.

    Curtis Chau
    Autor tekstów technicznych

    Curtis Chau posiada tytuł licencjata z informatyki (Uniwersytet Carleton) i specjalizuje się w front-endowym rozwoju, z ekspertką w Node.js, TypeScript, JavaScript i React. Pasjonuje się tworzeniem intuicyjnych i estetycznie przyjemnych interfejsów użytkownika, Curtis cieszy się pracą z nowoczesnymi frameworkami i tworzeniem dobrze zorganizowanych, atrakcyjnych wizualnie podrę...

    Czytaj więcej

    Zespół wsparcia Iron

    Jesteśmy online 24 godziny, 5 dni w tygodniu.
    Czat
    E-mail
    Zadzwoń do mnie