IRONSOFTWAREHOME
视频

如何在ASP .NET Core Web App中将Razor页面转换为PDF

Curtis Chau
Curtis Chau
Updated: 2026年7月19日

对于旨在简化许可、现代化文档和原生跨平台支持的开发团队而言,从ABCpdf for .NET切换到IronPDF是一项战略性升级。 本指南提供了循序渐进的迁移路径,包括 API 映射和来自真实场景的代码转换示例。

无论您是使用.NET Framework 4.6.2还是面向.NET 9,本ABCpdf迁移指南确保轻松过渡到IronPDF基于Chrome的渲染引擎。

为什么要考虑 ABCpdf 迁移?

来自WebSupergoo的ABCpdf(当前版本:v13.4.4,2026年4月9日发布)多年以来一直是一个强大的.NET PDF库。 然而,一些因素使得IronPDF成为现代开发团队一个有吸引力的替代选择。

许可复杂性

ABCpdf使用分级许可模式,需要一定的精力来导航。 单电脑标准许可费用为$329(仅32位); 专业版费用为$479; 专业版再分发费用为$4,790; 团体许可证费用高达$33,530。许可证是永久的,v13的密钥也覆盖v8–v12。许多开发人员报告说在项目预算时,分级迷宫是一个显著的管理负担。

Windows优先架构(直到v13)

大部分历史中,ABCpdf仅支持Windows。 Linux支持在v13中通过ABCpdf.ABCChrome123.Linux运行时包添加。 macOS不受支持,一些特定于Windows的功能(XPS、WPF)在Linux上仍不可用。

文档风格

ABCpdf 的文档虽然详尽,但其风格较为陈旧,与现代 API 文档标准相比显得过时。 新用户往往很难找到他们需要的确切示例,尤其是在使用较新的 .NET 版本时。

引擎配置开销

ABCpdf需要显式引擎选择——doc.Clear()调用进行手动资源管理。 这就在每个 PDF 操作中增加了模板代码,而现代开发人员更希望避免这些代码。

##IronPDF与 ABCpdf:功能比较

下表比较了两个 .NET PDF 库的主要区别:

特征ABCpdf for .NETIronPDF
渲染引擎ABCChrome (Chrome123/117/86/65),Gecko,WebKit,MSHtml完整的 Chromium(CSS3、JavaScript)
跨平台Windows优先; v13添加了Linux (无macOS)本地 Windows、Linux、macOS、Docker
许可模式标准$329 / 专业$479 / 专业再分发$4,790 / 团体$33,530,永久简单、透明的定价
.NET支持.NET Framework 4.0+, .NET Core 3.0+, .NET 5+Framework 4.6.2 到 .NET 9
资源管理需要手动doc.Clear()IDisposable与using语句
许可证设置经常使用注册表基于代码的简单许可证密钥
文档过时的风格带有大量示例的现代文档

开始迁移之前

前提条件

确保您的开发环境符合这些要求:

  • .NET Framework 4.6.2+ 或 .NET Core 3.1+ / .NET 5-9
  • Visual Studio 2019+ 或 JetBrains Rider
  • 访问 NuGet 包管理器
  • IronPDF 许可证密钥(可免费试用)

查找所有 ABCpdf 参考资料

在您的解决方案目录下运行这些命令,以查找使用ABCpdf for .NET的所有文件:

grep -r "using WebSupergoo" --include="*.cs" .
grep -r "ABCpdf" --include="*.csproj" .
SHELL

本次审核将确定每个需要修改的文件,确保完整的迁移覆盖范围。

值得期待的重大变化

了解ABCpdf for .NET和IronPDF在架构上的差异,可避免在迁移过程中出现意外:

