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。 在v13中,通過ABCpdf.ABCChrome123.Linux運行時包新增了Linux支持。 不支持macOS,幾個Windows特定功能(XPS,WPF)在Linux上仍不可用。

文件風格

ABpdf的文件雖然很全面,但遵循較舊的風格,相比現代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+ or .NET Core 3.1+ / .NET 5-9
  • Visual Studio 2019+ or 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()IDisPObjectUspose和using模式使用using語句
引擎選擇MSHtml內建Chromium移除引擎配置
頁面索引基於1的(doc.Page = 1)基於0的(pdf.Pages[0])調整索引引用
坐標基於點的,使用doc.RectCSS基於邊距使用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 for .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 for .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 for .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 for .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;
}

之後(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提供異步方法以改善Web應用程式性能:

using IronPdf;

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

依賴注入設置

在現代.NET應用程式中使用當前C#模式註冊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包
  • 安裝IronPDF NuGet包
  • 在應用程式啟動中新增授權密鑰
  • 更新所有using語句
  • ChromePdfRenderer
  • doc.Clear()
  • 根據API映射更新方法調用
  • 將基於坐標的佈局轉換為CSS邊距

遷移後

  • 運行所有現有的PDF測試
  • PDF輸出(ABCpdf與IronPDF)的視覺比較
  • 在測試環境中測試所有PDF工作流程
  • 性能基準比較
  • 移除ABCpdf授權配置
  • 更新CI/CD管道依賴性
請注意: ABCpdf是一個已註冊商標,屬於其各自的所有者。 本網站與WebSupergoo Software沒有任何關聯、認可或贊助。 所有產品名稱、標誌和品牌均為其各自所有者的財產。 比較僅供參考,反映撰寫時公開可用的資訊。
Curtis Chau
技術作家

Curtis Chau擁有Carleton大學的電腦科學學士學位,專精於前端開發,擁有Node.js、TypeScript、JavaScript和React的專業知識。Curtis熱衷於建立直觀且美觀的使用者介面,喜愛使用現代框架並建立結構良好、視覺吸引力的手冊。

...
閱讀更多

相關文章

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天試用金鑰
無需信用卡或帳戶建立