Passer au contenu du pied de page
VIDéOS

Comment enregistrer et éditer l'historique des révisions PDF en C#

La migration de MigraDocvers IronPDF transforme votre flux de travail PDF .NET d'un modèle de document programmatique verbeux nécessitant une construction manuelle élément par élément à une approche moderne basée sur HTML/CSSqui exploite les compétences existantes en matière de développement web. Ce guide fournit un chemin de migration complet, étape par étape, qui élimine la courbe d'apprentissage abrupte du modèle d'objet de document propriétaire de MigraDocpour les développeurs .NET professionnels.

Pourquoi migrer de MigraDocà IronPDF

Les défis de MigraDoc

MigraDoc est un moteur de mise en page qui repose sur PDFsharp — il dépend du package PDFsharp et rend en un PDFsharp PdfDocument. Maintenu par empira / l'équipe PDFsharp sous la licence MIT, il est puissant pour la génération programmatique mais a des limitations fondamentales qui affectent les flux de travail de développement moderne :

  1. Absence de prise en charge HTML : MigraDocne prend pas directement en charge le HTML. Vous devez construire manuellement des documents élément par élément en utilisant les objets Document, Section, Paragraph et Table — vous ne pouvez pas tirer parti des conceptions HTML/CSSexistantes.

  2. Modèle de document propriétaire : MigraDocnécessite l'apprentissage d'un modèle de document unique avec des concepts comme AddSection(), AddParagraph(), AddTable(), AddRow(), et AddCell(). Cette courbe d'apprentissage abrupte est particulièrement difficile à suivre pour les développeurs ayant une formation en développement web.

  3. Options de style limitées : Bien que MigraDocoffre une gestion robuste de la structure des documents, ses capacités de style sont modestes comparées aux outils Web modernes. Les propriétés comme Format.Font.Size, Format.Font.Bold, et Format.Alignment sont limitées par rapport au CSS3 complet.

  4. Code verbeux : La création de mises en page, même simples, nécessite des dizaines de lignes de code. Un tableau de base avec des en-têtes peut nécessiter 15 à 20 lignes de code MigraDoc.

  5. Absence de prise en charge de JavaScript : MigraDocne peut pas afficher de contenu dynamique ni exécuter de JavaScript, ce qui limite les options pour les graphiques modernes et les éléments interactifs.

  6. Graphiques basiques : les fonctionnalités graphiques de MigraDocsont limitées par rapport aux bibliothèques graphiques JavaScriptmodernes comme Chart.js ou D3.

Comparaison MigraDocvs IronPDF

Fonction MigraDoc IronPDF
Définition du contenu Programmatique (document/section/paragraphe) HTML/CSS
Courbe d'apprentissage Steep (DOM propriétaire) Facile (compétences web)
Stylisme Propriétés limitées CSS3 complet
JavaScript None Exécution complète de Chromium
Tableaux Définition manuelle des colonnes et des lignes HTML <table> avec CSS
Graphiques Graphiques MigraDocde base Toute bibliothèque graphique JavaScript
Images Dimensionnement/positionnement manuel HTML standard <img>
Mises en page réactives Non pris en charge Flexbox, Grille
Licence Open Source (MIT) Commercial

Pour les équipes ciblant le .NET moderne,IronPDF permet aux développeurs d'utiliser des compétences HTML/CSSfamilières plutôt que d'apprendre un modèle de document propriétaire.


Évaluation de la complexité de la migration

Estimation de l'effort par fonctionnalité

Fonction Complexité de la migration
Texte simple Très faible
Tableaux Faible
En-têtes/Pieds de page Faible
Styles Moyen
Images Faible
Graphiques Moyen

Changement de paradigme

Le Shift fondamental de cette migration MigraDocréside dans le passage d' une construction de documents programmatique à un rendu HTML prioritaire :

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

Ce changement de paradigme réduit considérablement la complexité du code tout en offrant des capacités de stylisme illimitées grâce à CSS.


Avant de commencer