翻译类别ABCpdf 行为IronPDF 行为迁移行动
对象模型Doc类是核心ChromePdfRenderer + PdfDocument渲染与文档分离
资源清理手动doc.Clear()IDisposable 模式使用using语句
引擎选择MSHtml内置 Chromium删除引擎配置
页面索引基于1的(doc.Page = 1基于0的(pdf.Pages[0]调整索引参考
坐标基于点的与doc.Rect基于 CSS 的边距使用 CSS 或 RenderingOptions

快速入门:5 分钟迁移

步骤 1:更新 NuGet 软件包

# Remove ABCpdf
dotnet remove package ABCpdf

# Install IronPDF
dotnet add package IronPdf
SHELL

步骤 2:设置许可证密钥

在应用程序启动时,在任何IronPDF操作之前添加此内容:

// Add at application startup (Program.cs or Startup.cs)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";

步骤 3:全局查找和替换

更新整个代码库中的所有命名空间引用:

查找替换为
using WebSupergoo.ABCpdf13;using IronPdf;
using WebSupergoo.ABCpdf13.Objects;using IronPdf;
using WebSupergoo.ABCpdf12;using IronPdf;
using WebSupergoo.ABCpdf11;using IronPdf;

完整的 API 参考

文档创建方法

下表将ABCpdf for .NET方法与IronPDF对应方法进行了映射:

ABCpdf 方法IronPDF 方法
new Doc()new ChromePdfRenderer()
doc.AddImageUrl(url)renderer.RenderUrlAsPdf(url)
doc.AddImageHtml(html)renderer.RenderHtmlAsPdf(html)
doc.AddImageFile(path)renderer.RenderHtmlFileAsPdf(path)
doc.Read(path)PdfDocument.FromFile(path)
doc.Save(path)pdf.SaveAs(path)
doc.GetData()pdf.BinaryData
doc.Clear()使用using语句

页面操作方法

ABCpdf 方法IronPDF 方法
doc.PageCountpdf.PageCount
doc.Page = npdf.Pages[n-1]
doc.Delete(pageId)pdf.RemovePages(index)
doc.Append(otherDoc)PdfDocument.Merge(pdf1, pdf2)
doc.Rect.Inset(x, y)RenderingOptions.MarginTop/Bottom/Left/Right

安全和加密方法

ABCpdf 方法IronPDF 方法
doc.Encryption.Passwordpdf.SecuritySettings.OwnerPassword
doc.Encryption.CanPrintpdf.SecuritySettings.AllowUserPrinting
doc.Encryption.CanCopypdf.SecuritySettings.AllowUserCopyPasteContent
doc.SetInfo("Title", value)pdf.MetaData.Title

代码迁移示例

示例 1:从 URL 将 HTML 转换为 PDF.

本示例演示了将网页转换为 PDF,这是最常见的 PDF 生成任务之一。

ABCpdf 适用于 .NET 实现:

// NuGet: Install-Package ABCpdf
using System;
using WebSupergoo.ABCpdf13;
using WebSupergoo.ABCpdf13.Objects;

class Program
{
    static void Main()
    {
        Doc doc = new Doc();
        doc.HtmlOptions.Engine = EngineType.Chrome123;
        doc.AddImageUrl("https://www.example.com");
        doc.Save("output.pdf");
        doc.Clear();
    }
}

IronPDF 实现:

// NuGet: Install-Package IronPdf
using System;
using IronPdf;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderUrlAsPdf("https://www.example.com");
        pdf.SaveAs("output.pdf");
    }
}

IronPDF 的方法无需进行明确的引擎配置和手动清理,降低了代码的复杂性,同时保持了完整的 Chrome 渲染功能。

示例 2:HTML 字符串到 PDF.

将 HTML 字符串转换为 PDF 对于生成动态报告和文档至关重要。

ABCpdf 适用于 .NET 实现:

// NuGet: Install-Package ABCpdf
using System;
using WebSupergoo.ABCpdf13;
using WebSupergoo.ABCpdf13.Objects;

class Program
{
    static void Main()
    {
        string html = "<html><body><h1>Hello World</h1><p>This is a PDF document.</p></body></html>";
        Doc doc = new Doc();
        doc.HtmlOptions.Engine = EngineType.Chrome123;
        doc.AddImageHtml(html);
        doc.Save("output.pdf");
        doc.Clear();
    }
}

IronPDF 实现:

// NuGet: Install-Package IronPdf
using System;
using IronPdf;

class Program
{
    static void Main()
    {
        string html = "<html><body><h1>Hello World</h1><p>This is a PDF document.</p></body></html>";
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf(html);
        pdf.SaveAs("output.pdf");
    }
}

