Como migrar do MuPDF para o IronPDF em C#
Por que migrar doMuPDFpara o IronPDF?
Os Desafios do MuPDF
MuPDF é uma ferramenta PDF capaz, mas sua licença AGPL/comercial dupla (da Artifex) e design focado na renderização criam atrito real para desenvolvedores .NET que constroem aplicações comerciais impulsionadas por HTML. Existem dois principais wrappers .NET: MuPDFCore (comunidade, por arklumpus, AGPL-3.0) e MuPDF.NET (bindings C# oficiais da Artifex, espelhando o PyMuPDF).
-
Armadilha de Licença AGPL: Tanto oMuPDFquanto os wrappers são entregues sob AGPL-3.0 por padrão. Distribuir um produto de código fechado em código AGPL requer ou a abertura do código sob AGPL ou a compra de uma licença comercial da Artifex (o preço é baseado em cotação, não publicado).
-
Foco na Renderização em Primeiro Lugar: Enquanto o MuPDF.NET pode mesclar, redigir, assinar e carimbar marcas d'água (espelhando o PyMuPDF), a maior parte da API e das ferramentas é moldada em torno da visualização e extração de texto estruturado, em vez da geração de documentos controlada por HTML.
-
Nenhum Motor HTML-para-PDF: Nem o MuPDF.NET nem o MuPDFCore possuem um motor HTML/CSS. Gerar PDFs a partir de HTML requer o uso de um navegador separado (Chromium, wkhtmltopdf, PrinceXML) e só carregar o resultado com MuPDF.
-
Dependências Nativas: Ambos os wrappers enviam pacotes
MuPDFCore.NativeAssets/MuPDF.NativeAssetscom binários por RID (win-x64, linux-x64, osx-x64). A implantação multiplataforma funciona, mas imagens Docker precisam do pacote nativo correspondente e da imagem base (glibc vs musl). -
Nenhuma Marca d'Água HTML / Cabeçalhos / Rodapés: A estampagem é baseada em imagem e texto por página; não há motor de template
{page}/{total-pages}da forma como os renderizadores baseados no Chromium expõem. - Superfície de Interoperação C: Wrappers expõem contextos/vidas de documento que se mapear na biblioteca C subjacente — a ordem de descarte importa, crashes nativos podem derrubar o processo inteiro, e o custo de marshaling não é trivial para documentos grandes.
Comparação entreMuPDFe IronPDF
| Recurso | MuPDF | IronPDF |
|---|---|---|
| Licença | AGPL-3.0 ou comercial baseado em cotação (Artifex) | Comercial com preços publicados |
| Foco principal | Renderização, texto estruturado, toolkit de baixo nível | Geração controlada por HTML + manipulação |
| HTML para PDF | Não suportado (sem motor HTML) | Motor totalmente cromado |
| Criação de PDF | Somente nível de página (insira texto/imagens/vetores) | HTML, URL, imagens |
| Manipulação de PDF | Suportado em MuPDF.NET (InsertPdf, Select, DeletePage) |
Suportado (Merge, CopyPages, RemovePages) |
| Dependências | MuPDFnativo + RID NativeAssets | Wrapper gerenciado + Chromium empacotado |
| Suporte da plataforma | Win/Linux/macOS via NativeAssets | Win/Linux/macOS/Docker |
| Suporte assíncrono | Principalmente síncrono; alguns assíncronos no MuPDFCore | APIs assíncronas em renderizador e documento |
| Integração .NET | Wrappers P/Invoke em torno da biblioteca C | Wrapper .NET + Chromium nativo |
IronPDF funciona como uma biblioteca .NET gerenciada em todas as versões modernas do .NET sem complexidade de interoperação nativa.
Avaliação da Complexidade da Migração
Esforço estimado por funcionalidade
| Recurso | Complexidade da Migração |
|---|---|
| Carregamento de documentos | Muito baixo |
| Extração de texto | Muito baixo |
| Fusão de PDFs | Baixo |
| Renderização de imagens | Baixo |
| HTML para PDF | N/A (Nova Capacidade) |
| Segurança/Marcas d'água | N/A (Nova Capacidade) |
Mudança de paradigma
A mudança fundamental nesta migração para oMuPDFé a transição de um visualizador apenas para renderização para uma solução completa de PDF:
MuPDF.NET: Document → doc[i] → GetText / GetPixmap / InsertPdf
MuPDFCore: MuPDFContext → MuPDFDocument → Pages[i] → Render / SaveImage
IronPDF: PdfDocument.FromFile() → Manipulação completa → Criar/Editar/Mesclar/Proteger
Antes de começar
Pré-requisitos
- Ambiente .NET : .NET Framework 4.6.2+ ou .NET Core 3.1+ / .NET 5/6/7/8/9+
- Acesso ao NuGet : Capacidade de instalar pacotes NuGet.
- Licença do IronPDF: Obtenha sua chave de licença em IronPDF
Alterações no pacote 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
Remova também os binários nativos do MuPDF da sua instalação:
- Apagar
mupdf.dll,libmupdf.so,libmupdf.dylib - Remover pastas específicas da plataforma (
runtimes/*/native/) - Atualize os arquivos Docker para remover a instalação do MuPDF.
Configuração de licença
// 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"
Identificar o uso do MuPDF
# Find allMuPDFreferences
grep -r "MuPDF\|MuPDFCore\|MuPDFDocument" --include="*.cs" .
# Find allMuPDFreferences
grep -r "MuPDF\|MuPDFCore\|MuPDFDocument" --include="*.cs" .
Referência completa da API
Carregamento de documentos
| 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() |
Acesso à página
| 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() / iteração de texto estruturado (MuPDFCore) |
page.Text |
Extração de texto
| MuPDF | IronPDF |
|---|---|
Iterar sobre doc[i].GetText() |
pdf.ExtractAllText() |
Criação de PDF (Não disponível no MuPDF)
| MuPDF | IronPDF |
|---|---|
| (sem motor HTML) | ChromePdfRenderer.RenderHtmlAsPdf(html) |
| (sem motor HTML) | ChromePdfRenderer.RenderUrlAsPdf(url) |
Manipulação de PDF
| MuPDF | IronPDF |
|---|---|
docA.InsertPdf(docB) (MuPDF.NET) |
PdfDocument.Merge(pdf1, pdf2) |
page.InsertImage(...) por página (apenas carimbos de imagem/texto) |
pdf.ApplyWatermark(html) |
doc.Save(path, encryption: ..., ownerPw: ..., userPw: ...) |
pdf.SecuritySettings |
Exemplos de migração de código
Exemplo 1: Conversão de HTML para PDF (oMuPDFnão consegue fazer isso)
Antes (MuPDF):
// NuGet: Install-Package MuPDF.NET
using MuPDFCore;
using System.IO;
class Program
{
static void Main()
{
//MuPDFdoesn't support HTML para 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 para PDF conversion");
}
}
// NuGet: Install-Package MuPDF.NET
using MuPDFCore;
using System.IO;
class Program
{
static void Main()
{
//MuPDFdoesn't support HTML para 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 para 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
Apó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
Este exemplo destaca a limitação mais significativa do MuPDF: ele não consegue converter HTML para PDF de forma alguma. O códigoMuPDFlança explicitamente NotSupportedException porque a conversão de HTML para PDF simplesmente não é uma capacidade que oMuPDFoferece. Se você precisasse dessa funcionalidade com o MuPDF, teria que usar uma biblioteca separada como o wkhtmltopdf ou um mecanismo de navegador e, em seguida, carregar o PDF resultante com oMuPDFpara visualização.
O ChromePdfRenderer do IronPDF usa um mecanismo completo do Chromium para renderizar HTML com suporte completo para CSS3, JavaScript, e padrões modernos da web. O método RenderHtmlAsPdf() aceita strings HTML diretamente. Consulte a documentação de conversão de HTML para PDF para obter opções adicionais de renderização, incluindo renderização de URL e conversão de arquivos HTML.
Exemplo 2: Extração de Texto
Antes (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
Apó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
A abordagem MuPDF.NET abre um Document, itera doc.PageCount com um loop for, chama doc[i].GetText() para cada página e constrói o texto com um StringBuilder.
O IronPDF reduz isso a três linhas: carregar o documento com PdfDocument.FromFile(), chamar ExtractAllText() e imprimir o resultado. Nenhuma iteração manual, nenhum StringBuilder. Saiba mais sobre extração de texto de PDFs .
Exemplo 3: Mesclar vários PDFs
Antes (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
Apó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
O MuPDF.NET suporta mesclagem via Document.InsertPdf, que espelha o insert_pdf() do PyMuPDF e anexa cada página de um documento a outro no local. MuPDFCore não expõe uma API de mesclagem equivalente de alto nível.
O método estático PdfDocument.Merge() do IronPDF aceita múltiplos documentos PDF e retorna um único documento mesclado, deixando os inputs intocados. Para mesclar muitos documentos, passe uma lista: PdfDocument.Merge(pdfList). Consulte a documentação sobre mesclagem e divisão de PDFs para obter opções adicionais.
Notas críticas sobre migração
Remover binários nativos
OMuPDFrequer bibliotecas nativas específicas da plataforma. Após migrar para o IronPDF, remova todos os binários nativos do 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
O IronPDF é um código .NET totalmente gerenciado — sem binários nativos para gerenciar em diferentes plataformas.
Padrão de descarte simplificado
MuPDFCore requer explicitamente um MuPDFContext; MuPDF.NET o esconde mas ainda precisa 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
Alteração do padrão de iteração da página
OMuPDFutiliza iteração baseada em índice com contagem de páginas explícita:
// 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
Novas funcionalidades disponíveis
Após migrar para o IronPDF, você obtém recursos que oMuPDFnão oferece:
// Criação de 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
};
// Criação de 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
};
' Criação de 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 = 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
}
Solução de problemas
Problema 1: DocumentoMuPDFnão encontrado
Problema: a classe MuPDFDocument não existe no IronPDF.
Solução: 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")
Problema 2: Pages.Count não encontrado
Problema: o padrão document.Pages.Count não funciona.
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
Problema 3: GetText() não encontrado
Problema: o método page.GetText() não existe.
Solução: Use a propriedade 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()
Questão 4: InsertPdf Não Encontrado
Problema: o Document.InsertPdf do MuPDF.NET (espelha o insert_pdf do PyMuPDF) não tem um nome equivalente direto no IronPDF, e o MuPDFCore não expõe nenhuma mesclagem de alto nível.
Solução: Use o método estático 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);
Lista de verificação para migração
Pré-migração
- Inventariar todos os usos doMuPDFna base de código
- Documentar todas as operações de renderização (DPI, fatores de escala)
- Identificar quaisquer necessidades de criação de PDFs (atualmente utilizando ferramentas externas)
- Listar os requisitos de extração de texto
- Analisar os scripts de implantação para o tratamento de binários nativos.
- Obtenha a chave de licença do IronPDF
Alterações no pacote
- Remover pacote
MuPDF.NET - Remover pacote
MuPDFCore - Remover pacotes
MuPDFCore.NativeAssets.*/MuPDF.NativeAssets - Instalar pacote NuGet
IronPdf:dotnet add package IronPdf - Atualizar importações de namespace
Alterações no código
- Adicionar configuração de chave de licença na inicialização
- Substituir
Document(MuPDF.NET) /MuPDFDocument(MuPDFCore) porPdfDocument.FromFile() - Substituir
doc.PageCount/document.Pages.Countporpdf.PageCount - Substituir
doc[i].GetText()porpage.Textoupdf.ExtractAllText() - Substituir chamadas
Document.InsertPdfporPdfDocument.Merge() - Remova o boilerplate de contexto/descarte explícito
- Adicione o código para criação de PDF, se necessário (HTML para PDF)
Pós-migração
- Remover binários nativos doMuPDFdo projeto
- Atualize os arquivos Docker para remover a instalação do MuPDF.
- Remover pastas de tempo de execução específicas da plataforma
- Execute testes de regressão comparando a saída renderizada
- Testar em todas as plataformas alvo (Windows, Linux, macOS)
- Considere adicionar novas funcionalidades (marcas d'água, segurança, cabeçalhos/rodapés)

