Przejdź do treści stopki
PRZEWODNIKI MIGRACJI

Jak przeprowadzić migrację z MuPDF do IronPDF w języku C#

Dlaczego warto przejść zMuPDFna IronPDF

Wyzwania związane z MuPDF

MuPDF to wszechstronne narzędzie PDF, ale jego dualna licencja AGPL/komercyjna (od Artifex) oraz projekt ukierunkowany na renderowanie tworzą realne tarcia dla deweloperów .NET budujących komercyjne aplikacje napędzane HTML. Istnieją dwa główne wrappery .NET: MuPDFCore (społeczność, przez arklumpus, AGPL-3.0) i MuPDF.NET (oficjalne powiązania C# Artifex, odzwierciedlające PyMuPDF).

  1. Pułapka licencji AGPL: Zarówno MuPDF, jak i wrappery są dostarczane domyślnie pod licencją AGPL-3.0. Dystrybucja produktu zamkniętego na kodzie AGPL wymaga albo otworzenia kodu na AGPL, albo wykupienia licencji komercyjnej od Artifex (cena na żądanie, nie jest publikowana).

  2. Skupienie na renderowaniu: Chociaż MuPDF.NET może scalać, zacierać, podpisywać i oznaczać znakami wodnymi (odzwierciedlając PyMuPDF), większość API i narzędzi jest ukierunkowana na przeglądanie i ekstrakcję tekstu strukturalnego, a nie na generowanie dokumentów napędzanych HTML.

  3. Brak silnika HTML-do-PDF: Ani MuPDF.NET, ani MuPDFCore nie dostarcza silnika HTML/CSS. Generowanie PDF z HTML wymaga użycia odrębnego silnika przeglądarki (Chromium, wkhtmltopdf, PrinceXML) i tylko ładowania wyniku za pomocą MuPDF.

  4. Natywne zależności: Oba wrappery dostarczają pakiety MuPDFCore.NativeAssets / MuPDF.NativeAssets z binariami per-RID (win-x64, linux-x64, osx-x64). Wdrożenie międzyplatformowe działa, ale obrazy Docker potrzebują pasującego natywnego pakietu i obrazu bazowego (glibc vs musl).

  5. Brak znaków wodnych HTML / nagłówków / stopek: Stemplowanie jest oparte na obrazach i tekście na stronę; nie ma {page}/{total-pages} szablonowego silnika exposowanego przez renderery oparte na Chromium.

  6. Powierzchnia interoperacyjna C: Wrappery eksponują czas życia kontekstu/dokumentu, które mapują się na bibliotekę C — kolejność usunięcia ma znaczenie, awarie natywne mogą zabić cały proces, a koszt marshalingu nie jest trywialny w przypadku dużych dokumentów.

PorównanieMuPDFi IronPDF

Funkcja MuPDF IronPDF
Licencja AGPL-3.0 lub komercyjna na żądanie (Artifex) Komercyjna z opublikowaną wyceną
Główny cel Renderowanie, tekst strukturalny, narzędzie niskiego poziomu Generowanie i manipulacja sterowana HTML
HTML do PDF Nie wspierane (brak silnika HTML) Pełny silnik Chromium
Tworzenie plików PDF Tylko na poziomie strony (wstawianie tekstu/obrazów/wektorów) HTML, adresy URL, obrazy
Manipulacja plikami PDF Obsługiwane w MuPDF.NET (InsertPdf, Select, DeletePage) Obsługiwane (Merge, CopyPages, RemovePages)
Zależności NativeMuPDF+ RID NativeAssets Zarządzana obudowa + wbudowany Chromium
Obsługa platform Win/Linux/macOS za pośrednictwem NativeAssets Win/Linux/macOS/Docker
Obsługa asynchroniczna Głównie synchroniczne; niektóre asynchroniczne w MuPDFCore Asynchroniczne interfejsy API w rendererze i dokumencie
Integracja z platformą .NET Wrappery P/Invoke wokół biblioteki C .NET wrapper + native Chromium

IronPDF działa jako zarządzana biblioteka .NET w całej gamie nowoczesnych wersji .NET bez złożoności natywnego interopu.


Ocena złożoności migracji

Szacowany nakład pracy według funkcji

Funkcja Złożoność migracji
Ładowanie dokumentu Bardzo niski
Ekstrakcja tekstu Bardzo niski
Łączenie plików PDF Niski
Renderowanie obrazów Niski
HTML do PDF N/A (Nowa funkcja)
Bezpieczeństwo/Znaki wodne N/A (Nowa funkcja)

Zmiana paradygmatu

Podstawową zmianą w migracjiMuPDFjest przejście od przeglądarki służącej wyłącznie do renderowania do kompletnego rozwiązania PDF:

MuPDF.NET:  Document → doc[i] → GetText / GetPixmap / InsertPdf
MuPDFCore:  MuPDFContext → MuPDFDocument → Pages[i] → Render / SaveImage
IronPDF:    PdfDocument.FromFile() → Pełna manipulacja → Tworzenie/Edycja/Łączenie/Bezpieczeństwo

Zanim zaczniesz

Wymagania wstępne

  1. Środowisko .NET: .NET Framework 4.6.2+ lub .NET Core 3.1+ / .NET 5/6/7/8/9+
  2. Dostęp do NuGet: Możliwość instalowania pakietów NuGet
  3. Licencja IronPDF: Uzyskaj klucz licencyjny na stronie ironpdf.com

Zmiany w pakiecie NuGet

# RemoveMuPDFpackages (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
# RemoveMuPDFpackages (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

Należy również usunąć natywne pliki binarne MuPDF z wdrożenia:

  • Usuń mupdf.dll, libmupdf.so, libmupdf.dylib
  • Usuń foldery specyficzne dla platform (runtimes/*/native/)
  • Zaktualizuj pliki Docker, aby usunąć instalację MuPDF

Konfiguracja licencji

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

Zidentyfikuj zastosowanie MuPDF

# Find allMuPDFreferences
grep -r "MuPDF\|MuPDFCore\|MuPDFDocument" --include="*.cs" .
# Find allMuPDFreferences
grep -r "MuPDF\|MuPDFCore\|MuPDFDocument" --include="*.cs" .
SHELL

Kompletna dokumentacija API

Ładowanie dokumentów

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

Dostęp do strony

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() / iteracja tekstu strukturalnego (MuPDFCore) page.Text

Wyodrębnianie tekstu

MuPDF IronPDF
Iteruj po doc[i].GetText() pdf.ExtractAllText()

Tworzenie plików PDF (niedostępne w MuPDF)

MuPDF IronPDF
(brak silnika HTML) ChromePdfRenderer.RenderHtmlAsPdf(html)
(brak silnika HTML) ChromePdfRenderer.RenderUrlAsPdf(url)

Manipulacja plikami PDF

MuPDF IronPDF
docA.InsertPdf(docB) (MuPDF.NET) PdfDocument.Merge(pdf1, pdf2)
page.InsertImage(...) na stronę (tylko stemple obrazu/tekstu) pdf.ApplyWatermark(html)
doc.Save(path, encryption: ..., ownerPw: ..., userPw: ...) pdf.SecuritySettings

Przykłady migracji kodu

Przykład 1: Konwersja HTML do PDF (MuPDF nie potrafi tego zrobić)

Przed (MuPDF):

// NuGet: Install-Package MuPDF.NET
using MuPDFCore;
using System.IO;

class Program
{
    static void Main()
    {
        //MuPDFdoesn't support HTML do PDF conversion 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 do PDF conversion");
    }
}
// NuGet: Install-Package MuPDF.NET
using MuPDFCore;
using System.IO;

class Program
{
    static void Main()
    {
        //MuPDFdoesn't support HTML do PDF conversion 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 do PDF conversion");
    }
}
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

Po (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

Ten przykład podkreśla najważniejsze ograniczenie MuPDF: nie może on w ogóle konwertować HTML na PDF. KodMuPDFjawnie rzuca NotSupportedException, ponieważ konwersja HTML-to-PDF nie jest funkcjonalnością oferowaną przez MuPDF. Jeśli potrzebna była ta funkcjonalność w MuPDF, należało użyć oddzielnej biblioteki, takiej jak wkhtmltopdf lub silnika przeglądarki, a następnie załadować wynikowy plik PDF doMuPDFw celu wyświetlenia.

ChromePdfRenderer od IronPDF używa pełnego silnika Chromium do renderowania HTML z pełnym wsparciem dla CSS3, JavaScript i nowoczesnych standardów webowych. Metoda RenderHtmlAsPdf() akceptuje bezpośrednio ciągi HTML. Zobacz dokumentację HTML do PDF, aby uzyskać informacje o dodatkowych opcjach renderowania, w tym renderowaniu adresów URL i konwersji plików HTML.

Przykład 2: Wyodrębnianie tekstu

Przed (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

Po (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

Podejście MuPDF.NET otwiera Document, iteruje doc.PageCount za pomocą pętli for, wywołuje doc[i].GetText() dla każdej strony, i buduje tekst za pomocą StringBuilder.

IronPDF redukuje to do trzech linii: załaduj dokument za pomocą PdfDocument.FromFile(), wywołaj ExtractAllText(), i wyświetl wynik. Bez ręcznej iteracji, bez StringBuilder. Dowiedz się więcej o wyciąganiu tekstu z plików PDF.

Przykład 3: Łączenie wielu plików PDF

Przed (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

Po (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 wspiera łączenie poprzez Document.InsertPdf, co jest lustrzanym odbiciem insert_pdf() z PyMuPDF i przypina każdą stronę jednego dokumentu do innego w miejscu. MuPDFCore nie ujawnia równoważnego wysokopoziomowego API scalania.

Statyczna metoda PdfDocument.Merge() w IronPDF akceptuje wiele dokumentów PDF i zwraca jeden scalony dokument, nie modyfikując źródeł. Aby scalić wiele dokumentów, przekaż listę: PdfDocument.Merge(pdfList). Dodatkowe opcje można znaleźć w dokumentacji dotyczącej scałania i dzielenia plików PDF.


Ważne uwagi dotyczące migracji

Usuń pliki binarne

MuPDF wymaga bibliotek natywnych dla danej platformy. Po migracji do IronPDF usuń wszystkie natywne pliki binarne MuPDF:

# Delete native libraries
rm -f mupdf*.dll libmupdf*.so libmupdf*.dylib

# Remove runtime folders
rm -rf runtimes/*/native/

# Update Docker files to removeMuPDFinstallation
# Delete native libraries
rm -f mupdf*.dll libmupdf*.so libmupdf*.dylib

# Remove runtime folders
rm -rf runtimes/*/native/

# Update Docker files to removeMuPDFinstallation
SHELL

IronPDF to w pełni zarządzany kod .NET — nie ma potrzeby zarządzania natywnymi plikami binarnymi na różnych platformach.

Uproszczony wzorzec Dispose

MuPDFCore wymaga jawnego MuPDFContext; MuPDF.NET ukrywa to, ale nadal potrzebuje 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

Zmiana wzorca iteracji strony

MuPDF wykorzystuje iterację opartą na indeksie z jawną liczbą stron:

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

Nowe dostępne funkcje

Po migracji do IronPDF zyskujesz możliwości, których nie zapewnia MuPDF:

// Tworzenie plików PDF from 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
};
// Tworzenie plików PDF from 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
};
Imports System

' Tworzenie plików PDF from 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

Rozwiązywanie problemów

Problem 1: Nie znaleziono MuPDFDocument

Problem: Klasa MuPDFDocument nie istnieje w IronPDF.

Rozwiązanie: Użyj 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

Problem 2: Nie znaleziono Pages.Count

Problem: Wzorzec document.Pages.Count nie działa.

Rozwiązanie: Użyj 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

Problem 3: Nie znaleziono funkcji GetText()

Problem: Metoda page.GetText() nie istnieje.

Rozwiązanie: Użyj właściwości page.Text lub 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

Problem 4: Nie znaleziono InsertPdf

Problem: Document.InsertPdf w MuPDF.NET (odbicie insert_pdf w PyMuPDF) nie ma bezpośredniego odpowiednika w IronPDF, a MuPDFCore w ogóle nie udostępnia operacji scalania na wysokim poziomie.

Rozwiązanie: Użyj statycznej funkcji PdfDocument.Merge():

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

Lista kontrolna migracji

Przed migracją

  • Sporządź spis wszystkich miejsc użyciaMuPDFw kodzie źródłowym
  • Dokumentuj wszystkie operacje renderowania (DPI, współczynniki skalowania)
  • Określ wszelkie potrzeby związane z tworzeniem plików PDF (obecnie korzystasz z narzędzi zewnętrznych)
  • Wymagania dotyczące ekstrakcji tekstu z listy
  • Przejrzyj skrypty wdrażania dotyczące obsługi natywnych plików binarnych
  • Uzyskaj klucz licencyjny IronPDF

Zmiany w pakiecie

  • Usuń pakiet MuPDF.NET
  • Usuń pakiet MuPDFCore
  • Usuń pakiety MuPDFCore.NativeAssets.* / MuPDF.NativeAssets
  • Zainstaluj pakiet NuGet IronPdf: dotnet add package IronPdf
  • Zaktualizuj importy przestrzeni nazw

Zmiany w kodzie

  • Dodaj konfigurację klucza licencyjnego podczas uruchamiania
  • Zastąp Document (MuPDF.NET) / MuPDFDocument (MuPDFCore) przez PdfDocument.FromFile()
  • Zastąp doc.PageCount / document.Pages.Count przez pdf.PageCount
  • Zastąp doc[i].GetText() przez page.Text lub pdf.ExtractAllText()
  • Zastąp wywołania Document.InsertPdf przez PdfDocument.Merge()
  • Usuń jawny szablon kontekstu/usuń
  • W razie potrzeby dodaj kod do tworzenia plików PDF (HTML do PDF)

Po migracji

  • Usuń natywne pliki binarneMuPDFz projektu
  • Zaktualizuj pliki Docker, aby usunąć instalację MuPDF
  • Usuń foldery środowiska uruchomieniowego specyficzne dla platformy
  • Przeprowadź testy regresji, porównując wygenerowane wyniki
  • Przetestuj na wszystkich platformach docelowych (Windows, Linux, macOS)
  • Rozważ dodanie nowych funkcji (znaki wodne, zabezpieczenia, nagłówki/stopki)

Zwróć uwagęMuPDF, MuPDF.NET i wkhtmltopdf są zastrzeżonymi znakami towarowymi ich właścicieli. Ta strona nie jest powiazana z, popierana przez ani sponsorowana przez Artifex Software ani wkhtmltopdf. Wszystkie nazwy produktów, logo i marki są własnością ich odpowiednich właścicieli. Porównania mają charakter wyłącznie informacyjny i odzwierciedlają informacje dostępne publicznie w momencie pisania.

Curtis Chau
Autor tekstów technicznych

Curtis Chau posiada tytuł licencjata z informatyki (Uniwersytet Carleton) i specjalizuje się w front-endowym rozwoju, z ekspertką w Node.js, TypeScript, JavaScript i React. Pasjonuje się tworzeniem intuicyjnych i estetycznie przyjemnych interfejsów użytkownika, Curtis cieszy się pracą z nowoczesnymi frameworkami i tworzeniem dobrze zorganizowanych, atrakcyjnych wizualnie podrę...

Czytaj więcej

Zespół wsparcia Iron

Jesteśmy online 24 godziny, 5 dni w tygodniu.
Czat
E-mail
Zadzwoń do mnie