IronPDF 版本所需的代码行数较少,默认使用 Chrome 浏览器渲染,确保在所有平台上输出一致。

示例 3:合并多个 PDF 文件

文档处理工作流程中经常需要合并多个 PDF 文档。

ABCpdf 适用于 .NET 实现:

// NuGet: Install-Package ABCpdf
using System;
using WebSupergoo.ABCpdf13;
using WebSupergoo.ABCpdf13.Objects;

class Program
{
    static void Main()
    {
        Doc doc1 = new Doc();
        doc1.Read("document1.pdf");
        
        Doc doc2 = new Doc();
        doc2.Read("document2.pdf");
        
        doc1.Append(doc2);
        doc1.Save("merged.pdf");
        
        doc1.Clear();
        doc2.Clear();
    }
}

IronPDF 实现:

// NuGet: Install-Package IronPdf
using System;
using System.Collections.Generic;
using IronPdf;

class Program
{
    static void Main()
    {
        var pdf1 = PdfDocument.FromFile("document1.pdf");
        var pdf2 = PdfDocument.FromFile("document2.pdf");
        
        var merged = PdfDocument.Merge(pdf1, pdf2);
        merged.SaveAs("merged.pdf");
    }
}

IronPDF的静态Doc实例的需要。

示例 4:带边距的完整迁移模式

本示例展示了生成带有自定义页边距的 PDF 的完整前后迁移。

之前(ABCpdf 适用于 .NET):

using WebSupergoo.ABCpdf13;
using WebSupergoo.ABCpdf13.Objects;

public byte[] GeneratePdf(string html)
{
    Doc doc = new Doc();
    doc.HtmlOptions.Engine = EngineType.Chrome123;
    doc.Rect.Inset(20, 20);
    doc.AddImageHtml(html);
    byte[] data = doc.GetData();
    doc.Clear();  // Manual cleanup required
    return data;
}

After (IronPDF):

using IronPdf;

public byte[] GeneratePdf(string html)
{
    var renderer = new ChromePdfRenderer();
    renderer.RenderingOptions.MarginTop = 20;
    renderer.RenderingOptions.MarginBottom = 20;
    renderer.RenderingOptions.MarginLeft = 20;
    renderer.RenderingOptions.MarginRight = 20;

    using var pdf = renderer.RenderHtmlAsPdf(html);
    return pdf.BinaryData;  // Automatic cleanup with 'using'
}

高级迁移场景

ASP.NET Core Web 应用程序

对于使用 .NET 6+ 构建 Web 应用程序的团队,以下是推荐模式:

ABCpdf模式:

[HttpPost]
public IActionResult GeneratePdf([FromBody] ReportRequest request)
{
    Doc doc = new Doc();
    doc.HtmlOptions.Engine = EngineType.Chrome123;
    doc.AddImageHtml(request.Html);
    byte[] pdfBytes = doc.GetData();
    doc.Clear();

    return File(pdfBytes, "application/pdf", "report.pdf");
}

IronPDF模式:

[HttpPost]
public IActionResult GeneratePdf([FromBody] ReportRequest request)
{
    var renderer = new ChromePdfRenderer();
    using var pdf = renderer.RenderHtmlAsPdf(request.Html);

    return File(pdf.BinaryData, "application/pdf", "report.pdf");
}

异步 PDF 生成

ABCpdf 不支持本地异步。IronPDF提供async方法,以提高网络应用程序的性能:

using IronPdf;

public async Task<byte[]> GeneratePdfAsync(string html)
{
    var renderer = new ChromePdfRenderer();
    using var pdf = await renderer.RenderHtmlAsPdfAsync(html);
    return pdf.BinaryData;
}

依赖注入设置

使用当前 C# 模式在现代 .NET 应用程序中注册 IronPDF:

// Program.cs (.NET 6+)
builder.Services.AddSingleton<ChromePdfRenderer>();

// Or create a service wrapper
public interface IPdfService
{
    Task<byte[]> GeneratePdfAsync(string html);
}

public class IronPdfService : IPdfService
{
    private readonly ChromePdfRenderer _renderer;

