Passer au contenu du pied de page
GUIDES DE MIGRATION

Comment migrer de MuPDF à IronPDF en C#

Pourquoi migrer de MuPDFà IronPDF

Les défis de MuPDF

MuPDF est un excellent moteur de rendu PDF, mais sa licence AGPL et son orientation uniquement sur le rendu créent des limitations importantes pour les développeurs .NET qui créent des applications commerciales :

  1. Piège de la licence AGPL : la licence virale de MuPDFexige soit de rendre l'intégralité de votre application open source sous AGPL, soit d'acheter des licences commerciales coûteuses avec des prix opaques et basés sur le principe du contact commercial.

  2. Fonctionnalité axée uniquement sur le rendu : MuPDFest un visualiseur/moteur de rendu ; il n'est pas conçu pour la création de PDF à partir de HTML, les flux de travail de génération de documents, le remplissage de formulaires ou l'ajout de filigranes et d'en-têtes/pieds de page.

  3. Absence de prise en charge HTML : MuPDFne prend pas en charge la conversion directe de HTML en PDF. Vous devrez d'abord utiliser une autre bibliothèque pour convertir HTML dans un format pris en charge. Il s'agit d'une limitation fondamentale - MuPDFest avant tout un moteur de rendu/de visualisation de PDF.

  4. Dépendances natives : les binaires spécifiques à la plateforme nécessitent une gestion manuelle pour Windows, Linux et macOS. Les déploiements Docker deviennent complexes avec les exigences des bibliothèques natives, et l'emballage des déploiements introduit des défis.

  5. Manipulation limitée : aucune prise en charge intégrée pour la fusion/division des PDF, la rotation ou le réarrangement des pages, les filigranes ou les annotations, ou les signatures numériques.

  6. Complexité de l'interopérabilité C : les liaisons natives introduisent des problèmes de gestion de la mémoire, des bogues spécifiques à la plateforme et une surcharge de sérialisation.

Comparaison MuPDFvs IronPDF

Fonction MuPDF IronPDF
Licence AGPL (virale) ou commerciale onéreuse Commercial avec une tarification transparente
Objectif principal Rendu/visualisation Solution PDF complète
HTML vers PDF Non pris en charge Moteur Chromium complet
Création de PDF Non pris en charge HTML, URL, images
Manipulation de PDF Limité Compléter (fusionner, diviser, éditer)
Dépendances Binaires natifs Gestion complète
Prise en charge de la plate-forme Manuel par plateforme Automatique
Prise en charge de l'asynchronisme Limité Async/await complet
Intégration .NET C interop Natif .NET

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 en tant que bibliothèque .NET entièrement gérée sans complexité d'interopérabilité native.


Évaluation de la complexité de la migration

Estimation de l'effort par fonctionnalité

Fonction Complexité de la migration Notes
Chargement du document Très faible Remplacement direct de la méthode
Extraction de texte Très faible API plus simple
Fusion de PDF Faible Méthode statique contre boucles manuelles
Rendu d'image Faible RasterizeToImageFiles vs pixmaps
HTML vers PDF N/A (Nouvelle capacité) Pas possible dans MuPDF
Sécurité/marques de fabrique N/A (Nouvelle capacité) Pas possible dans MuPDF

Changement de paradigme

Le changement fondamental de cette migration MuPDFréside dans le passage d'une visionneuse de rendu uniquement à une solution PDF complète :

MuPDF :   MuPDFContext → MuPDFDocument → Page iteration → Render/Extract only
IronPDF : PdfDocument.FromFile() → Manipulation complète → Créer/Modifier/Fusionner/Sécuriser

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.com

Modifications du paquet NuGet

# Remove MuPDFpackages
dotnet remove package MuPDF.NET
dotnet remove package MuPDFCore
dotnet remove package MuPDFCore.MuPDFWrapper

# Install IronPDF
dotnet add package IronPdf
# Remove MuPDFpackages
dotnet remove package MuPDF.NET
dotnet remove package MuPDFCore
dotnet remove package MuPDFCore.MuPDFWrapper

# Install IronPDF
dotnet add package IronPdf
SHELL

<Supprimez également les binaires MuPDFnatifs de votre déploiement :

  • Supprimer mupdf.dll, libmupdf.so, libmupdf.dylib
  • Supprimer 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";
$vbLabelText   $csharpLabel

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" .
SHELL

Référence API complète

Chargement du document