Prérequis

  1. Environnement .NET : .NET Framework 4.6.2+ ou .NET Core 3.1+ / .NET 5/6/7/8/9+
  2. Accès à NuGet : possibilité d'installer des packages NuGet
  3. Licence IronPDF : Obtenez votre clé de licence sur IronPDF

Modifications du paquet NuGet

# 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

Configuration de la licence

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

Identifier l'utilisation de MigraDoc

# 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

Référence API complète

Mappages de classes

Classe MigraDoc Équivalent d'IronPDF
Document ChromePdfRenderer
Section HTML <body> ou <div>
Paragraph HTML <p>, <h1>, etc.
FormattedText HTML <span>, <strong>, etc.
Table HTML <table>
Row HTML <tr>
Column HTML <col> ou CSS
Cell HTML <td>, <th>
PdfDocumentRenderer ChromePdfRenderer

Mise en correspondance des méthodes

Méthode MigraDoc Équivalent d'IronPDF
document.AddSection() Structure HTML
section.AddParagraph(text) <p>text</p>
section.AddTable() <table>
table.AddColumn(width) Propriété CSS width
table.AddRow() <tr>
row.Cells[n].AddParagraph() <td>content</td>
renderer.RenderDocument() RenderHtmlAsPdf(html)
pdfDocument.Save(path) pdf.SaveAs(path)

Mappages de caractères de remplacement (en-têtes/pieds de page)

Méthode MigraDoc IronPDF Placeholder
AddPageField() {page}
AddNumPagesField() {total-pages}
AddDateField() {date}

Exemples de migration de code

Exemple 1 : HTML de base à PDF (la différence fondamentale)

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