    public IronPdfService()
    {
        _renderer = new ChromePdfRenderer();
        _renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
    }

    public async Task<byte[]> GeneratePdfAsync(string html)
    {
        using var pdf = await _renderer.RenderHtmlAsPdfAsync(html);
        return pdf.BinaryData;
    }
}

// Register: builder.Services.AddSingleton<IPdfService, IronPdfService>();

性能优化技巧

重复使用渲染器进行批量操作

// Good: Single renderer instance
var renderer = new ChromePdfRenderer();
foreach (var html in htmlList)
{
    using var pdf = renderer.RenderHtmlAsPdf(html);
    pdf.SaveAs($"output_{i}.pdf");
}

// Bad: New renderer each time (slower startup)
foreach (var html in htmlList)
{
    var renderer = new ChromePdfRenderer(); // Overhead!
    using var pdf = renderer.RenderHtmlAsPdf(html);
    pdf.SaveAs($"output_{i}.pdf");
}

内存使用对比

情景ABCpdf for .NETIronPDF
单个 10 页 PDF~80 MB~50 MB
批量翻译 100 份 PDF高(人工清理)~100 MB
大型 HTML(5MB 以上)变量~150 MB

常见迁移问题的故障排除

PDF 渲染空白

**症状:**输出 PDF 在迁移后有空页。

解决方案: JavaScript 内容在呈现前可能未完全加载:

var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.WaitFor.RenderDelay(2000); // Wait 2 seconds
// Or wait for specific element:
renderer.RenderingOptions.WaitFor.HtmlElementById("content-loaded");

页眉/页脚未显示

**症状:**TextHeader/TextFooter 在输出中不可见。

**解决方案:**确保页边距为页眉/页脚内容留出空间:

var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.MarginTop = 40; // mm - leave room for header
renderer.RenderingOptions.MarginBottom = 40; // mm - leave room for footer

renderer.RenderingOptions.TextHeader = new TextHeaderFooter
{
    CenterText = "Header Text",
    FontSize = 12
};

迁移清单

迁移前

  • grep -r "WebSupergoo" --include="*.cs" .审核所有ABCpdf的使用
  • 记录当前的PDF输出要求 创建包含示例 PDF 输出的测试用例以进行比较。
  • 获取IronPDF 许可证密钥
  • 备份代码库

迁移过程中

  • 删除 ABCpdf NuGet 包
  • 安装IronPDFNuGet 包
  • 将许可证密钥添加到应用程序启动项
  • 更新所有using语句
  • ChromePdfRenderer
  • using语句
  • 根据 API 映射更新方法调用
  • 将基于坐标的布局转换为 CSS 边距

后迁移

  • 运行所有现有的 PDF 测试
  • PDF 输出结果的直观比较(ABCpdf 与 IronPDF)
  • 在测试环境中测试所有 PDF 工作流程
  • 性能基准比较
  • 移除 ABCpdf 许可证配置
  • 更新 CI/CD 流水线依赖项
请注意: ABCpdf 是其各自所有者的注册商标。 本网站与WebSupergoo Software无关联、未获得其认可或赞助。 所有产品名称、徽标和品牌均为各自所有者的财产。 比较仅供参考,反映撰写时公开可用的信息。
Curtis Chau
技术作家

Curtis Chau 拥有卡尔顿大学的计算机科学学士学位,专注于前端开发,精通 Node.js、TypeScript、JavaScript 和 React。他热衷于打造直观且美观的用户界面,喜欢使用现代框架并创建结构良好、视觉吸引力强的手册。

...
阅读更多

相关文章

Key in blue circle

立即获取免费的 30 天试用版密钥

Your trial license will be sent to your email address

无任何限制。100% 解锁。无需信用卡。

bullet_checked无需信用卡或创建账户无任何限制。100% 解锁。无需信用卡。
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
预约您的免费现场演示
Booking Badge

深受全球数百万工程师信赖

Iron Software 的客户徽标
获取您的无义务咨询
填写下面的表格或通过sales@ironsoftware.com
您的资料将始终保密。
深受全球数百万工程师信赖
Iron Software 的客户徽标
立即获取您的免费30 天试用密钥
无需信用卡或创建账户