MuPDF IronPDF Notes
new MuPDFDocument(path) PdfDocument.FromFile(path) Charger à partir d'un fichier
new MuPDFDocument(stream) PdfDocument.FromStream(stream) Charger à partir du flux
document.Dispose() pdf.Dispose() Nettoyage

Accès à la page

MuPDF IronPDF Notes
document.Pages.Count pdf.PageCount Nombre de pages
document.Pages[index] pdf.Pages[index] Page d'accès
page.GetText() page.Text Texte de la page

Extraction de texte

MuPDF IronPDF Notes
Loop through document.Pages[i].GetText() pdf.ExtractAllText() Tout le texte à la fois

Création de PDF (non disponible dans MuPDF)

MuPDF IronPDF Notes
(non pris en charge)(non pris en charge)(non pris en charge)(non pris en charge) ChromePdfRenderer.RenderHtmlAsPdf(html) HTML vers PDF
(non pris en charge)(non pris en charge)(non pris en charge)(non pris en charge) ChromePdfRenderer.RenderUrlAsPdf(url) URL vers PDF

Manipulation de fichiers PDF (limitée à MuPDF)

MuPDF IronPDF Notes
Boucles de copie de page de manuel PdfDocument.Merge(pdf1, pdf2) Fusionner des PDF
(non pris en charge)(non pris en charge)(non pris en charge)(non pris en charge) pdf.ApplyWatermark(html) Ajouter un filigrane
(non pris en charge)(non pris en charge)(non pris en charge)(non pris en charge) pdf.SecuritySettings Protection par mot de passe

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");
    }
}
$vbLabelText   $csharpLabel

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");
    }
}
$vbLabelText   $csharpLabel

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 parce que la conversion de HTML en PDF n'est tout simplement pas une fonctionnalité offerte par 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.

Le ChromePdfRenderer d'IronPDF utilise un moteur Chromium complet pour effectuer le rendu HTML avec une prise en charge complète de CSS3, JavaScript et des normes 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 MuPDFCore;
using System;
using System.Text;

class Program
{
    static void Main()
    {
        using (MuPDFDocument document = new MuPDFDocument("input.pdf"))
        {
            StringBuilder allText = new StringBuilder();

            for (int i = 0; i < document.Pages.Count; i++)
            {
                string pageText = document.Pages[i].GetText();
                allText.AppendLine(pageText);
            }

            Console.WriteLine(allText.ToString());
        }
    }
}
// NuGet: Install-Package MuPDF.NET
using MuPDFCore;
using System;
using System.Text;

class Program
{
    static void Main()
    {
        using (MuPDFDocument document = new MuPDFDocument("input.pdf"))
        {
            StringBuilder allText = new StringBuilder();

            for (int i = 0; i < document.Pages.Count; i++)
            {
                string pageText = document.Pages[i].GetText();
                allText.AppendLine(pageText);
            }

            Console.WriteLine(allText.ToString());
        }
    }
}
$vbLabelText   $csharpLabel

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);
    }
}
$vbLabelText   $csharpLabel

L'approche MuPDFnécessite la création d'un bloc using avec un MuPDFDocument, l'itération manuelle à travers document.Pages.Countavec une boucle for, l'appel de document.Pages[i].GetText() pour chaque page, et la construction du texte avec un StringBuilder. Il s'agit de 12 lignes de code pour une simple extraction de texte.

IronPDF réduit cela à 3 lignes : charger le document avec PdfDocument.FromFile(), appeler ExtractAllText(), et imprimer le résultat. Pas d'itération manuelle, pas de StringBuilder, pas de gestion explicite des ressources avec des blocs using pour cette simple opération. 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 MuPDFCore;
using System.IO;

class Program
{
    static void Main()
    {
        using (MuPDFDocument doc1 = new MuPDFDocument("file1.pdf"))
        using (MuPDFDocument doc2 = new MuPDFDocument("file2.pdf"))
        {
            // Create a new document
            using (MuPDFDocument mergedDoc = MuPDFDocument.Create())
            {
                // Copy pages from first document
                for (int i = 0; i < doc1.Pages.Count; i++)
                {
                    mergedDoc.CopyPage(doc1, i);
                }

                // Copy pages from second document
                for (int i = 0; i < doc2.Pages.Count; i++)
                {
                    mergedDoc.CopyPage(doc2, i);
                }

                mergedDoc.Save("merged.pdf");
            }
        }
    }
}
// NuGet: Install-Package MuPDF.NET
using MuPDFCore;
using System.IO;

