Comment faire pivoter le texte dans les PDFs à l'aide de C#
Pourquoi migrer de MuPDFà IronPDF
Les défis de MuPDF
MuPDF est une boîte à outils PDF capable, mais sa double licence AGPL/commerciale (d'Artifex) et son design centré sur le rendu créent de réels problèmes pour les développeurs .NET construisant des applications commerciales basées sur HTML. Deux principaux wrappers .NET existent : MuPDFCore (communauté, par arklumpus, AGPL-3.0) et MuPDF.NET (liaisons officielles Artifex C# , mirroring PyMuPDF).
-
Piège de la licence AGPL : MuPDFet les wrappers sont livrés sous AGPL-3.0 par défaut. Distribuer un produit source fermé sur du code AGPL nécessite soit de mettre en source ouverte sous AGPL, soit d'acheter une licence commerciale d'Artifex (tarification sur devis, non publiée).
-
Concentration sur le rendu : Bien que MuPDF.NET puisse fusionner, rédiger, signer, et apposer des filigranes (mirroring PyMuPDF), la majeure partie de l'API et des outils est orientée autour de la visualisation et de l'extraction de texte structuré plutôt que de la génération de document basé sur HTML.
-
Pas de moteur HTML-à-PDF : Ni MuPDF.NET ni MuPDFCore ne fournissent un moteur HTML/CSS. Générer des PDFs à partir de HTML nécessite de passer par un moteur de navigateur séparé (Chromium, wkhtmltopdf, PrinceXML) et seulement charger le résultat avec MuPDF.
-
Dépendances natives : Les deux wrappers contiennent des packages
MuPDFCore.NativeAssets/MuPDF.NativeAssetsavec des binaires spécifiques à chaque RID (win-x64, linux-x64, osx-x64). Le déploiement multi-plateforme fonctionne, mais les images Docker nécessitent le package natif correspondant et l'image de base (glibc vs musl). -
Pas de filigranes HTML / En-têtes / Pieds de page : L'apposition est basée sur l'image et le texte par page ; il n'existe pas de moteur de template
{page}/{total-pages}exposé de la manière dont le font les moteurs de rendu basés sur Chromium. - Surface d'interopérabilité C : Les wrappers exposent les durées de vie des contextes/documents qui se mappent sur la bibliothèque C sous-jacente — l'ordre de disposition est important, les plantages natifs peuvent faire tomber tout le processus, et le coût de marshalling n'est pas négligeable pour les documents volumineux.
Comparaison MuPDFvs IronPDF
| Fonction | MuPDF | IronPDF |
|---|---|---|
| Licence | AGPL-3.0 ou commercial basé sur devis (Artifex) | Commercial avec tarification publiée |
| Objectif principal | Rendu, texte structuré, boîte à outils bas niveau | Génération et manipulation basées sur HTML |
| HTML vers PDF | Non supporté (pas de moteur HTML) | Moteur Chromium complet |
| Création de PDF | Niveau page uniquement (insérer texte/images/vecteurs) | HTML, URL, images |
| Manipulation de PDF | Pris en charge dans MuPDF.NET (InsertPdf, Select, DeletePage) |
Pris en charge (Merge, CopyPages, RemovePages) |
| Dépendances | MuPDFnatif + RID NativeAssets | Wrapper managé + Chromium inclus |
| Prise en charge de la plate-forme | Win/Linux/macOS via NativeAssets | Win/Linux/macOS/Docker |
| Prise en charge de l'asynchronisme | Principalement synchrone ; certain asynchrone dans MuPDFCore | APIs asynchrones sur le rendu et le document |
| Intégration .NET | Wrappers P/Invoke autour de la bibliothèque C | Wrapper .NET + Chromium natif |
IronPDF fonctionne comme une bibliothèque .NET managée à travers les versions modernes de .NET sans complexité d'interopération native.
Évaluation de la complexité de la migration
Estimation de l'effort par fonctionnalité
| Fonction | Complexité de la migration |
|---|---|
| Chargement du document | Très faible |
| Extraction de texte | Très faible |
| Fusion de PDF | Faible |
| Rendu d'image | Faible |
| HTML vers PDF | N/A (Nouvelle capacité) |
| Sécurité/marques de fabrique | N/A (Nouvelle capacité) |
Changement de paradigme
Le Shift fondamental de cette migration MuPDFréside dans le passage d'une visionneuse de rendu uniquement à une solution PDF complète :
MuPDF.NET: Document → doc[i] → GetText / GetPixmap / InsertPdf
MuPDFCore: MuPDFContext → MuPDFDocument → Pages[i] → Render / SaveImage
IronPDF: PdfDocument.FromFile() → Manipulation complète → Créer/Éditer/Fusionner/Sécuriser
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 MuPDFpackages (whichever wrapper you used)
dotnet remove package MuPDF.NET
dotnet remove package MuPDFCore
dotnet remove package MuPDFCore.NativeAssets.Linux
dotnet remove package MuPDFCore.NativeAssets.MacOS
dotnet remove package MuPDFCore.NativeAssets.Windows
dotnet remove package MuPDF.NativeAssets
# Install IronPDF
dotnet add package IronPdf
# Remove MuPDFpackages (whichever wrapper you used)
dotnet remove package MuPDF.NET
dotnet remove package MuPDFCore
dotnet remove package MuPDFCore.NativeAssets.Linux
dotnet remove package MuPDFCore.NativeAssets.MacOS
dotnet remove package MuPDFCore.NativeAssets.Windows
dotnet remove package MuPDF.NativeAssets
# Install IronPDF
dotnet add package IronPdf
Supprimez également les binaires MuPDFnatifs de votre déploiement :
- Supprimer
mupdf.dll,libmupdf.so,libmupdf.dylib - Retirer les dossiers spécifiques à la plateforme (
runtimes/*/native/) - Mise à jour des fichiers Docker pour supprimer l'installation de MuPDF
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 MuPDF
# Find all MuPDFreferences
grep -r "MuPDF\|MuPDFCore\|MuPDFDocument" --include="*.cs" .
# Find all MuPDFreferences
grep -r "MuPDF\|MuPDFCore\|MuPDFDocument" --include="*.cs" .
Référence API complète
Chargement du document
| MuPDF | IronPDF |
|---|---|
new Document(path) (MuPDF.NET) / new MuPDFDocument(ctx, path) (MuPDFCore) |
PdfDocument.FromFile(path) |
new Document("pdf", stream) (MuPDF.NET) |
PdfDocument.FromStream(stream) |
doc.Close() / Dispose() |
pdf.Dispose() |
Accès à la page
| MuPDF | IronPDF |
|---|---|
doc.PageCount (MuPDF.NET) / document.Pages.Count (MuPDFCore) |
pdf.PageCount |
doc[index] (MuPDF.NET) / document.Pages[index] (MuPDFCore) |
pdf.Pages[index] |
doc[i].GetText() / itération en texte structuré (MuPDFCore) |
page.Text |
Extraction de texte
| MuPDF | IronPDF |
|---|---|
Boucler sur doc[i].GetText() |
pdf.ExtractAllText() |
Création de PDF (non disponible dans MuPDF)
| MuPDF | IronPDF |
|---|---|
| (pas de moteur HTML) | ChromePdfRenderer.RenderHtmlAsPdf(html) |
| (pas de moteur HTML) | ChromePdfRenderer.RenderUrlAsPdf(url) |
Manipulation de PDF
| MuPDF | IronPDF |
|---|---|
docA.InsertPdf(docB) (MuPDF.NET) |
PdfDocument.Merge(pdf1, pdf2) |
page.InsertImage(...) par page (uniquement des tampons image/texte) |
pdf.ApplyWatermark(html) |
doc.Save(path, encryption: ..., ownerPw: ..., userPw: ...) |
pdf.SecuritySettings |
Exemples de migration de code
Exemple 1 : Conversion de HTML en PDF (MuPDF ne peut pas faire cela)
Avant (MuPDF):
// NuGet: Install-Package MuPDF.NET
using MuPDFCore;
using System.IO;
class Program
{
static void Main()
{
// MuPDFdoesn't support HTML vers PDFconversion directly
// You would need to use another library to convert HTML to a supported format first
// This is a limitation - MuPDFis primarily a PDF renderer/viewer
// Alternative: Use a browser engine or intermediate conversion
string html = "<html><body><h1>Hello World</h1></body></html>";
// Not natively supported in MuPDF
throw new NotSupportedException("MuPDF does not support direct HTML vers PDFconversion");
}
}
// NuGet: Install-Package MuPDF.NET
using MuPDFCore;
using System.IO;
class Program
{
static void Main()
{
// MuPDFdoesn't support HTML vers PDFconversion directly
// You would need to use another library to convert HTML to a supported format first
// This is a limitation - MuPDFis primarily a PDF renderer/viewer
// Alternative: Use a browser engine or intermediate conversion
string html = "<html><body><h1>Hello World</h1></body></html>";
// Not natively supported in MuPDF
throw new NotSupportedException("MuPDF does not support direct HTML vers PDFconversion");
}
}
Imports MuPDFCore
Imports System.IO
Class Program
Shared Sub Main()
' MuPDF doesn't support HTML to PDF conversion directly
' You would need to use another library to convert HTML to a supported format first
' This is a limitation - MuPDF is primarily a PDF renderer/viewer
' Alternative: Use a browser engine or intermediate conversion
Dim html As String = "<html><body><h1>Hello World</h1></body></html>"
' Not natively supported in MuPDF
Throw New NotSupportedException("MuPDF does not support direct HTML to PDF conversion")
End Sub
End Class
Après (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
string html = "<html><body><h1>Hello World</h1></body></html>";
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
string html = "<html><body><h1>Hello World</h1></body></html>";
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
}
}
Imports IronPdf
Class Program
Shared Sub Main()
Dim renderer = New ChromePdfRenderer()
Dim html As String = "<html><body><h1>Hello World</h1></body></html>"
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("output.pdf")
End Sub
End Class
Cet exemple met en évidence la limite la plus importante de MuPDF: il ne peut pas du tout convertir du HTML en PDF. Le code MuPDFlance explicitement NotSupportedException car la conversion HTML en PDF n'est simplement pas une capacité qu'offre MuPDF. Si vous aviez besoin de cette fonctionnalité avec MuPDF, vous deviez utiliser une bibliothèque distincte comme wkhtmltopdf ou un moteur de navigateur, puis charger le PDF résultant avec MuPDFpour l'afficher.
L'ChromePdfRenderer d'IronPDF utilise un moteur Chromium complet pour rendre le HTML avec un support complet de CSS3, JavaScript et des standards web modernes. La méthode RenderHtmlAsPdf() accepte directement les chaînes HTML. Voir la documentation HTML vers PDF pour des options de rendu supplémentaires, notamment le rendu d'URL et la conversion de fichiers HTML.
Exemple 2 : Extraction de texte
Avant (MuPDF):
// NuGet: Install-Package MuPDF.NET
using MuPDF.NET;
using System;
using System.Text;
class Program
{
static void Main()
{
Document doc = new Document("input.pdf");
StringBuilder allText = new StringBuilder();
for (int i = 0; i < doc.PageCount; i++)
{
string pageText = doc[i].GetText();
allText.AppendLine(pageText);
}
Console.WriteLine(allText.ToString());
}
}
// NuGet: Install-Package MuPDF.NET
using MuPDF.NET;
using System;
using System.Text;
class Program
{
static void Main()
{
Document doc = new Document("input.pdf");
StringBuilder allText = new StringBuilder();
for (int i = 0; i < doc.PageCount; i++)
{
string pageText = doc[i].GetText();
allText.AppendLine(pageText);
}
Console.WriteLine(allText.ToString());
}
}
Imports MuPDF.NET
Imports System
Imports System.Text
Module Program
Sub Main()
Dim doc As New Document("input.pdf")
Dim allText As New StringBuilder()
For i As Integer = 0 To doc.PageCount - 1
Dim pageText As String = doc(i).GetText()
allText.AppendLine(pageText)
Next
Console.WriteLine(allText.ToString())
End Sub
End Module
Après (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var pdf = PdfDocument.FromFile("input.pdf");
string text = pdf.ExtractAllText();
Console.WriteLine(text);
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var pdf = PdfDocument.FromFile("input.pdf");
string text = pdf.ExtractAllText();
Console.WriteLine(text);
}
}
Imports IronPdf
Imports System
Class Program
Shared Sub Main()
Dim pdf = PdfDocument.FromFile("input.pdf")
Dim text As String = pdf.ExtractAllText()
Console.WriteLine(text)
End Sub
End Class
L'approche MuPDF.NET ouvre un Document, itère doc.PageCount avec une boucle for, appelle doc[i].GetText() pour chaque page, et construit le texte avec un StringBuilder.
IronPDF réduit cela à trois lignes : charger le document avec PdfDocument.FromFile(), appeler ExtractAllText(), et imprimer le résultat. Pas d'itération manuelle, pas de StringBuilder. Apprenez-en davantage sur l'extraction de texte à partir de fichiers PDF .
Exemple 3 : fusionner plusieurs PDF
Avant (MuPDF):
// NuGet: Install-Package MuPDF.NET
using MuPDF.NET;
class Program
{
static void Main()
{
Document doc1 = new Document("file1.pdf");
Document doc2 = new Document("file2.pdf");
// Append every page of doc2 to the end of doc1.
doc1.InsertPdf(doc2);
doc1.Save("merged.pdf");
}
}
// NuGet: Install-Package MuPDF.NET
using MuPDF.NET;
class Program
{
static void Main()
{
Document doc1 = new Document("file1.pdf");
Document doc2 = new Document("file2.pdf");
// Append every page of doc2 to the end of doc1.
doc1.InsertPdf(doc2);
doc1.Save("merged.pdf");
}
}
Imports MuPDF.NET
Class Program
Shared Sub Main()
Dim doc1 As New Document("file1.pdf")
Dim doc2 As New Document("file2.pdf")
' Append every page of doc2 to the end of doc1.
doc1.InsertPdf(doc2)
doc1.Save("merged.pdf")
End Sub
End Class
Après (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main()
{
var pdf1 = PdfDocument.FromFile("file1.pdf");
var pdf2 = PdfDocument.FromFile("file2.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("file1.pdf");
var pdf2 = PdfDocument.FromFile("file2.pdf");
var merged = PdfDocument.Merge(pdf1, pdf2);
merged.SaveAs("merged.pdf");
}
}
Imports IronPdf
Class Program
Shared Sub Main()
Dim pdf1 = PdfDocument.FromFile("file1.pdf")
Dim pdf2 = PdfDocument.FromFile("file2.pdf")
Dim merged = PdfDocument.Merge(pdf1, pdf2)
merged.SaveAs("merged.pdf")
End Sub
End Class
MuPDF.NET prend en charge la fusion via Document.InsertPdf, qui reflète le insert_pdf() de PyMuPDF et ajoute chaque page d'un document à un autre sur place. MuPDFCore n'expose pas une API de fusion haut niveau équivalente.
La méthode statique PdfDocument.Merge() d'IronPDF accepte plusieurs documents PDF et renvoie un document fusionné unique, laissant les entrées intactes. Pour fusionner plusieurs documents, passez une liste : PdfDocument.Merge(pdfList). Voir la documentation sur la fusion et le fractionnement des PDF pour des options supplémentaires.
Notes de migration essentielles
Supprimer les binaires natifs
MuPDF nécessite des bibliothèques natives spécifiques à la plateforme. Après avoir migré vers IronPDF, supprimez tous les binaires natifs de MuPDF:
# Delete native libraries
rm -f mupdf*.dll libmupdf*.so libmupdf*.dylib
# Remove runtime folders
rm -rf runtimes/*/native/
# Update Docker files to remove MuPDFinstallation
# Delete native libraries
rm -f mupdf*.dll libmupdf*.so libmupdf*.dylib
# Remove runtime folders
rm -rf runtimes/*/native/
# Update Docker files to remove MuPDFinstallation
IronPDF est un code .NET entièrement géré - pas de binaires natifs à gérer d'une plateforme à l'autre.
Le modèle Dispose simplifié
MuPDFCore nécessite un MuPDFContext explicite; MuPDF.NET le cache mais a toujours besoin de Close() / Dispose() :
// MuPDFCore: explicit context required
using (var context = new MuPDFContext())
using (var document = new MuPDFDocument(context, "input.pdf"))
{
// Work with document
}
// MuPDF.NET: implicit context, manual close
Document doc = new Document("input.pdf");
try { /* work */ } finally { doc.Close(); }
// IronPDF: simpler pattern
var pdf = PdfDocument.FromFile("input.pdf");
// Work with pdf
// MuPDFCore: explicit context required
using (var context = new MuPDFContext())
using (var document = new MuPDFDocument(context, "input.pdf"))
{
// Work with document
}
// MuPDF.NET: implicit context, manual close
Document doc = new Document("input.pdf");
try { /* work */ } finally { doc.Close(); }
// IronPDF: simpler pattern
var pdf = PdfDocument.FromFile("input.pdf");
// Work with pdf
Imports MuPDFCore
Imports MuPDF.NET
Imports IronPDF
' MuPDFCore: explicit context required
Using context As New MuPDFContext()
Using document As New MuPDFDocument(context, "input.pdf")
' Work with document
End Using
End Using
' MuPDF.NET: implicit context, manual close
Dim doc As New Document("input.pdf")
Try
' work
Finally
doc.Close()
End Try
' IronPDF: simpler pattern
Dim pdf = PdfDocument.FromFile("input.pdf")
' Work with pdf
Modification du modèle d'itération de la page
MuPDF utilise l'itération basée sur l'index avec un nombre de pages explicite :
// MuPDF.NET
for (int i = 0; i < doc.PageCount; i++)
{
var pageText = doc[i].GetText();
}
// MuPDFCore
for (int i = 0; i < document.Pages.Count; i++)
{
var pageText = document.Pages[i].GetText();
}
//IronPDF(foreach supported)
foreach (var page in pdf.Pages)
{
var pageText = page.Text;
}
// MuPDF.NET
for (int i = 0; i < doc.PageCount; i++)
{
var pageText = doc[i].GetText();
}
// MuPDFCore
for (int i = 0; i < document.Pages.Count; i++)
{
var pageText = document.Pages[i].GetText();
}
//IronPDF(foreach supported)
foreach (var page in pdf.Pages)
{
var pageText = page.Text;
}
Imports MuPDF.NET
Imports MuPDFCore
Imports IronPDF
' MuPDF.NET
For i As Integer = 0 To doc.PageCount - 1
Dim pageText = doc(i).GetText()
Next
' MuPDFCore
For i As Integer = 0 To document.Pages.Count - 1
Dim pageText = document.Pages(i).GetText()
Next
' IronPDF (foreach supported)
For Each page In pdf.Pages
Dim pageText = page.Text
Next
Nouvelles fonctionnalités disponibles
Après avoir migré vers IronPDF, vous bénéficiez de fonctionnalités que MuPDFne peut pas vous offrir :
// Création de PDFfrom HTML (not possible in MuPDF)
var pdf = renderer.RenderHtmlAsPdf("<h1>Hello</h1>");
// Watermarks (not possible in MuPDF)
pdf.ApplyWatermark("<div style='color:red;opacity:0.3;'>DRAFT</div>");
// Password Protection (not possible in MuPDF)
pdf.SecuritySettings.OwnerPassword = "admin";
pdf.SecuritySettings.UserPassword = "user";
// Headers and Footers (no HTML header/footer template in MuPDF)
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter
{
HtmlFragment = "<div style='text-align:center;'>Document Title</div>",
MaxHeight = 25
};
renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
{
HtmlFragment = "<div style='text-align:center;'>Page {page} of {total-pages}</div>",
MaxHeight = 25
};
// Création de PDFfrom HTML (not possible in MuPDF)
var pdf = renderer.RenderHtmlAsPdf("<h1>Hello</h1>");
// Watermarks (not possible in MuPDF)
pdf.ApplyWatermark("<div style='color:red;opacity:0.3;'>DRAFT</div>");
// Password Protection (not possible in MuPDF)
pdf.SecuritySettings.OwnerPassword = "admin";
pdf.SecuritySettings.UserPassword = "user";
// Headers and Footers (no HTML header/footer template in MuPDF)
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter
{
HtmlFragment = "<div style='text-align:center;'>Document Title</div>",
MaxHeight = 25
};
renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
{
HtmlFragment = "<div style='text-align:center;'>Page {page} of {total-pages}</div>",
MaxHeight = 25
};
' Création de PDFfrom HTML (not possible in MuPDF)
Dim pdf = renderer.RenderHtmlAsPdf("<h1>Hello</h1>")
' Watermarks (not possible in MuPDF)
pdf.ApplyWatermark("<div style='color:red;opacity:0.3;'>DRAFT</div>")
' Password Protection (not possible in MuPDF)
pdf.SecuritySettings.OwnerPassword = "admin"
pdf.SecuritySettings.UserPassword = "user"
' Headers and Footers (no HTML header/footer template in MuPDF)
Dim renderer As New ChromePdfRenderer()
renderer.RenderingOptions.HtmlHeader = New HtmlHeaderFooter With {
.HtmlFragment = "<div style='text-align:center;'>Document Title</div>",
.MaxHeight = 25
}
renderer.RenderingOptions.HtmlFooter = New HtmlHeaderFooter With {
.HtmlFragment = "<div style='text-align:center;'>Page {page} of {total-pages}</div>",
.MaxHeight = 25
}
Dépannage
Édition 1 : MuPDFDocument introuvable
Problème : La classe MuPDFDocument n'existe pas dans IronPDF.
Solution: Use PdfDocument.FromFile():
// MuPDF
using (MuPDFDocument document = new MuPDFDocument("input.pdf"))
// IronPDF
var pdf = PdfDocument.FromFile("input.pdf");
// MuPDF
using (MuPDFDocument document = new MuPDFDocument("input.pdf"))
// IronPDF
var pdf = PdfDocument.FromFile("input.pdf");
Imports MuPDF
Imports IronPDF
Using document As New MuPDFDocument("input.pdf")
End Using
Dim pdf = PdfDocument.FromFile("input.pdf")
Sujet 2 : Pages.Count introuvables
Problème : Le modèle document.Pages.Count ne fonctionne pas.
Solution: Use pdf.PageCount:
// MuPDF
for (int i = 0; i < document.Pages.Count; i++)
// IronPDF
for (int i = 0; i < pdf.PageCount; i++)
// Or use: foreach (var page in pdf.Pages)
// MuPDF
for (int i = 0; i < document.Pages.Count; i++)
// IronPDF
for (int i = 0; i < pdf.PageCount; i++)
// Or use: foreach (var page in pdf.Pages)
' MuPDF
For i As Integer = 0 To document.Pages.Count - 1
' IronPDF
For i As Integer = 0 To pdf.PageCount - 1
' Or use: For Each page In pdf.Pages
Sujet 3 : GetText() introuvable
Problème : La méthode page.GetText() n'existe pas.
Solution : Utilisez la propriété page.Text ou pdf.ExtractAllText() :
// MuPDF
string pageText = document.Pages[i].GetText();
// IronPDF
string pageText = pdf.Pages[i].Text;
// Or for all text:
string allText = pdf.ExtractAllText();
// MuPDF
string pageText = document.Pages[i].GetText();
// IronPDF
string pageText = pdf.Pages[i].Text;
// Or for all text:
string allText = pdf.ExtractAllText();
' MuPDF
Dim pageText As String = document.Pages(i).GetText()
' IronPDF
Dim pageText As String = pdf.Pages(i).Text
' Or for all text:
Dim allText As String = pdf.ExtractAllText()
Problème 4 : InsertPdf introuvable
Problème : Le Document.InsertPdf de MuPDF.NET (reflète le insert_pdf de PyMuPDF) n'a pas de nom directement équivalent dans IronPDF, et MuPDFCore n'expose aucune fusion de haut niveau.
Solution : Utilisez le PdfDocument.Merge() statique :
// MuPDF.NET
docA.InsertPdf(docB);
// IronPDF
var merged = PdfDocument.Merge(pdf1, pdf2);
// MuPDF.NET
docA.InsertPdf(docB);
// IronPDF
var merged = PdfDocument.Merge(pdf1, pdf2);
Liste de contrôle de la migration
Pré-migration
- Inventaire de toutes les utilisations de MuPDFdans la base de code
- Documenter toutes les opérations de rendu (DPI, facteurs d'échelle)
- Identifier les besoins en matière de création de PDF (nous utilisons actuellement des outils externes).
- Liste des exigences d'extraction de texte
- Examiner les scripts de déploiement pour la gestion des binaires natifs
- Obtenir une clé de licence IronPDF
Modifications du paquet
- Supprimer le package
MuPDF.NET - Supprimer le package
MuPDFCore - Supprimer les packages
MuPDFCore.NativeAssets.*/MuPDF.NativeAssets - 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
- Replace
Document(MuPDF.NET) /MuPDFDocument(MuPDFCore) withPdfDocument.FromFile() - Remplacer
doc.PageCount/document.Pages.Countparpdf.PageCount - Remplacer
doc[i].GetText()parpage.Textoupdf.ExtractAllText() - Remplacer les appels
Document.InsertPdfparPdfDocument.Merge() - Supprimer le code standard context/dispose explicite
- Ajouter le code de création de PDF si nécessaire (HTML vers PDF)
Après la migration
- Supprimer les binaires MuPDFnatifs du projet
- Mise à jour des fichiers Docker pour supprimer l'installation de MuPDF
- Supprimer les dossiers d'exécution spécifiques à la plateforme
- Exécuter des tests de régression comparant le rendu final
- Testé sur toutes les plateformes cibles (Windows, Linux, macOS)
- Envisagez d'ajouter de nouvelles fonctionnalités (filigranes, sécurité, en-têtes/pieds de page).

