迁移指南 如何用 C# 从 MuPDF 迁移到 IronPDF Curtis Chau 已发布:2026年1月25日 下载 IronPDF NuGet 下载 DLL 下载 Windows 安装程序 免费试用 法学硕士副本 法学硕士副本 将页面复制为 Markdown 格式,用于 LLMs 在 ChatGPT 中打开 向 ChatGPT 咨询此页面 在双子座打开 向 Gemini 询问此页面 在 Grok 中打开 向 Grok 询问此页面 打开困惑 向 Perplexity 询问有关此页面的信息 分享 在 Facebook 上分享 分享到 X(Twitter) 在 LinkedIn 上分享 复制链接 电子邮件文章 为什么要从MuPDF迁移到 IronPDF. MuPDF的挑战 MuPDF 是一款优秀的 PDF 渲染器,但其 AGPL 许可证和仅渲染功能对构建商业应用程序的 .NET 开发人员造成了很大的限制: AGPL 许可陷阱:MuPDF的病毒式许可要求要么将整个应用程序开源为 AGPL,要么购买价格昂贵且不透明的商业许可,并通过联系销售进行定价。 2.仅渲染功能:MuPDF是一个查看器/渲染器——它并非设计用于从 HTML 创建 PDF、文档生成工作流程、表单填写或添加水印和页眉/页脚。 3.不支持 HTML:MuPDF不支持直接将 HTML 转换为 PDF。 您需要先使用其他库将 HTML 转换为支持的格式。这是一个基本限制--MuPDF 主要是一个 PDF 渲染器/查看器。 4.本地依赖项:特定于平台的二进制文件需要手动管理,适用于 Windows、Linux 和 macOS。 Docker 部署因本地库要求而变得复杂,部署打包也带来了挑战。 5.操作有限:不支持合并/拆分 PDF、页面旋转或重新排序、水印或注释、数字签名等内置功能。 C 互操作复杂性:原生绑定引入了内存管理问题、平台特定的错误和编组开销。 MuPDF与IronPDF对比 特征 MuPDF IronPDF 许可证 AGPL(病毒)或昂贵的商业 商业性,价格透明 主要重点 渲染/查看 完整的 PDF 解决方案 HTML 至 PDF 不支持 完整的 Chromium 引擎 PDF 创建 不支持 HTML、URL、图像 PDF 操作 有限的 完成(合并、拆分、编辑) 依赖关系 本地二进制文件 全面管理 平台支持 每平台手册 自动翻译 异步支持 有限的 完整的异步/等待 .NET 集成 C# 互操作 本地 .NET 对于计划在 2025 年和 2026 年之前采用 .NET 10 和 C# 14 的团队来说,IronPDF 作为一个完全托管的 .NET 库,提供了一个面向未来的基础,没有本地互操作的复杂性。 迁移复杂性评估 按功能估算的工作量 特征 迁移复杂性 备注 文件加载 极低 直接方法替换 文本提取 极低 更简单的应用程序接口 PDF 合并 低 静态方法与手动循环 图像渲染 低 RasterizeToImageFiles 与 pixmaps HTML 至 PDF 不适用(新能力) 无法使用 MuPDF 安全/水印 不适用(新能力) 无法使用 MuPDF 范式转换 MuPDF此次迁移的根本转变在于从仅用于渲染的查看器转变为完整的PDF解决方案: MuPDF: MuPDFContext → MuPDFDocument → 页面迭代 → 仅渲染/提取 IronPdf.PdfDocument.FromFile.Text()()()()()()PdfDocument.FromFile() → 完全操作 → 创建/编辑/合并/安全 开始之前 前提条件 .NET 环境: .NET Framework 4.6.2+ 或 .NET Core 3.1+ / .NET 5/6/7/8/9+ NuGet 访问权限:能够安装 NuGet 包 IronPDF 许可证:请从ironpdf.com获取您的许可证密钥。 NuGet 软件包变更 # RemoveMuPDFpackages dotnet remove package MuPDF.NET dotnet remove package MuPDFCore dotnet remove package MuPDFCore.MuPDFWrapper # Install IronPDF dotnet add package IronPdf # RemoveMuPDFpackages dotnet remove package MuPDF.NET dotnet remove package MuPDFCore dotnet remove package MuPDFCore.MuPDFWrapper # Install IronPDF dotnet add package IronPdf SHELL 同时从您的部署中移除本地MuPDF二进制文件: 删除mupdf.dll</code>、libmupdf.so、libmupdf.dylib` 删除特定平台文件夹(`runtimes/*/native/</code) 更新 Docker 文件以移除MuPDF安装 许可配置 // 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 确定MuPDF的用途 # Find allMuPDFreferences grep -r "MuPDF\|MuPDFCore\|MuPDFDocument" --include="*.cs" . # Find allMuPDFreferences grep -r "MuPDF\|MuPDFCore\|MuPDFDocument" --include="*.cs" . SHELL 完整的 API 参考 文档加载 MuPDF IronPDF 备注 new MuPDFDocument(路径)|PdfDocument.FromFile(路径)` 从文件加载 new MuPDFDocument(stream) PdfDocument.FromStream(流) 从流加载 document.Dispose() pdf.Dispose() 清理 页面访问 MuPDF IronPDF 备注 document.Pages.Count pdf.PageCount 页数 document.Pages[index] pdf.Pages[index] 访问页面 page.GetText() page.Text 页面文本 文本提取 MuPDF IronPDF 备注 在 document.Pages[i].GetText() 中循环 pdf.ExtractAllText() 一次性翻译所有文本 PDF 创建(MuPDF 中不提供) MuPDF IronPDF 备注 (不支持) ChromePdfRenderer.RenderHtmlAsPdf(html) HTML 至 PDF (不支持) ChromePdfRenderer.RenderUrlAsPdf(url) URL 至 PDF PDF 操作(MuPDF 中的限制) MuPDF IronPDF 备注 手册页面复制循环 PdfDocument.Merge(pdf1, pdf2) 合并 PDF (不支持) pdf.ApplyWatermark(html) 添加水印 (不支持) pdf.SecuritySettings 密码保护 代码迁移示例 示例 1:HTML 到 PDF 的转换(MuPDF 无法做到这一点) 之前 (MuPDF): // NuGet: Install-Package MuPDF.NET using MuPDFCore; using System.IO; class Program { static void Main() { //MuPDFdoesn't supportHTML 至 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 directHTML 至 PDFconversion"); } } // NuGet: Install-Package MuPDF.NET using MuPDFCore; using System.IO; class Program { static void Main() { //MuPDFdoesn't supportHTML 至 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 directHTML 至 PDFconversion"); } } $vbLabelText $csharpLabel After (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 这个例子突出了MuPDF的最大限制:它根本无法将 HTML 转换为 PDF。MuPDF代码明确抛出 NotSupportedException 异常,因为 HTML 到 PDF 的转换根本不是MuPDF提供的功能。 如果您需要使用MuPDF的这一功能,您必须使用一个单独的库,如 wkhtmltopdf 或浏览器引擎,然后将生成的 PDF 加载到MuPDF中查看。 IronPdf 的 ChromePdfRenderer 使用完整的 Chromium 引擎来呈现 HTML,并支持 CSS3、JavaScript 和现代 Web 标准。 RenderHtmlAsPdf() 方法直接接受 HTML 字符串。 请参阅 HTML to PDF 文档,了解包括 URL 渲染和 HTML 文件转换在内的其他渲染选项。 示例 2:文本提取 之前 (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 After (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 MuPDF 方法要求使用 MuPDFDocument 创建一个 using 块,使用 for 循环手动遍历document.Pages.Count,为每个页面调用document.Pages[i].GetText()并使用StringBuilder` 构建文本。 这是一个简单文本提取的 12 行代码。 IronPDF 将其简化为 3 行:使用 PdfDocument.FromFile() 加载文档,调用 ExtractAllText() 并打印结果。 对于这种简单的操作,不需要手动迭代,不需要 StringBuilder,也不需要使用 using 块进行明确的资源管理。 了解更多关于从PDF中提取文本的信息。 示例 3:合并多个 PDF 文件 之前 (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 After (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 MuPDF 的合并操作特别繁琐。 您必须在嵌套的 using 块中打开两个源文档,使用 MuPDFDocument.Create() 创建一个新的空文档,调用 CopyPage() 遍历第一个文档的每一页,调用 CopyPage() 遍历第二个文档的每一页,最后保存。 这是 20 多行复杂嵌套的代码。 IronPDF 的静态 PdfDocument.Merge() 方法接受多个 PDF 文档并返回一个合并文档。 整个操作为 4 行可读代码。 对于合并多个文档,您可以传递一个列表:PdfDocument.Merge(pdfList)。 有关其他选项,请参阅 合并和拆分 PDF 文档。 关键迁移说明 删除本地二进制文件 MuPDF 需要特定平台的本地库。 迁移到IronPDF后,删除所有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 是完全托管的 .NET 代码,无需跨平台管理本地二进制文件。 简化处置模式 MuPDF 需要明确的上下文和文档管理: // 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 页面迭代模式更改 MuPDF 使用基于索引的迭代,并有明确的页数: // 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 可用的新功能 迁移到IronPDF后,您将获得MuPDF无法提供的功能: //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 (not possible in MuPDF) pdf.AddTextHeader("Document Title"); pdf.AddTextFooter("Page {page} of {total-pages}"); //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 (not possible in MuPDF) pdf.AddTextHeader("Document Title"); pdf.AddTextFooter("Page {page} of {total-pages}"); $vbLabelText $csharpLabel 故障排除 问题 1:未找到 MuPDFDocument 问题:IronPDF中不存在MuPDFDocument类。 解决方案:使用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 问题 2:Pages.Count 未找到 问题: document.Pages.Count模式不起作用。 解决方案:使用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 问题 3:GetText() 未找到 问题: page.GetText()方法不存在。 解决方法:使用page.Text属性或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 问题 4:未找到复制页面 问题:手动复制页面以进行合并的模式。 解决方案:使用静态的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 迁移清单 迁移前 清点代码库中所有MuPDF的使用情况 记录所有渲染操作(DPI、缩放因子) 确定任何 PDF 创建需求(目前使用外部工具) 列出文本提取要求 检查部署脚本中的原生二进制文件处理情况 获取IronPDF许可证密钥 软件包变更 删除MuPDF.NET包 移除MuPDFCore软件包 删除MuPDFCore.MuPDFWrapper包 安装IronPdf NuGet 包: dotnet add package IronPdf 更新命名空间导入 代码更改 在启动时添加许可证密钥配置 将MuPDFDocument替换为PdfDocument.FromFile() 将document.Pages.Count替换为pdf.PageCount 将page.GetText()替换为page.Text或pdf.ExtractAllText() 将手动CopyPage循环替换为PdfDocument.Merge() 移除嵌套的using语句块以进行上下文管理 如有需要,添加 PDF 创建代码(HTML 转 PDF) 后迁移 从项目中移除原生MuPDF二进制文件 更新 Docker 文件以移除MuPDF安装 删除平台特定的运行时文件夹 运行回归测试,比较渲染输出 在所有目标平台(Windows、Linux、macOS)上进行测试 考虑添加新功能(水印、安全设置、页眉/页脚) Curtis Chau 立即与工程团队聊天 技术作家 Curtis Chau 拥有卡尔顿大学的计算机科学学士学位,专注于前端开发,精通 Node.js、TypeScript、JavaScript 和 React。他热衷于打造直观且美观的用户界面,喜欢使用现代框架并创建结构良好、视觉吸引力强的手册。除了开发之外,Curtis 对物联网 (IoT) 有浓厚的兴趣,探索将硬件和软件集成的新方法。在空闲时间,他喜欢玩游戏和构建 Discord 机器人,将他对技术的热爱与创造力相结合。 相关文章 已发布2026年2月1日 如何用 C# 从 ZetPDF 迁移到 IronPDF 通过这本完整的 C# 指南,掌握从 ZetPDF 到 IronPDF 的迁移。从基于坐标的库转换到现代的 HTML 到 PDF 解决方案。包括 HTML 转换、合并 PDF 和移除 PDFSharp 依赖性的代码示例。 阅读更多 已发布2026年2月1日 如何用 C# 从 Scryber.Core 迁移到 IronPDF 通过这本完整的 C# 指南,掌握从 Scryber.Core 迁移到 IronPDF 的方法。从自定义 XML/HTML 解析转换到现代 Chromium 渲染器。包括 HTML 转换、URL 呈现和替换专有绑定的代码示例。 阅读更多 已发布2026年2月1日 如何用 C# 从 XFINIUM.PDF 迁移到 IronPDF 通过这本完整的 C# 指南,掌握从 XFINIUM.PDF 到 IronPDF 的迁移。从基于坐标的手动定位切换到声明式 HTML/CSS 渲染。包括替换图形基元和自动布局的代码示例。 阅读更多 如何在 C# 中从 NReco PDF 生成器迁移到 IronPDF如何用 C# 从 MigraDoc 迁移到...
已发布2026年2月1日 如何用 C# 从 ZetPDF 迁移到 IronPDF 通过这本完整的 C# 指南,掌握从 ZetPDF 到 IronPDF 的迁移。从基于坐标的库转换到现代的 HTML 到 PDF 解决方案。包括 HTML 转换、合并 PDF 和移除 PDFSharp 依赖性的代码示例。 阅读更多
已发布2026年2月1日 如何用 C# 从 Scryber.Core 迁移到 IronPDF 通过这本完整的 C# 指南,掌握从 Scryber.Core 迁移到 IronPDF 的方法。从自定义 XML/HTML 解析转换到现代 Chromium 渲染器。包括 HTML 转换、URL 呈现和替换专有绑定的代码示例。 阅读更多
已发布2026年2月1日 如何用 C# 从 XFINIUM.PDF 迁移到 IronPDF 通过这本完整的 C# 指南,掌握从 XFINIUM.PDF 到 IronPDF 的迁移。从基于坐标的手动定位切换到声明式 HTML/CSS 渲染。包括替换图形基元和自动布局的代码示例。 阅读更多