IRONSOFTWAREHOME
影片

如何在 C# 中將 HTML 文件渲染為 PDF

Curtis Chau
Curtis Chau
Updated: 2026年1月11日

為什麼要從Aspose.PDF遷移?

雖然Aspose.PDF提供企業級的功能,但有幾個因素促使開發團隊尋求現代化替代方案來滿足其PDF生成需求。

成本比較

Aspose.PDF使用永久授權模式,其中包含一年的更新; 可選的續約延長更新時間窗口。 來源:Aspose 定價頁面

方面Aspose.PDFIronPDF
起始價格(開發者小型企業)$1,199/開發者$999一次性(Lite)
許可模式永久+一年更新; optional renewal永久授權
開發者OEM$3,597/開發者(無限部署)包含在更高級別中
支援包含在所有付費級別中包括
免費評估30天臨時授權(否則水印+大小限制)開發免費

HTML渲染引擎比較

Aspose.PDF使用內部開發的HTML/CSS渲染引擎(不是Chromium); 使用者在Aspose論壇上回報了現代CSS佈局功能(如Flexbox和CSS Grid)的缺陷。 IronPDF使用嵌入的Chromium構建來進行HTML-to-PDF渲染。

功能Aspose.PDF(內部引擎)IronPDF(Chromium)
CSS3支援部分; 現代佈局功能有缺陷完整支持 CSS3
Flexbox/Grid有限/不一致(根據Aspose論壇報告)全面支持
JavaScript有限完全支援(V8透過Chromium)
網頁字型部分完整
現代HTML5部分完整
渲染品質隨著複雜佈局變化Chrome等效

性能特性

使用者在Aspose支援論壇上報告了性能差異。 以下資料反映社群報告的情境——與您自己的工作負載進行驗證。

指標Aspose.PDFIronPDF
HTML渲染使用者報告的複雜CSS工作負載減速優化的Chromium引擎
大型文件某些情境下報告了記憶體增長高效流媒體
Linux性能社群論壇上報告了高CPU和記憶體增長穩定

Aspose.PDF對IronPDF:主要差異

方面Aspose.PDFIronPDF
價格(入門級)$1,199/開發者(永久+1年更新)$999一次性(Lite)
HTML引擎內部引擎(現代CSS受限)Chromium(完整CSS3/JS)
性能論壇報告的複雜CSS減速優化
許可模式永久+ .lic 文件;可選續約進行更新永久+基於程式碼的金鑰
Linux支援論壇報告的CPU/記憶體問題穩定
頁碼編索基於1(Pages[1]基於0(Pages[0]

遷移前準備

前提條件

確保您的環境符合以下要求:

  • .NET Framework 4.6.2+ or .NET Core 3.1 / .NET 5-9
  • Visual Studio 2019+或VS Code與C#擴展
  • 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" .
SHELL

預期的中斷變更

Aspose.PDF Pattern需要更改
new Document() + Pages.Add()改用HTML渲染
HtmlLoadOptionsChromePdfRenderer.RenderHtmlAsPdf()
TextFragment+手動定位基於CSS的定位
PdfFileEditor.Concatenate()PdfDocument.Merge()
TextFragmentAbsorberpdf.ExtractAllText()
ImageStamp基於HTML的水印
.lic 文件許可基於程式碼的授權金鑰
基於1的頁碼編索基於0的頁碼編索

逐步遷移過程

步驟1:更新NuGet包

移除Aspose.PDF並安裝IronPDF:

# Remove Aspose.PDF
dotnet remove package Aspose.PDF

# Install IronPDF
dotnet add package IronPdf
SHELL

或者通過包管理器控制台:

Uninstall-Package Aspose.PDF
Install-Package IronPdf
PowerShell

步驟 2:更新命名空間引用

取代Aspose.PDF命名空間為IronPDF:

// 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;

步驟3:更新許可配置

Aspose.PDF使用.lic文件授權。 IronPDF使用簡單的程式碼授權金鑰。

Aspose.PDF實現:

var license = new Aspose.Pdf.License();
license.SetLicense("Aspose.Pdf.lic");

IronPDF實現:

IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";

完整 API 遷移參考

核心類映射

Aspose.PDF類IronPDF等價
DocumentPdfDocument
HtmlLoadOptionsChromePdfRenderer
TextFragmentAbsorberPdfDocument.ExtractAllText()
PdfFileEditorPdfDocument.Merge()
TextStamp / ImageStampPdfDocument.ApplyWatermark()
LicenseIronPdf.License

文件操作

Aspose.PDF方法IronPDF方法
new Document()new PdfDocument()
new Document(path)PdfDocument.FromFile(path)
doc.Save(path)pdf.SaveAs(path)
doc.Pages.Countpdf.PageCount
doc.Pages.Delete(index)pdf.RemovePages(index)

HTML到PDF轉換

Aspose.PDF方法IronPDF方法
new HtmlLoadOptions()new ChromePdfRenderer()
new Document(stream, htmlOptions)renderer.RenderHtmlAsPdf(html)
new Document(path, htmlOptions)renderer.RenderHtmlFileAsPdf(path)

程式碼遷移範例

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");
    }
}

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");
    }
}

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");
    }
}

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");
    }
}

合併多個 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");
    }
}

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");
    }
}

文字提取

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);

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);

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");

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");

IronPDF使用基於HTML/CSS的水印功能,通過熟悉的網頁技術提供完整的樣式控制。

密碼保護

Aspose.PDF實現:

using Aspose.Pdf;

var document = new Document("document.pdf");
document.Encrypt("userPassword", "ownerPassword", DocumentPrivilege.ForbidAll, CryptoAlgorithm.AESx256);
document.Save("protected.pdf");

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");

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");

IronPDF支援占位符標記如{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

授權文件到程式碼金鑰

.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");

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.BinaryData, "application/pdf", "report.pdf");
    }
}

依賴注入配置

// Program.cs
public void ConfigureServices(IServiceCollection services)
{
    // Set license once
    IronPdf.License.LicenseKey = Configuration["IronPdf:LicenseKey"];

    // Register renderer as scoped service
    services.AddScoped<ChromePdfRenderer>();
}

性能優化

// 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");
}

故障排除常見的遷移問題

問題:HtmlLoadOptions找不到

ChromePdfRenderer替換:

// Remove this
var doc = new Document(stream, new HtmlLoadOptions());

// Use this
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(htmlString);

問題: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();

問題: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);

後遷移檢查清單

完成程式碼遷移後,請驗證以下內容:

  • 移除Aspose.PDF授權文件(.lic)
  • 驗證HTML渲染品質(CSS Grid,Flexbox應能正常運行)
  • 測試具有大型文件和複雜CSS的極端情況
  • 更新頁碼索引引用(基於1到基於0)
  • 更新 Docker 配置(如適用)
  • 更新CI/CD管道的新許可金鑰配置
  • 為您的團隊記錄新模式

其他資源


從Aspose.PDF遷移到IronPDF將使您的程式碼基礎從內部HTML引擎轉移到基於Chromium的渲染。 MemoryStream包裝器的消除,簡化的文字提取以及更廣泛的CSS3支援立即帶來了生產力提升,IronPDF的程式碼授權金鑰取代了.lic 文件處理。

請注意: Aspose是其各自所有者的註冊商標。 本網站未與Aspose Pty Ltd相關聯,未被其認可或贊助。所有產品名稱,標誌和品牌均為其各自所有者的財產。 比較僅供參考,反映撰寫時公開可用的資訊。
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天試用金鑰
無需信用卡或帳戶建立