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 :
-
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,ParagraphetTable— vous ne pouvez pas tirer parti des conceptions HTML/CSSexistantes. -
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(), etAddCell(). Cette courbe d'apprentissage abrupte est particulièrement difficile à suivre pour les développeurs ayant une formation en développement web. -
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, etFormat.Alignmentsont limitées par rapport au CSS3 complet. -
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.
-
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.
- 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
- Environnement .NET : .NET Framework 4.6.2+ ou .NET Core 3.1+ / .NET 5/6/7/8/9+
- Accès à NuGet : possibilité d'installer des packages NuGet
- 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
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"
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" .
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
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
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
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
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
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
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}"
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;">
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;">
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")
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)
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>"
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()
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}"
}
Liste de contrôle de la migration
Pré-migration
- Identifier toutes les instructions
usingde 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, etPDFsharp-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
Sectionpar une structure HTML - Convertir
AddParagraph()en éléments HTML<p> - Convertir
Cellen structure HTML<table> - Remplacer
AddPageField()par le placeholder{page} - Remplacer
AddNumPagesField()par le placeholder{total-pages} - Convertir les propriétés
Formaten styles CSS - Remplacer
PdfDocumentRendererparChromePdfRenderer
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.)]]

