Passer au contenu du pied de page
VIDéOS

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

  1. 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).

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

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

  4. Dépendances natives : Les deux wrappers contiennent des packages MuPDFCore.NativeAssets / MuPDF.NativeAssets avec 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).

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

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

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

Modifications du paquet NuGet

# Remove 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
SHELL

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

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

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

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

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

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

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

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);
$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 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) with PdfDocument.FromFile()
  • Remplacer doc.PageCount / document.Pages.Count par pdf.PageCount
  • Remplacer doc[i].GetText() par page.Text ou pdf.ExtractAllText()
  • Remplacer les appels Document.InsertPdf par PdfDocument.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).

Veuillez noterMuPDF, MuPDF.NET, et wkhtmltopdf sont des marques déposées de leurs propriétaires respectifs. Ce site n'est pas affilié à, approuvé ou sponsorisé par Artifex Software ou wkhtmltopdf. Tous les noms de produits, logos et marques sont la propriété de leurs propriétaires respectifs. Les comparaisons sont à titre informatif uniquement et reflètent les informations publiquement disponibles au moment de l'écriture.

Curtis Chau
Rédacteur technique

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

Lire la suite

Équipe de soutien Iron

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