迁移指南 如何用 C# 从 Aspose.PDF 迁移到 IronPDF Curtis Chau 已发布:2026年1月11日 下载 IronPDF NuGet 下载 DLL 下载 Windows 安装程序 免费试用 法学硕士副本 法学硕士副本 将页面复制为 Markdown 格式,用于 LLMs 在 ChatGPT 中打开 向 ChatGPT 咨询此页面 在双子座打开 向 Gemini 询问此页面 在 Grok 中打开 向 Grok 询问此页面 打开困惑 向 Perplexity 询问有关此页面的信息 分享 在 Facebook 上分享 分享到 X(Twitter) 在 LinkedIn 上分享 复制链接 电子邮件文章 为什么要从 Aspose.PDF 迁移? 虽然 Aspose.PDF 提供了企业级的功能,但仍有一些因素促使开发团队为其 PDF 生成需求寻求现代的替代方案。 成本比较 Aspose.PDF 采用传统的企业许可模式,每年续订一次,随着时间的推移,续订费用会大幅增加: 方面 Aspose.PDF IronPDF 起始价格 1,199美元/开发人员/年 一次性 749 美元(Lite) 许可模式 年度订阅 + 续订 永久许可证 OEM许可 5,997 美元以上的额外费用 包含在较高的层级中 支持 额外费用层级 包括 3年总成本 每位开发人员 3,597 美元以上 一次性 749 美元 HTML 渲染引擎比较 Aspose.PDF 使用的是 Flying Saucer CSS 引擎,该引擎与现代网络标准相去甚远。IronPDF采用完整的 Chromium 渲染引擎: 特征 Aspose.PDF(飞碟) IronPdf (Chromium) CSS3 支持。 有限(旧版 CSS) 完整的 CSS3 Flexbox/网格 不支持 全面支持 JavaScript语言 非常有限 全面支持 网络字体 部分翻译 完成 现代 HTML5. 有限的 完成 渲染质量 变量 完美的像素 记录的性能问题 用户反映这两个库在性能上存在很大差异: 指标 Aspose.PDF IronPDF HTML 渲染 记录的速度减慢(在某些情况下慢 30 倍) 优化的 Chromium 引擎 大型文档 报告的内存问题 高效流 Linux 性能 CPU、内存泄漏报告 稳定 Aspose.PDF 与 IronPDF:主要区别 方面 Aspose.PDF IronPDF 定价 1,199美元/开发人员/年(订阅) 一次性 749 美元(Lite) HTML 引擎 飞碟(有限 CSS) Chromium (完全 CSS3/JS) 性能 记录减速 优化 许可模式 年度续订 + .lic 文件 永久 + 基于代码的密钥 Linux 支持 报告的问题(CPU、内存) 稳定 页面索引 基于 1 (Pages[1]) 基于 0 (Pages[0]) 迁移前准备 前提条件 确保您的环境符合这些要求: .NET Framework 4.6.2+ 或 .NET Core 3.1 / .NET 5-9 Visual Studio 2019+ 或带有 C# 扩展的 VS Code 访问 NuGet 包管理器 -IronPDF许可证密钥(可在ironpdf.com免费试用) 审核 Aspose.PDF 的使用情况 在解决方案目录中运行这些命令以识别所有 Aspose.PDF 引用: # Find all Aspose.Pdf using statements grep -r "using Aspose.Pdf" --include="*.cs" . # Find HtmlLoadOptions usage grep -r "HtmlLoadOptions\|HtmlFragment" --include="*.cs" . # Find Facades usage grep -r "PdfFileEditor\|PdfFileMend\|PdfFileStamp" --include="*.cs" . # Find TextAbsorber usage grep -r "TextAbsorber\|TextFragmentAbsorber" --include="*.cs" . # Find all Aspose.Pdf using statements grep -r "using Aspose.Pdf" --include="*.cs" . # Find HtmlLoadOptions usage grep -r "HtmlLoadOptions\|HtmlFragment" --include="*.cs" . # Find Facades usage grep -r "PdfFileEditor\|PdfFileMend\|PdfFileStamp" --include="*.cs" . # Find TextAbsorber usage grep -r "TextAbsorber\|TextFragmentAbsorber" --include="*.cs" . SHELL 值得期待的重大变化 Aspose.PDF 模式 更改要求 new Document() + Pages.Add() 使用 HTML 渲染 HtmlLoadOptions ChromePdfRenderer.RenderHtmlAsPdf() TextFragment + 手动定位 基于 CSS 的定位 PdfFileEditor.Concatenate() PdfDocument.Merge() 文本片段吸收器 pdf.ExtractAllText() 图像印记 基于 HTML 的水印 `.lic文件许可 基于代码的许可证密钥 1 基于页面索引 基于 0 的页面索引 逐步迁移过程 步骤 1:更新 NuGet 软件包 移除 Aspose.PDF,安装 IronPDF: # Remove Aspose.PDF dotnet remove package Aspose.PDF # Install IronPDF dotnet add package IronPdf # Remove Aspose.PDF dotnet remove package Aspose.PDF # Install IronPDF dotnet add package IronPdf SHELL 或通过软件包管理器控制台: Uninstall-Package Aspose.PDF Install-Package IronPdf 步骤 2:更新命名空间引用 用IronPDF替换 Aspose.PDF 命名空间: // Remove these using Aspose.Pdf; using Aspose.Pdf.Text; using Aspose.Pdf.Facades; using Aspose.Pdf.Generator; // Add these using IronPdf; using IronPdf.Rendering; using IronPdf.Editing; // Remove these using Aspose.Pdf; using Aspose.Pdf.Text; using Aspose.Pdf.Facades; using Aspose.Pdf.Generator; // Add these using IronPdf; using IronPdf.Rendering; using IronPdf.Editing; $vbLabelText $csharpLabel 步骤 3:更新许可配置 Aspose.PDF 使用 .lic 文件许可。 IronPdf 使用基于代码的简单密钥。 Aspose.PDF 的实现: var license = new Aspose.Pdf.License(); license.SetLicense("Aspose.Pdf.lic"); var license = new Aspose.Pdf.License(); license.SetLicense("Aspose.Pdf.lic"); $vbLabelText $csharpLabel IronPDF 实现: IronPdf.License.LicenseKey = "YOUR-IRONPDF-LICENSE-KEY"; IronPdf.License.LicenseKey = "YOUR-IRONPDF-LICENSE-KEY"; $vbLabelText $csharpLabel 完整的 API 迁移参考 核心类映射 Aspose.PDF 类 IronPdf 同等产品 备注 文档|PDF 文档` 主要文件类型 HtmlLoadOptions ChromePdfRenderer HTML 转 PDF 文本片段吸收器 PdfDocument.ExtractAllText() 文本提取 PDFFileEditor PdfDocument.Merge() 合并/拆分操作 TextStamp / ImageStamp PdfDocument.ApplyWatermark() 水印 许可 IronPdf.License 许可 文档操作 Aspose.PDF 方法 IronPdf 方法 备注 new Document() new PdfDocument() 空文档 新文档(路径) PdfDocument.FromFile(路径) 从文件加载 doc.Save(路径) pdf.SaveAs(路径) 保存到文件 doc.Pages.Count pdf.PageCount 页数 doc.Pages.Delete(index) pdf.RemovePage(index) 删除页面 HTML 到 PDF 转换 Aspose.PDF 方法 IronPdf 方法 备注 new HtmlLoadOptions() new ChromePdfRenderer() HTML 渲染器 new Document(stream, htmlOptions) renderer.RenderHtmlAsPdf(html) HTML 字符串 新文档(路径、html 选项) renderer.RenderHtmlFileAsPdf(path) HTML 文件 代码迁移示例 HTML字符串到PDF 最常见的 Aspose.PDF 操作展示了方法上的根本区别--Aspose.PDF 需要将 HTML 包装在 MemoryStream 中,而IronPDF则直接接受字符串。 Aspose.PDF 的实现: // NuGet: Install-Package Aspose.PDF using Aspose.Pdf; using System; using System.IO; using System.Text; class Program { static void Main() { string htmlContent = "<html><body><h1>Hello World</h1><p>This is a PDF from HTML string.</p></body></html>"; using (var stream = new MemoryStream(Encoding.UTF8.GetBytes(htmlContent))) { var htmlLoadOptions = new HtmlLoadOptions(); var document = new Document(stream, htmlLoadOptions); document.Save("output.pdf"); } Console.WriteLine("PDF created from HTML string"); } } // NuGet: Install-Package Aspose.PDF using Aspose.Pdf; using System; using System.IO; using System.Text; class Program { static void Main() { string htmlContent = "<html><body><h1>Hello World</h1><p>This is a PDF from HTML string.</p></body></html>"; using (var stream = new MemoryStream(Encoding.UTF8.GetBytes(htmlContent))) { var htmlLoadOptions = new HtmlLoadOptions(); var document = new Document(stream, htmlLoadOptions); document.Save("output.pdf"); } Console.WriteLine("PDF created from HTML string"); } } $vbLabelText $csharpLabel IronPDF 实现: // NuGet: Install-Package IronPdf using IronPdf; using System; class Program { static void Main() { string htmlContent = "<html><body><h1>Hello World</h1><p>This is a PDF from HTML string.</p></body></html>"; var renderer = new ChromePdfRenderer(); var pdf = renderer.RenderHtmlAsPdf(htmlContent); pdf.SaveAs("output.pdf"); Console.WriteLine("PDF created from HTML string"); } } // NuGet: Install-Package IronPdf using IronPdf; using System; class Program { static void Main() { string htmlContent = "<html><body><h1>Hello World</h1><p>This is a PDF from HTML string.</p></body></html>"; var renderer = new ChromePdfRenderer(); var pdf = renderer.RenderHtmlAsPdf(htmlContent); pdf.SaveAs("output.pdf"); Console.WriteLine("PDF created from HTML string"); } } $vbLabelText $csharpLabel IronPdf 完全取消了 MemoryStream 封装--一个更简洁、更直观的 API。 将 HTML 文件转换为 PDF 文件 Aspose.PDF 的实现: // NuGet: Install-Package Aspose.PDF using Aspose.Pdf; using System; class Program { static void Main() { var htmlLoadOptions = new HtmlLoadOptions(); var document = new Document("input.html", htmlLoadOptions); document.Save("output.pdf"); Console.WriteLine("PDF created successfully"); } } // NuGet: Install-Package Aspose.PDF using Aspose.Pdf; using System; class Program { static void Main() { var htmlLoadOptions = new HtmlLoadOptions(); var document = new Document("input.html", htmlLoadOptions); document.Save("output.pdf"); Console.WriteLine("PDF created successfully"); } } $vbLabelText $csharpLabel IronPDF 实现: // NuGet: Install-Package IronPdf using IronPdf; using System; class Program { static void Main() { var renderer = new ChromePdfRenderer(); var pdf = renderer.RenderHtmlFileAsPdf("input.html"); pdf.SaveAs("output.pdf"); Console.WriteLine("PDF created successfully"); } } // NuGet: Install-Package IronPdf using IronPdf; using System; class Program { static void Main() { var renderer = new ChromePdfRenderer(); var pdf = renderer.RenderHtmlFileAsPdf("input.html"); pdf.SaveAs("output.pdf"); Console.WriteLine("PDF created successfully"); } } $vbLabelText $csharpLabel 合并多个 PDF 文件 Aspose.PDF 需要手动反复浏览页面。IronPDF提供了一个静态 Merge 方法。 Aspose.PDF 的实现: // NuGet: Install-Package Aspose.PDF using Aspose.Pdf; using System; class Program { static void Main() { var document1 = new Document("file1.pdf"); var document2 = new Document("file2.pdf"); foreach (Page page in document2.Pages) { document1.Pages.Add(page); } document1.Save("merged.pdf"); Console.WriteLine("PDFs merged successfully"); } } // NuGet: Install-Package Aspose.PDF using Aspose.Pdf; using System; class Program { static void Main() { var document1 = new Document("file1.pdf"); var document2 = new Document("file2.pdf"); foreach (Page page in document2.Pages) { document1.Pages.Add(page); } document1.Save("merged.pdf"); Console.WriteLine("PDFs merged successfully"); } } $vbLabelText $csharpLabel IronPDF 实现: // NuGet: Install-Package IronPdf using IronPdf; using System; using System.Collections.Generic; 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"); Console.WriteLine("PDFs merged successfully"); } } // NuGet: Install-Package IronPdf using IronPdf; using System; using System.Collections.Generic; 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"); Console.WriteLine("PDFs merged successfully"); } } $vbLabelText $csharpLabel 文本提取 Aspose.PDF 的实现: using Aspose.Pdf; using Aspose.Pdf.Text; var document = new Document("document.pdf"); var absorber = new TextAbsorber(); foreach (Page page in document.Pages) { page.Accept(absorber); } string extractedText = absorber.Text; Console.WriteLine(extractedText); using Aspose.Pdf; using Aspose.Pdf.Text; var document = new Document("document.pdf"); var absorber = new TextAbsorber(); foreach (Page page in document.Pages) { page.Accept(absorber); } string extractedText = absorber.Text; Console.WriteLine(extractedText); $vbLabelText $csharpLabel IronPDF 实现: using IronPdf; var pdf = PdfDocument.FromFile("document.pdf"); // Extract all text - one line! string allText = pdf.ExtractAllText(); Console.WriteLine(allText); // Or extract from specific page string page1Text = pdf.ExtractTextFromPage(0); using IronPdf; var pdf = PdfDocument.FromFile("document.pdf"); // Extract all text - one line! string allText = pdf.ExtractAllText(); Console.WriteLine(allText); // Or extract from specific page string page1Text = pdf.ExtractTextFromPage(0); $vbLabelText $csharpLabel IronPdf 将文本提取从多个步骤简化为单个方法调用。 添加水印 Aspose.PDF 的实现: using Aspose.Pdf; using Aspose.Pdf.Text; var document = new Document("document.pdf"); var textStamp = new TextStamp("CONFIDENTIAL"); textStamp.Background = true; textStamp.XIndent = 100; textStamp.YIndent = 100; textStamp.Rotate = Rotation.on45; textStamp.Opacity = 0.5; textStamp.TextState.Font = FontRepository.FindFont("Arial"); textStamp.TextState.FontSize = 72; textStamp.TextState.ForegroundColor = Color.Red; foreach (Page page in document.Pages) { page.AddStamp(textStamp); } document.Save("watermarked.pdf"); using Aspose.Pdf; using Aspose.Pdf.Text; var document = new Document("document.pdf"); var textStamp = new TextStamp("CONFIDENTIAL"); textStamp.Background = true; textStamp.XIndent = 100; textStamp.YIndent = 100; textStamp.Rotate = Rotation.on45; textStamp.Opacity = 0.5; textStamp.TextState.Font = FontRepository.FindFont("Arial"); textStamp.TextState.FontSize = 72; textStamp.TextState.ForegroundColor = Color.Red; foreach (Page page in document.Pages) { page.AddStamp(textStamp); } document.Save("watermarked.pdf"); $vbLabelText $csharpLabel IronPDF 实现: using IronPdf; using IronPdf.Editing; var pdf = PdfDocument.FromFile("document.pdf"); // HTML-based watermark with full styling control string watermarkHtml = @" <div style=' color: red; opacity: 0.5; font-family: Arial; font-size: 72px; font-weight: bold; text-align: center; '>CONFIDENTIAL</div>"; pdf.ApplyWatermark(watermarkHtml, rotation: 45, verticalAlignment: VerticalAlignment.Middle, horizontalAlignment: HorizontalAlignment.Center); pdf.SaveAs("watermarked.pdf"); using IronPdf; using IronPdf.Editing; var pdf = PdfDocument.FromFile("document.pdf"); // HTML-based watermark with full styling control string watermarkHtml = @" <div style=' color: red; opacity: 0.5; font-family: Arial; font-size: 72px; font-weight: bold; text-align: center; '>CONFIDENTIAL</div>"; pdf.ApplyWatermark(watermarkHtml, rotation: 45, verticalAlignment: VerticalAlignment.Middle, horizontalAlignment: HorizontalAlignment.Center); pdf.SaveAs("watermarked.pdf"); $vbLabelText $csharpLabel IronPDF 使用基于 HTML/CSS 的水印技术,通过熟悉的 Web 技术提供完整的样式控制。 密码保护 Aspose.PDF 的实现: using Aspose.Pdf; var document = new Document("document.pdf"); document.Encrypt("userPassword", "ownerPassword", DocumentPrivilege.ForbidAll, CryptoAlgorithm.AESx256); document.Save("protected.pdf"); using Aspose.Pdf; var document = new Document("document.pdf"); document.Encrypt("userPassword", "ownerPassword", DocumentPrivilege.ForbidAll, CryptoAlgorithm.AESx256); document.Save("protected.pdf"); $vbLabelText $csharpLabel IronPDF 实现: using IronPdf; var pdf = PdfDocument.FromFile("document.pdf"); // Set passwords pdf.SecuritySettings.UserPassword = "userPassword"; pdf.SecuritySettings.OwnerPassword = "ownerPassword"; // Set permissions pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.FullPrintRights; pdf.SecuritySettings.AllowUserCopyPasteContent = false; pdf.SecuritySettings.AllowUserEdits = PdfEditSecurity.NoEdit; pdf.SaveAs("protected.pdf"); using IronPdf; var pdf = PdfDocument.FromFile("document.pdf"); // Set passwords pdf.SecuritySettings.UserPassword = "userPassword"; pdf.SecuritySettings.OwnerPassword = "ownerPassword"; // Set permissions pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.FullPrintRights; pdf.SecuritySettings.AllowUserCopyPasteContent = false; pdf.SecuritySettings.AllowUserEdits = PdfEditSecurity.NoEdit; pdf.SaveAs("protected.pdf"); $vbLabelText $csharpLabel IronPDF 通过强类型属性对权限进行细粒度控制。 更多选项请参阅加密文档。 页眉和页脚 IronPDF 实现: using IronPdf; var renderer = new ChromePdfRenderer(); renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter { HtmlFragment = @" <div style='text-align:center; font-family:Arial; font-size:12px;'> Company Header </div>", DrawDividerLine = true, MaxHeight = 30 }; renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter { HtmlFragment = @" <div style='text-align:center; font-family:Arial; font-size:10px;'> Page {page} of {total-pages} </div>", DrawDividerLine = true, MaxHeight = 25 }; var pdf = renderer.RenderHtmlAsPdf("<h1>Content here</h1>"); pdf.SaveAs("with_headers.pdf"); using IronPdf; var renderer = new ChromePdfRenderer(); renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter { HtmlFragment = @" <div style='text-align:center; font-family:Arial; font-size:12px;'> Company Header </div>", DrawDividerLine = true, MaxHeight = 30 }; renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter { HtmlFragment = @" <div style='text-align:center; font-family:Arial; font-size:10px;'> Page {page} of {total-pages} </div>", DrawDividerLine = true, MaxHeight = 25 }; var pdf = renderer.RenderHtmlAsPdf("<h1>Content here</h1>"); pdf.SaveAs("with_headers.pdf"); $vbLabelText $csharpLabel IronPdf 支持占位符标记,如用于动态页码的 {page} 和 {total-pages} 。 有关更多选项,请参阅页眉和页脚文档。 关键迁移说明 页面索引更改 Aspose.PDF 使用基于 1 的索引。 IronPdf 使用基于 0 的索引: // Aspose.PDF - 1-based indexing var firstPage = doc.Pages[1]; // First page var thirdPage = doc.Pages[3]; // Third page //IronPDF- 0-based indexing var firstPage = pdf.Pages[0]; // First page var thirdPage = pdf.Pages[2]; // Third page // Aspose.PDF - 1-based indexing var firstPage = doc.Pages[1]; // First page var thirdPage = doc.Pages[3]; // Third page //IronPDF- 0-based indexing var firstPage = pdf.Pages[0]; // First page var thirdPage = pdf.Pages[2]; // Third page $vbLabelText $csharpLabel 许可证文件到代码密钥 用基于代码的激活取代 .lic 文件许可: // Aspose.PDF var license = new Aspose.Pdf.License(); license.SetLicense("Aspose.Pdf.lic"); // IronPDF IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"; // Or from environment variable IronPdf.License.LicenseKey = Environment.GetEnvironmentVariable("IRONPDF_LICENSE_KEY"); // Aspose.PDF var license = new Aspose.Pdf.License(); license.SetLicense("Aspose.Pdf.lic"); // IronPDF IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"; // Or from environment variable IronPdf.License.LicenseKey = Environment.GetEnvironmentVariable("IRONPDF_LICENSE_KEY"); $vbLabelText $csharpLabel ASP.NET Core 集成 IronPdf模式: [ApiController] [Route("[controller]")] public class PdfController : ControllerBase { [HttpGet("generate")] public IActionResult GeneratePdf() { var renderer = new ChromePdfRenderer(); var pdf = renderer.RenderHtmlAsPdf("<h1>Report</h1>"); return File(pdf.BinaryData, "application/pdf", "report.pdf"); } [HttpGet("generate-async")] public async Task<IActionResult> GeneratePdfAsync() { var renderer = new ChromePdfRenderer(); var pdf = await renderer.RenderHtmlAsPdfAsync("<h1>Report</h1>"); return File(pdf.Stream, "application/pdf", "report.pdf"); } } [ApiController] [Route("[controller]")] public class PdfController : ControllerBase { [HttpGet("generate")] public IActionResult GeneratePdf() { var renderer = new ChromePdfRenderer(); var pdf = renderer.RenderHtmlAsPdf("<h1>Report</h1>"); return File(pdf.BinaryData, "application/pdf", "report.pdf"); } [HttpGet("generate-async")] public async Task<IActionResult> GeneratePdfAsync() { var renderer = new ChromePdfRenderer(); var pdf = await renderer.RenderHtmlAsPdfAsync("<h1>Report</h1>"); return File(pdf.Stream, "application/pdf", "report.pdf"); } } $vbLabelText $csharpLabel 依赖注入配置 // Program.cs public void ConfigureServices(IServiceCollection services) { // Set license once IronPdf.License.LicenseKey = Configuration["IronPdf:LicenseKey"]; // Register renderer as scoped service services.AddScoped<ChromePdfRenderer>(); } // Program.cs public void ConfigureServices(IServiceCollection services) { // Set license once IronPdf.License.LicenseKey = Configuration["IronPdf:LicenseKey"]; // Register renderer as scoped service services.AddScoped<ChromePdfRenderer>(); } $vbLabelText $csharpLabel 性能优化 // 1. Reuse renderer instance private static readonly ChromePdfRenderer SharedRenderer = new ChromePdfRenderer(); // 2. Disable unnecessary features for speed var renderer = new ChromePdfRenderer(); renderer.RenderingOptions.EnableJavaScript = false; // If not needed renderer.RenderingOptions.WaitFor.RenderDelay(0); // No delay renderer.RenderingOptions.Timeout = 30000; // 30s max // 3. Proper disposal using (var pdf = renderer.RenderHtmlAsPdf(html)) { pdf.SaveAs("output.pdf"); } // 1. Reuse renderer instance private static readonly ChromePdfRenderer SharedRenderer = new ChromePdfRenderer(); // 2. Disable unnecessary features for speed var renderer = new ChromePdfRenderer(); renderer.RenderingOptions.EnableJavaScript = false; // If not needed renderer.RenderingOptions.WaitFor.RenderDelay(0); // No delay renderer.RenderingOptions.Timeout = 30000; // 30s max // 3. Proper disposal using (var pdf = renderer.RenderHtmlAsPdf(html)) { pdf.SaveAs("output.pdf"); } $vbLabelText $csharpLabel 常见迁移问题的故障排除 问题:未找到 HtmlLoadOptions 替换为 ChromePdfRenderer: // Remove this var doc = new Document(stream, new HtmlLoadOptions()); // Use this var renderer = new ChromePdfRenderer(); var pdf = renderer.RenderHtmlAsPdf(htmlString); // Remove this var doc = new Document(stream, new HtmlLoadOptions()); // Use this var renderer = new ChromePdfRenderer(); var pdf = renderer.RenderHtmlAsPdf(htmlString); $vbLabelText $csharpLabel 问题:未找到 TextFragmentAbsorber 使用直接文本提取: // Remove this var absorber = new TextFragmentAbsorber(); page.Accept(absorber); string text = absorber.Text; // Use this var pdf = PdfDocument.FromFile("doc.pdf"); string text = pdf.ExtractAllText(); // Remove this var absorber = new TextFragmentAbsorber(); page.Accept(absorber); string text = absorber.Text; // Use this var pdf = PdfDocument.FromFile("doc.pdf"); string text = pdf.ExtractAllText(); $vbLabelText $csharpLabel 问题:PdfFileEditor.Concatenate 不可用 使用 PdfDocument.Merge(): // Remove this var editor = new PdfFileEditor(); editor.Concatenate(files, output); // Use this var pdfs = files.Select(PdfDocument.FromFile).ToList(); var merged = PdfDocument.Merge(pdfs); merged.SaveAs(output); // Remove this var editor = new PdfFileEditor(); editor.Concatenate(files, output); // Use this var pdfs = files.Select(PdfDocument.FromFile).ToList(); var merged = PdfDocument.Merge(pdfs); merged.SaveAs(output); $vbLabelText $csharpLabel 迁移后核对表 完成代码迁移后,请验证以下内容: 删除 Aspose.PDF 许可证文件(.lic) 验证 HTML 渲染质量(CSS Grid、Flexbox 现在应该可以正常工作) 使用大型文档和复杂的 CSS 测试极端情况 更新页面索引引用(从 1 开始到 0 开始) 如果需要,更新 Docker 配置 使用新的许可证密钥配置更新 CI/CD 流水线 为你的团队记录新模式 未来保护您的 PDF 基础架构 随着 .NET 10 即将推出和 C# 14 引入新的语言特性,选择一个具有现代渲染能力的 PDF 库可以确保与不断发展的网络标准兼容。 IronPdf 的 Chromium 引擎可渲染与现代浏览器相同的 HTML/CSS,这意味着您的 PDF 模板在项目扩展到 2025 年和 2026 年时仍然保持最新,而不会受到 Aspose.PDF 的 Flying Saucer 引擎的 CSS 限制。 其他资源 IronPDF文档 HTML转PDF教程 API 参考 NuGet软件包 许可选项 从 Aspose.PDF 迁移到IronPDF可将您的 PDF 代码库从过时的 HTML 渲染引擎转换为基于 Chromium 的现代渲染引擎。 消除 MemoryStream 包装器、简化文本提取和卓越的 CSS3 支持可立即提高生产率,同时将长期许可成本从年度订阅降低为一次性投资。 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# 从 BitMiracle Docotic PDF 迁移到 IronPDF如何用 C# 从 Apryse PDF 迁移...
已发布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 渲染。包括替换图形基元和自动布局的代码示例。 阅读更多