Après (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

Cet exemple illustre la différence fondamentale entre MigraDocet IronPDF. MigraDocnécessite la création d'un Document, l'ajout d'un Section, l'ajout d'un Paragraph, l'utilisation de AddFormattedText() avec TextFormat.Bold, la configuration de Format.Font.Size, la création d'un PdfDocumentRenderer, l'affectation du document, l'appel de RenderDocument(), et enfin l'enregistrement. Il s'agit de plus de 10 lignes de code avec plusieurs objets.

IronPDF permet d'obtenir le même résultat en 3 lignes : création d'un moteur de rendu, rendu HTML et sauvegarde. La balise HTML <h1> fournit naturellement le style d'en-tête gras et grand. Voir la documentation HTML vers PDF pour des options de rendu supplémentaires.

Exemple 2 : Création de tableaux

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

Après (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

La création de table MigraDocnécessite la compréhension de la hiérarchie Table, Column, Row, et Cell. Vous devez explicitement ajouter des colonnes avec AddColumn(), créer des lignes avec AddRow(), accéder aux cellules par index avec Cells[n], et ajouter du contenu avec AddParagraph(). La bordure est définie via table.Borders.Width.

IronPDF utilise la syntaxe de tableau HTML standard que tout développeur web connaît. L'attribut border='1' fournit la bordure, les éléments <th> créent des cellules d'en-tête, et les éléments <td> créent des cellules de données. Des feuilles de style CSS peuvent être ajoutées pour une mise en forme avancée, comme les bandes zébrées, les effets de survol ou les mises en page réactives. En savoir plus sur la création de tableaux dans les PDF.

Exemple 3 : En-têtes et pieds de page avec numéros de page

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

Après (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

Les en-têtes et pieds de page MigraDocnécessitent l'accès à section.Headers.Primary et section.Footers.Primary, la création de paragraphes à l'intérieur, l'ajout de texte avec AddText(), et l'utilisation de méthodes spéciales comme AddPageField() pour le contenu dynamique. L'alignement nécessite la configuration de Format.Alignment.

IronPDF configure les en-têtes et pieds de page sur RenderingOptions.TextHeader / RenderingOptions.TextFooter en utilisant TextHeaderFooter, avec des régions LeftText, CenterText, et RightText. Le placeholder {page} insère automatiquement le numéro de page actuel. Pour des mises en page plus riches, utilisez HtmlHeader / HtmlFooter avec HtmlHeaderFooter pour un support HTML/CSScomplet. Voir la documentation sur les en-têtes et pieds de page pour les options avancées.


Notes de migration essentielles

Syntaxe de l'espace réservé au numéro de page

Le changement le plus important pour les en-têtes et les pieds de page est la syntaxe des espaces réservés :

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

Formater les propriétés en CSS

Les propriétés Format de MigraDocse mapent au 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

Conversion d'unités

MigraDoc utilise différentes unités ; Les marges d'IronPDF sont exprimées en millimètres :

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

Modification du modèle de rendu

L'ensemble du modèle de rendu change :

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

Dépannage

Sujet 1 : Document/Section introuvable

Problème : Les classes Document et Section n'existent pas dans IronPDF.

Solution : Remplacer par une structure 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

Sujet 2 : AddParagraph Not Found

Problème : La méthode AddParagraph() n'existe pas.

Solution : Utiliser des éléments HTML :

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

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

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

Sujet 3 : PdfDocumentRenderer introuvable

Problème : La classe PdfDocumentRenderer n'existe pas.

Solution: Use 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

Edition 4 : AddPageField ne fonctionne pas

Problème : La méthode AddPageField() n'existe pas.

Solution : Utiliser la syntaxe des espaces réservés 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

Liste de contrôle de la migration

Pré-migration

  • Identifier toutes les instructions using de MigraDoc
  • Structures des tableaux de documents (colonnes, lignes, style)
  • Remarquez l'utilisation du contenu de l'en-tête/du pied de page et des champs de page
  • Lister les styles personnalisés définis avec document.Styles
  • Obtenir une clé de licence IronPDF

Modifications du paquet

  • Supprimer les packages PDFsharp-MigraDoc, PDFsharp-MigraDoc-GDI, et PDFsharp-MigraDoc-WPF
  • Installer le package NuGet IronPdf : dotnet add package IronPdf
  • Mettre à jour les importations d'espace de noms

Modifications du code

  • Ajouter la configuration de la clé de licence au démarrage
  • Remplacer Section par une structure HTML
  • Convertir AddParagraph() en éléments HTML <p>
  • Convertir Cell en structure HTML <table>
  • Remplacer AddPageField() par le placeholder {page}
  • Remplacer AddNumPagesField() par le placeholder {total-pages}
  • Convertir les propriétés Format en styles CSS
  • Remplacer PdfDocumentRenderer par ChromePdfRenderer

Essai

  • Comparer le rendu visuel des anciens et des nouveaux fichiers PDF
  • Vérifiez que les sauts de page fonctionnent correctement.
  • Vérifier l'affichage de l'en-tête/du pied de page et les numéros de page
  • Valider la mise en forme et les bordures du tableau
  • Test avec des documents complexes de plusieurs pages

Après la migration

  • Supprimer la documentation relative à MigraDoc
  • Mettre à jour les supports de formation de l'équipe
  • Documenter les nouveaux emplacements des modèles HTML

[[i: (MigraDoc et PDFSharp sont des marques déposées de leurs propriétaires respectifs. Ce site n'est pas affilié à, approuvé par, ou sponsorisé par empira Software GmbH. Tous les noms de produits, logos et marques sont la propriété de leurs propriétaires respectifs. Les comparaisons sont à titre informatif uniquement et reflètent les informations publiquement disponibles au moment de l'écriture.)]]

Curtis Chau
Rédacteur technique

Curtis Chau détient un baccalauréat en informatique (Université de Carleton) et se spécialise dans le développement front-end avec expertise en Node.js, TypeScript, JavaScript et React. Passionné par la création d'interfaces utilisateur intuitives et esthétiquement plaisantes, Curtis aime travailler avec des frameworks modernes ...

Lire la suite

Équipe de soutien Iron

Nous sommes en ligne 24 heures sur 24, 5 jours sur 7.
Chat
Email
Appelez-moi