class Program
{
    static void Main()
    {
        using (MuPDFDocument doc1 = new MuPDFDocument("file1.pdf"))
        using (MuPDFDocument doc2 = new MuPDFDocument("file2.pdf"))
        {
            // Create a new document
            using (MuPDFDocument mergedDoc = MuPDFDocument.Create())
            {
                // Copy pages from first document
                for (int i = 0; i < doc1.Pages.Count; i++)
                {
                    mergedDoc.CopyPage(doc1, i);
                }

                // Copy pages from second document
                for (int i = 0; i < doc2.Pages.Count; i++)
                {
                    mergedDoc.CopyPage(doc2, i);
                }

                mergedDoc.Save("merged.pdf");
            }
        }
    }
}
$vbLabelText   $csharpLabel

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");
    }
}
$vbLabelText   $csharpLabel

L'opération de fusion de MuPDFest particulièrement verbeuse. Vous devez ouvrir les deux documents sources dans des blocs utilisant imbriqués, créer un nouveau document vide avec MuPDFDocument.Create(), parcourir chaque page du premier document en appelant CopyPage(), parcourir chaque page du second document en appelant CopyPage(), et enfin sauvegarder. Il s'agit de plus de 20 lignes de code avec une imbrication complexe.

La méthode statique PdfDocument.Merge() d'IronPDF accepte plusieurs documents PDF et renvoie un seul document fusionné. L'ensemble de l'opération consiste en 4 lignes de code lisible. Pour fusionner plusieurs documents, vous pouvez passer une liste : PdfDocument.Merge(pdfList). Voir la documentation sur la fusion et le fractionnement des PDF pour des options supplémentaires.


Notesde 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
SHELL

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é

MuPDF nécessite un contexte explicite et une gestion des documents :

// MuPDF: Nested using blocks required
using (MuPDFDocument document = new MuPDFDocument("input.pdf"))
{
    // Work with document
}

// IronPDF: Simpler pattern
var pdf = PdfDocument.FromFile("input.pdf");
// Work with pdf
// MuPDF: Nested using blocks required
using (MuPDFDocument document = new MuPDFDocument("input.pdf"))
{
    // Work with document
}

// IronPDF: Simpler pattern
var pdf = PdfDocument.FromFile("input.pdf");
// Work with pdf
$vbLabelText   $csharpLabel

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
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
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;
}
$vbLabelText   $csharpLabel

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 (not possible in MuPDF)
pdf.AddTextHeader("Document Title");
pdf.AddTextFooter("Page {page} of {total-pages}");
// 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 (not possible in MuPDF)
pdf.AddTextHeader("Document Title");
pdf.AddTextFooter("Page {page} of {total-pages}");
$vbLabelText   $csharpLabel

Dépannage

Édition 1 : MuPDFDocument introuvable

Problème : la classe MuPDFDocument n'existe pas dans IronPDF.

Solution : Utilisez 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");
$vbLabelText   $csharpLabel

Sujet 2 : Pages.Count introuvables

Problème : le modèle document.Pages.Countne fonctionne pas.

Solution : Utilisez 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)
$vbLabelText   $csharpLabel

Sujet 3 : GetText() introuvable

Problème : la méthode page.GetText()n'existe pas.

Solution : Utilisez la propriété page.Textou 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();
$vbLabelText   $csharpLabel

Édition 4 : CopyPage introuvable

Problème : Modèle de copie manuelle de page pour la fusion.

Solution : Utiliser la méthode statique PdfDocument.Merge() :

// MuPDF
mergedDoc.CopyPage(doc1, i);

// IronPDF
var merged = PdfDocument.Merge(pdf1, pdf2);
// MuPDF
mergedDoc.CopyPage(doc1, i);

// IronPDF
var merged = PdfDocument.Merge(pdf1, pdf2);
$vbLabelText   $csharpLabel

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 le package MuPDFCore.MuPDFWrapper
  • Installez 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
  • Remplacez MuPDFDocument par PdfDocument.FromFile()
  • Remplacez document.Pages.Countpar pdf.PageCount
  • Remplacez page.GetText()par page.Textou pdf.ExtractAllText()
  • Remplacez les boucles CopyPage manuelles par PdfDocument.Merge()
  • Supprimer les blocs using imbriqués pour la gestion du contexte
  • 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).

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