Comment migrer de GemBox PDF vers IronPDF en C#
La migration de GemBox PDFversIronPDFtransforme votre flux de travail PDF .NET, qui passe d'une construction de document programmatique basée sur les coordonnées à un rendu moderne basé sur HTML/CSS. Ce guide propose un chemin de migration complet, étape par étape, qui élimine les limites de paragraphes et simplifie la création de documents pour les développeurs .NET professionnels.
Pourquoi migrer de GemBox PDFvers IronPDF
Les défis PDF de GemBox
GemBox PDF est un composant PDF .NET performant, mais il présente des limites importantes qui affectent le développement dans le monde réel :
-
Limite de 20 paragraphes dans la version gratuite : La version gratuite vous limite à 20 paragraphes, et les cellules du tableau sont comptabilisées dans cette limite. Un simple tableau de 10 lignes et 5 colonnes utilise 50 "paragraphes", ce qui rend la version gratuite inutilisable même pour des documents commerciaux de base.
-
Aucune conversion HTML vers PDF : GemBox PDFnécessite une construction de document programmatique. Vous devez calculer les coordonnées et positionner manuellement chaque élément - il n'y a pas de simple capacité de "rendre ce HTML".
-
Mise en page basée sur les coordonnées : contrairement à HTML/CSS où la mise en page est fluide, GemBox PDFvous oblige à calculer les positions X/Y exactes de chaque élément de texte, image et forme.
-
Ensemble de fonctionnalités limité : comparé aux bibliothèques PDF complètes, GemBox PDFse concentre sur les opérations de base (lecture, écriture, fusion, division) sans fonctionnalités avancées telles que le rendu HTML ou la prise en charge CSS moderne.
-
Programmation uniquement : Chaque modification de conception nécessite des modifications de code. Vous souhaitez modifier l'espacement ? Recalculer les coordonnées. Vous souhaitez une taille de police différente ? Ajustez toutes les positions Y en dessous.
-
Comptage des cellules de tableau : La limite de paragraphes prend en compte les cellules du tableau, et non seulement les paragraphes visibles. De ce fait, la version gratuite est pratiquement inutilisable pour les documents contenant des tableaux.
- Courbe d'apprentissage pour la conception : les développeurs doivent penser en coordonnées plutôt qu'en flux de documents, ce qui rend des tâches simples comme " ajouter un paragraphe " étonnamment complexes.
Comparaison GemBox PDFvs IronPDF
| Aspect | GemBox PDF | IronPDF |
|---|---|---|
| Limites de la version gratuite | 20 paragraphes (y compris les cellules de tableau) | Filigrane uniquement, aucune limite de contenu |
| HTML vers PDF | Non pris en charge | Moteur Chromium complet |
| Approche de la mise en page | Basé sur les coordonnées, manuel | Mise en page HTML/CSS |
| Tableaux | Compter dans la limite des paragraphes | Illimité, utiliser des tableaux HTML |
| CSS moderne | Sans objet | Flexbox, grille, animations CSS3 |
| Support JavaScript | Sans objet | Exécution complète de JavaScript |
| Modifications de la conception | Recalculer les coordonnées | Édition de HTML/CSS |
| Courbe d'apprentissage | Système de coordonnées PDF | HTML/CSS (familier du web) |
Pour les équipes qui prévoient l'adoption de .NET 10 et C# 14 jusqu'en 2025 et 2026,IronPDFconstitue une base à l'épreuve du temps qui s'appuie sur des technologies web familières pour la génération de PDF.
Évaluation de la complexité de la migration
Estimation de l'effort par fonctionnalité
| Fonction | Complexité de la migration |
|---|---|
| Charger/Enregistrer des PDF | Très faible |
| Fusionner des PDF | Très faible |
| Diviser les PDF | Faible |
| Extraction de texte | Très faible |
| Ajouter du texte | Moyen |
| Tableaux | Faible |
| Images | Faible |
| Filigranes | Faible |
| Protection par mot de passe | Moyen |
| Champs de formulaire | Moyen |
Changement de paradigme
Le changement le plus important apporté par cette migration GemBox PDFest le passage d' une mise en page basée sur des coordonnées à une mise en page HTML/CSS :
GemBox PDF : "Dessiner un texte à la position (100, 700)"
IronPDF : "Rendre ce HTML avec un style CSS"
Ce changement de paradigme est généralement plus facile pour les développeurs familiarisés avec les technologies web, mais il nécessite de penser les PDF différemment.
Avant de commencer
Prérequis
- Version .NET :IronPDFprend en charge .NET Framework 4.6.2+ et .NET Core 2.0+ / .NET 5/6/7/8/9+.
- Clé de licence : Obtenez votre clé de licenceIronPDFsur IronPDF
- Sauvegarde : Créer une branche pour les travaux de migration
- Connaissances HTML/CSS : Une familiarité de base est un atout, mais n'est pas obligatoire.
Identifier toutes les utilisations de GemBox PDF
# Find all GemBox PDFreferences
grep -r "GemBox\.Pdf\|PdfDocument\|PdfPage\|PdfFormattedText\|ComponentInfo\.SetLicense" --include="*.cs" .
# Find package references
grep -r "GemBox\.Pdf" --include="*.csproj" .
# Find all GemBox PDFreferences
grep -r "GemBox\.Pdf\|PdfDocument\|PdfPage\|PdfFormattedText\|ComponentInfo\.SetLicense" --include="*.cs" .
# Find package references
grep -r "GemBox\.Pdf" --include="*.csproj" .
Modifications du paquet NuGet
# Remove GemBox PDF
dotnet remove package GemBox.Pdf
# Install IronPDF
dotnet add package IronPdf
# Remove GemBox PDF
dotnet remove package GemBox.Pdf
# Install IronPDF
dotnet add package IronPdf
Migration rapide
Étape 1 : Mise à jour de la configuration de la licence
Avant (GemBox PDF):
// Must call before any GemBox PDFoperations
ComponentInfo.SetLicense("FREE-LIMITED-KEY");
// Or for professional:
ComponentInfo.SetLicense("YOUR-PROFESSIONAL-LICENSE");
// Must call before any GemBox PDFoperations
ComponentInfo.SetLicense("FREE-LIMITED-KEY");
// Or for professional:
ComponentInfo.SetLicense("YOUR-PROFESSIONAL-LICENSE");
' Must call before any GemBox PDF operations
ComponentInfo.SetLicense("FREE-LIMITED-KEY")
' Or for professional:
ComponentInfo.SetLicense("YOUR-PROFESSIONAL-LICENSE")
Après (IronPDF):
// Set once at application startup
IronPdf.License.LicenseKey = "YOUR-IRONPDF-LICENSE-KEY";
// Or in appsettings.json:
// { "IronPdf.License.LicenseKey": "YOUR-LICENSE-KEY" }
// Set once at application startup
IronPdf.License.LicenseKey = "YOUR-IRONPDF-LICENSE-KEY";
// Or in appsettings.json:
// { "IronPdf.License.LicenseKey": "YOUR-LICENSE-KEY" }
' Set once at application startup
IronPdf.License.LicenseKey = "YOUR-IRONPDF-LICENSE-KEY"
' Or in appsettings.json:
' { "IronPdf.License.LicenseKey": "YOUR-LICENSE-KEY" }
Étape 2 : mise à jour des importations de l'espace de noms
// Before (GemBox PDF)
using GemBox.Pdf;
using GemBox.Pdf.Content;
// After (IronPDF)
using IronPdf;
using IronPdf.Editing;
// Before (GemBox PDF)
using GemBox.Pdf;
using GemBox.Pdf.Content;
// After (IronPDF)
using IronPdf;
using IronPdf.Editing;
Imports IronPdf
Imports IronPdf.Editing
Étape 3 : Modèle de conversion de base
Avant (GemBox PDF):
using GemBox.Pdf;
using GemBox.Pdf.Content;
ComponentInfo.SetLicense("FREE-LIMITED-KEY");
using (var document = new PdfDocument())
{
var page = document.Pages.Add();
var formattedText = new PdfFormattedText()
{
Text = "Hello World",
FontSize = 24
};
page.Content.DrawText(formattedText, new PdfPoint(100, 700));
document.Save("output.pdf");
}
using GemBox.Pdf;
using GemBox.Pdf.Content;
ComponentInfo.SetLicense("FREE-LIMITED-KEY");
using (var document = new PdfDocument())
{
var page = document.Pages.Add();
var formattedText = new PdfFormattedText()
{
Text = "Hello World",
FontSize = 24
};
page.Content.DrawText(formattedText, new PdfPoint(100, 700));
document.Save("output.pdf");
}
Imports GemBox.Pdf
Imports GemBox.Pdf.Content
ComponentInfo.SetLicense("FREE-LIMITED-KEY")
Using document As New PdfDocument()
Dim page = document.Pages.Add()
Dim formattedText As New PdfFormattedText() With {
.Text = "Hello World",
.FontSize = 24
}
page.Content.DrawText(formattedText, New PdfPoint(100, 700))
document.Save("output.pdf")
End Using
Après (IronPDF):
using IronPdf;
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1 style='font-size:24px;'>Hello World</h1>");
pdf.SaveAs("output.pdf");
using IronPdf;
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1 style='font-size:24px;'>Hello World</h1>");
pdf.SaveAs("output.pdf");
Imports IronPdf
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
Dim renderer As New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf("<h1 style='font-size:24px;'>Hello World</h1>")
pdf.SaveAs("output.pdf")
Différences Clés :
- Aucun calcul de coordonnées n'est nécessaire
- HTML/CSS au lieu de la mise en page programmatique
- Aucune limite de paragraphe
- Un code plus simple et plus lisible
Référence API complète
Cartographie des espaces de noms
| GemBox PDF | IronPDF |
|---|---|
GemBox.Pdf |
IronPdf |
GemBox.Pdf.Content |
IronPdf (le contenu est HTML) |
GemBox.Pdf.Security |
IronPdf (Paramètres de sécurité) |
GemBox.Pdf.Forms |
IronPdf.Forms |
Mappage des classes de base
| GemBox PDF | IronPDF | Description du projet |
|---|---|---|
PdfDocument |
PdfDocument |
Classe du document PDF principal |
PdfPage |
PdfDocument.Pages[i] |
Représentation des pages |
PdfContent |
N/A (utiliser HTML) | Contenu de la page |
PdfFormattedText |
N/A (utiliser HTML) | Texte formaté |
PdfPoint |
N/A (utiliser le positionnement CSS) | Coordonner le positionnement |
ComponentInfo.SetLicense() |
IronPdf.License.LicenseKey |
Gestion des licences |
Opérations documentaires
| GemBox PDF | IronPDF |
|---|---|
new PdfDocument() |
new PdfDocument() |
PdfDocument.Load(path) |
PdfDocument.FromFile(path) |
PdfDocument.Load(stream) |
PdfDocument.FromStream(stream) |
document.Save(path) |
pdf.SaveAs(path) |
document.Save(stream) |
pdf.Stream ou pdf.BinaryData |
Opérations de la page
| GemBox PDF | IronPDF |
|---|---|
document.Pages.Add() |
Création via le rendu HTML |
document.Pages.Count |
pdf.PageCount |
document.Pages[index] |
pdf.Pages[index] |
document.Pages.AddClone(pages) |
PdfDocument.Merge() |
Opérations de texte et de contenu
| GemBox PDF | IronPDF |
|---|---|
new PdfFormattedText() |
Chaîne HTML |
formattedText.FontSize = 12 |
CSS font-size: 12pt |
formattedText.Font = ... |
CSS font-family: ... |
page.Content.DrawText(text, point) |
renderer.RenderHtmlAsPdf(html) |
page.Content.GetText() |
pdf.ExtractTextFromPage(i) |
Exemples de migration de code
Exemple 1 : Conversion HTML vers PDF
Avant (GemBox PDF):
// NuGet: Install-Package GemBox.Pdf
using GemBox.Pdf;
using GemBox.Pdf.Content;
class Program
{
static void Main()
{
ComponentInfo.SetLicense("FREE-LIMITED-KEY");
var document = PdfDocument.Load("input.html");
document.Save("output.pdf");
}
}
// NuGet: Install-Package GemBox.Pdf
using GemBox.Pdf;
using GemBox.Pdf.Content;
class Program
{
static void Main()
{
ComponentInfo.SetLicense("FREE-LIMITED-KEY");
var document = PdfDocument.Load("input.html");
document.Save("output.pdf");
}
}
Imports GemBox.Pdf
Imports GemBox.Pdf.Content
Module Program
Sub Main()
ComponentInfo.SetLicense("FREE-LIMITED-KEY")
Dim document = PdfDocument.Load("input.html")
document.Save("output.pdf")
End Sub
End Module
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
IronPDF utilise un moteur Chromium moderne pour un rendu HTML/CSS/ JavaScript précis. Contrairement à la prise en charge limitée du HTML par GemBox PDF,IronPDFpeut rendre n'importe quel contenu HTML avec une prise en charge complète de CSS3 et de JavaScript. Voir la documentation HTML vers PDF pour plus d'options de rendu.
Exemple 2 : Fusionner des fichiers PDF
Avant (GemBox PDF):
// NuGet: Install-Package GemBox.Pdf
using GemBox.Pdf;
using System.Linq;
class Program
{
static void Main()
{
ComponentInfo.SetLicense("FREE-LIMITED-KEY");
using (var document = new PdfDocument())
{
var source1 = PdfDocument.Load("document1.pdf");
var source2 = PdfDocument.Load("document2.pdf");
document.Pages.AddClone(source1.Pages);
document.Pages.AddClone(source2.Pages);
document.Save("merged.pdf");
}
}
}
// NuGet: Install-Package GemBox.Pdf
using GemBox.Pdf;
using System.Linq;
class Program
{
static void Main()
{
ComponentInfo.SetLicense("FREE-LIMITED-KEY");
using (var document = new PdfDocument())
{
var source1 = PdfDocument.Load("document1.pdf");
var source2 = PdfDocument.Load("document2.pdf");
document.Pages.AddClone(source1.Pages);
document.Pages.AddClone(source2.Pages);
document.Save("merged.pdf");
}
}
}
Imports GemBox.Pdf
Imports System.Linq
Module Program
Sub Main()
ComponentInfo.SetLicense("FREE-LIMITED-KEY")
Using document As New PdfDocument()
Dim source1 = PdfDocument.Load("document1.pdf")
Dim source2 = PdfDocument.Load("document2.pdf")
document.Pages.AddClone(source1.Pages)
document.Pages.AddClone(source2.Pages)
document.Save("merged.pdf")
End Using
End Sub
End Module
Après (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main()
{
var pdf1 = PdfDocument.FromFile("document1.pdf");
var pdf2 = PdfDocument.FromFile("document2.pdf");
var merged = PdfDocument.Merge(pdf1, pdf2);
merged.SaveAs("merged.pdf");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main()
{
var pdf1 = PdfDocument.FromFile("document1.pdf");
var pdf2 = PdfDocument.FromFile("document2.pdf");
var merged = PdfDocument.Merge(pdf1, pdf2);
merged.SaveAs("merged.pdf");
}
}
Imports IronPdf
Class Program
Shared Sub Main()
Dim pdf1 = PdfDocument.FromFile("document1.pdf")
Dim pdf2 = PdfDocument.FromFile("document2.pdf")
Dim merged = PdfDocument.Merge(pdf1, pdf2)
merged.SaveAs("merged.pdf")
End Sub
End Class
La méthode statique Merge d'IronPDF simplifie l'opération : pas besoin de créer un document vide et de cloner les pages individuellement. En savoir plus sur la fusion et la division de PDF.
Exemple 3 : ajouter du texte à un PDF
Avant (GemBox PDF):
// NuGet: Install-Package GemBox.Pdf
using GemBox.Pdf;
using GemBox.Pdf.Content;
class Program
{
static void Main()
{
ComponentInfo.SetLicense("FREE-LIMITED-KEY");
using (var document = new PdfDocument())
{
var page = document.Pages.Add();
var formattedText = new PdfFormattedText()
{
Text = "Hello World",
FontSize = 24
};
page.Content.DrawText(formattedText, new PdfPoint(100, 700));
document.Save("output.pdf");
}
}
}
// NuGet: Install-Package GemBox.Pdf
using GemBox.Pdf;
using GemBox.Pdf.Content;
class Program
{
static void Main()
{
ComponentInfo.SetLicense("FREE-LIMITED-KEY");
using (var document = new PdfDocument())
{
var page = document.Pages.Add();
var formattedText = new PdfFormattedText()
{
Text = "Hello World",
FontSize = 24
};
page.Content.DrawText(formattedText, new PdfPoint(100, 700));
document.Save("output.pdf");
}
}
}
Imports GemBox.Pdf
Imports GemBox.Pdf.Content
Module Program
Sub Main()
ComponentInfo.SetLicense("FREE-LIMITED-KEY")
Using document As New PdfDocument()
Dim page = document.Pages.Add()
Dim formattedText As New PdfFormattedText() With {
.Text = "Hello World",
.FontSize = 24
}
page.Content.DrawText(formattedText, New PdfPoint(100, 700))
document.Save("output.pdf")
End Using
End Sub
End Module
Après (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Editing;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<p>Original Content</p>");
var stamper = new TextStamper()
{
Text = "Hello World",
FontSize = 24,
HorizontalOffset = 100,
VerticalOffset = 700
};
pdf.ApplyStamp(stamper);
pdf.SaveAs("output.pdf");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Editing;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<p>Original Content</p>");
var stamper = new TextStamper()
{
Text = "Hello World",
FontSize = 24,
HorizontalOffset = 100,
VerticalOffset = 700
};
pdf.ApplyStamp(stamper);
pdf.SaveAs("output.pdf");
}
}
Imports IronPdf
Imports IronPdf.Editing
Class Program
Shared Sub Main()
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf("<p>Original Content</p>")
Dim stamper = New TextStamper() With {
.Text = "Hello World",
.FontSize = 24,
.HorizontalOffset = 100,
.VerticalOffset = 700
}
pdf.ApplyStamp(stamper)
pdf.SaveAs("output.pdf")
End Sub
End Class
Pour ajouter du texte aux PDF existants,IronPDFfournit la classe TextStamper qui offre un contrôle précis du positionnement. Pour les nouveaux documents, il suffit d'inclure le texte dans votre modèle HTML. Consultez la documentation relative à l'estampage pour connaître les options supplémentaires.
Exemple 4 : Création de tableaux (la plus grande amélioration !)
Avant (GemBox PDF) - Chaque cellule compte pour la limite de 20 paragraphes:
using GemBox.Pdf;
using GemBox.Pdf.Content;
ComponentInfo.SetLicense("FREE-LIMITED-KEY");
using (var document = new PdfDocument())
{
var page = document.Pages.Add();
double y = 700;
double[] xPositions = { 50, 200, 300, 400 };
// Headers (4 paragraphs)
var headers = new[] { "Product", "Price", "Qty", "Total" };
for (int i = 0; i < headers.Length; i++)
{
var text = new PdfFormattedText { Text = headers[i], FontSize = 12 };
page.Content.DrawText(text, new PdfPoint(xPositions[i], y));
}
y -= 20;
// Data rows (4 paragraphs per row!)
// Can only add a few rows before hitting 20-paragraph limit!
document.Save("products.pdf");
}
using GemBox.Pdf;
using GemBox.Pdf.Content;
ComponentInfo.SetLicense("FREE-LIMITED-KEY");
using (var document = new PdfDocument())
{
var page = document.Pages.Add();
double y = 700;
double[] xPositions = { 50, 200, 300, 400 };
// Headers (4 paragraphs)
var headers = new[] { "Product", "Price", "Qty", "Total" };
for (int i = 0; i < headers.Length; i++)
{
var text = new PdfFormattedText { Text = headers[i], FontSize = 12 };
page.Content.DrawText(text, new PdfPoint(xPositions[i], y));
}
y -= 20;
// Data rows (4 paragraphs per row!)
// Can only add a few rows before hitting 20-paragraph limit!
document.Save("products.pdf");
}
Imports GemBox.Pdf
Imports GemBox.Pdf.Content
ComponentInfo.SetLicense("FREE-LIMITED-KEY")
Using document As New PdfDocument()
Dim page = document.Pages.Add()
Dim y As Double = 700
Dim xPositions As Double() = {50, 200, 300, 400}
' Headers (4 paragraphs)
Dim headers = {"Product", "Price", "Qty", "Total"}
For i As Integer = 0 To headers.Length - 1
Dim text As New PdfFormattedText With {.Text = headers(i), .FontSize = 12}
page.Content.DrawText(text, New PdfPoint(xPositions(i), y))
Next
y -= 20
' Data rows (4 paragraphs per row!)
' Can only add a few rows before hitting 20-paragraph limit!
document.Save("products.pdf")
End Using
Après (IronPDF) - Pas de limites, des tableaux HTML corrects:
using IronPdf;
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
var html = @"
<html>
<head>
<style>
table { border-collapse: collapse; width: 100%; }
th, td { border: 1px solid #ddd; padding: 8px; text-align: left; }
th { background-color: #4CAF50; color: white; }
tr:nth-child(even) { background-color: #f2f2f2; }
</style>
</head>
<body>
<table>
<thead>
<tr>
<th>Product</th>
<th>Price</th>
<th>Qty</th>
<th>Total</th>
</tr>
</thead>
<tbody>
<tr><td>Widget A</td><td>$19.99</td><td>5</td><td>$99.95</td></tr>
<tr><td>Widget B</td><td>$29.99</td><td>3</td><td>$89.97</td></tr>
</tbody>
</table>
</body>
</html>";
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("products.pdf");
using IronPdf;
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
var html = @"
<html>
<head>
<style>
table { border-collapse: collapse; width: 100%; }
th, td { border: 1px solid #ddd; padding: 8px; text-align: left; }
th { background-color: #4CAF50; color: white; }
tr:nth-child(even) { background-color: #f2f2f2; }
</style>
</head>
<body>
<table>
<thead>
<tr>
<th>Product</th>
<th>Price</th>
<th>Qty</th>
<th>Total</th>
</tr>
</thead>
<tbody>
<tr><td>Widget A</td><td>$19.99</td><td>5</td><td>$99.95</td></tr>
<tr><td>Widget B</td><td>$29.99</td><td>3</td><td>$89.97</td></tr>
</tbody>
</table>
</body>
</html>";
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("products.pdf");
Imports IronPdf
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
Dim html As String = "
<html>
<head>
<style>
table { border-collapse: collapse; width: 100%; }
th, td { border: 1px solid #ddd; padding: 8px; text-align: left; }
th { background-color: #4CAF50; color: white; }
tr:nth-child(even) { background-color: #f2f2f2; }
</style>
</head>
<body>
<table>
<thead>
<tr>
<th>Product</th>
<th>Price</th>
<th>Qty</th>
<th>Total</th>
</tr>
</thead>
<tbody>
<tr><td>Widget A</td><td>$19.99</td><td>5</td><td>$99.95</td></tr>
<tr><td>Widget B</td><td>$29.99</td><td>3</td><td>$89.97</td></tr>
</tbody>
</table>
</body>
</html>"
Dim renderer As New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("products.pdf")
Il s'agit de l'amélioration la plus significative de la migration PDF de GemBox. Les tableaux qui étaient impossibles dans la version gratuite de GemBox PDFfonctionnent parfaitement dansIronPDFavec une prise en charge complète du style CSS.
Notes de migration essentielles
Coordonner au positionnement CSS
Si vous avez besoin d'un positionnement parfait au pixel près (similaire au système de coordonnées de GemBox PDF), utilisez le positionnement absolu CSS :
<div style="position:absolute; left:50px; top:750px; font-size:24px;">
Text positioned at specific coordinates
</div>
<div style="position:absolute; left:50px; top:750px; font-size:24px;">
Text positioned at specific coordinates
</div>
Indexation des pages
GemBox PDF etIronPDFutilisent tous deux des pages indexées à 0, ce qui rend cet aspect de la migration simple :
// GemBox PDF
var page = document.Pages[0];
// IronPDF
var page = pdf.Pages[0];
// GemBox PDF
var page = document.Pages[0];
// IronPDF
var page = pdf.Pages[0];
' GemBox PDF
Dim page = document.Pages(0)
' IronPDF
Dim page = pdf.Pages(0)
Paramètres de sécurité
// GemBox PDF
document.SaveOptions.SetPasswordEncryption(userPassword, ownerPassword);
// IronPDF
pdf.SecuritySettings.UserPassword = "userPassword";
pdf.SecuritySettings.OwnerPassword = "ownerPassword";
// GemBox PDF
document.SaveOptions.SetPasswordEncryption(userPassword, ownerPassword);
// IronPDF
pdf.SecuritySettings.UserPassword = "userPassword";
pdf.SecuritySettings.OwnerPassword = "ownerPassword";
' GemBox PDF
document.SaveOptions.SetPasswordEncryption(userPassword, ownerPassword)
' IronPDF
pdf.SecuritySettings.UserPassword = "userPassword"
pdf.SecuritySettings.OwnerPassword = "ownerPassword"
Dépannage
Édition 1 : PdfFormattedText introuvable
Problème : PdfFormattedText n'existe pas dans IronPDF.
Solution : Utiliser HTML avec style CSS :
// GemBox PDF
var text = new PdfFormattedText { Text = "Hello", FontSize = 24 };
// IronPDF
var html = "<p style='font-size:24px;'>Hello</p>";
var pdf = renderer.RenderHtmlAsPdf(html);
// GemBox PDF
var text = new PdfFormattedText { Text = "Hello", FontSize = 24 };
// IronPDF
var html = "<p style='font-size:24px;'>Hello</p>";
var pdf = renderer.RenderHtmlAsPdf(html);
' GemBox PDF
Dim text As New PdfFormattedText With {.Text = "Hello", .FontSize = 24}
' IronPDF
Dim html As String = "<p style='font-size:24px;'>Hello</p>"
Dim pdf = renderer.RenderHtmlAsPdf(html)
Sujet 2 : Méthode DrawText introuvable
Problème : page.Content.DrawText() non disponible.
Solution : Créez du contenu via le rendu HTML ou utilisez des tampons :
// For new documents - render HTML
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Content</h1>");
// For existing documents - use stampers
var stamper = new TextStamper() { Text = "Added Text" };
pdf.ApplyStamp(stamper);
// For new documents - render HTML
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Content</h1>");
// For existing documents - use stampers
var stamper = new TextStamper() { Text = "Added Text" };
pdf.ApplyStamp(stamper);
Imports System
' For new documents - render HTML
Dim renderer As New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf("<h1>Content</h1>")
' For existing documents - use stampers
Dim stamper As New TextStamper() With {.Text = "Added Text"}
pdf.ApplyStamp(stamper)
Enjeu 3 : Différences de chargement des documents
Problème : PdfDocument.Load() introuvable.
Solution : Utilisez PdfDocument.FromFile() ou FromStream() :
// GemBox PDF
var doc = PdfDocument.Load("input.pdf");
// IronPDF
var pdf = PdfDocument.FromFile("input.pdf");
// GemBox PDF
var doc = PdfDocument.Load("input.pdf");
// IronPDF
var pdf = PdfDocument.FromFile("input.pdf");
Imports GemBox.Pdf
Imports IronPdf
Dim doc = PdfDocument.Load("input.pdf")
Dim pdf = PdfDocument.FromFile("input.pdf")
Edition 4 : Différences entre les méthodes d'enregistrement
Problème : document.Save() La signature de la méthode diffère.
Solution : Utilisez SaveAs() :
// GemBox PDF
document.Save("output.pdf");
// IronPDF
pdf.SaveAs("output.pdf");
// GemBox PDF
document.Save("output.pdf");
// IronPDF
pdf.SaveAs("output.pdf");
' GemBox PDF
document.Save("output.pdf")
' IronPDF
pdf.SaveAs("output.pdf")
Liste de contrôle de la migration
Pré-migration
- Recenser toutes les utilisations de GemBox PDFdans le code source
- Identifier les mises en page basées sur des coordonnées qui nécessitent une conversion HTML
- Évaluez les limites de paragraphes actuelles qui affectent votre code
- Obtenir une clé de licence IronPDF
- Créer une branche de migration dans le système de contrôle de version
Migration de code
- Supprimer le package NuGet GemBox PDF :
dotnet remove package GemBox.Pdf - Installez le package NuGet IronPDF :
dotnet add package IronPdf - Mettre à jour les importations d'espace de noms
- Remplacez
ComponentInfo.SetLicense()parIronPdf.License.LicenseKey - Convertir
PdfDocument.Load()enPdfDocument.FromFile() - Convertir
document.Save()enpdf.SaveAs() - Remplacer le texte basé sur des coordonnées par du contenu HTML
Convertir
PdfFormattedTexten HTML avec style CSS - Mettre à jour les opérations de fusion pour utiliser
PdfDocument.Merge()
Essai
- Vérifiez que tous les documents sont générés correctement.
- Vérifier que l'apparence du document correspond aux attentes
- Génération de tableaux de test (auparavant limitée par la règle des 20 paragraphes)
- Vérifier que l'extraction de texte fonctionne correctement
- Opérations de fusion et de division de test
- Valider les fonctionnalités de sécurité/chiffrement
Après la migration
- Supprimer les clés de licence PDF GemBox
- Mise à jour de la documentation
- Former l'équipe à l'approche HTML/CSS pour les PDF
- Profitez d'un contenu illimité sans limite de paragraphes !

