跳過到頁腳內容
遷移指南

如何用 C# 從 PuppeteerSharp 轉移到 IronPDF

從PuppeteerSharp轉移到 IronPDF:完整的 C# 遷移指南。

從PuppeteerSharp轉換到IronPDF可將您的 PDF 生成工作流程從依賴 300MB 以上的瀏覽器自動化工具轉換為具有自動記憶體管理功能的專用 PDF 函式庫。 本指南提供完整的逐步遷移路徑,可消除 Chromium 下載、解決記憶體洩漏問題,並提供全面的 PDF 操作功能。

為什麼要從PuppeteerSharp轉移到 IronPDF?

瞭解 PuppeteerSharp。

PuppeteerSharp 是 Google 的 Puppeteer 的 .NET 移植,將瀏覽器自動化功能帶入 C#。 它使用 Chrome 內建的列印至 PDF 功能來產生 PDF,就像在瀏覽器中按下 Ctrl+P 一樣。 這會產生為紙張最佳化的印刷就緒輸出,與您在螢幕上看到的不同。

PuppeteerSharp 是專為網頁測試和搜刮而設計,而非文件生成。 使用PuppeteerSharp生成 PDF 虽然能够胜任,但会带来巨大的生产挑战。

瀏覽器自動化問題

PuppeteerSharp 是專為瀏覽器自動化而設計,而非文件生成。 這在用於 PDF 時會產生基本問題:

1.首次使用前需下載 300MB+ Chromium。PuppeteerSharp的一個顯著缺點是其龐大的部署規模,這主要是由於它捆綁了 Chromium 二進位檔案。 這種龐大的規模會使 Docker 映像變得臃腫,並在無伺服器環境中造成冷啟動問題。

2.負載下的記憶體洩漏需要手動回收瀏覽器。 眾所周知,PuppeteerSharp 在高負載狀態下會發生記憶體洩漏。 瀏覽器實體累積的記憶體必須以手動方式進行流程管理與回收。

3.複雜的 async 模式與瀏覽器生命週期管理。

4.Print-to-PDF 輸出(等同於 Ctrl+P,而非螢幕擷取)。 版面可能會回流,背景可能會依預設省略,而且輸出會以分頁方式列印,而非配合瀏覽器的視埠。

5.不支援 PDF/A 或 PDF/UA,以符合法規要求。PuppeteerSharp無法製作 PDF/A (歸檔) 或 PDF/UA (無障礙) 相容的文件。

6.無 PDF 操作 - 僅生成,無合併/分割/編輯。 雖然PuppeteerSharp能有效率地產生 PDF,但它缺乏進一步操作的功能,例如合併、分割、保護或編輯 PDF。

PuppeteerSharp與IronPDF的比較

範疇PuppeteerSharpIronPDF
主要目的瀏覽器自動化生成 PDF
Chromium相依性300MB+ 獨立下載內建最佳化引擎
API複雜性同步瀏覽器/網頁生命週期同步單行字
初始化BrowserFetcher.DownloadAsync() + LaunchAsync新的 ChromePdfRenderer()
記憶體管理需要手動回收瀏覽器自動化
負載下的記憶體500MB+ 有洩漏~50MB 穩定
冷啟動45 秒以上~20 秒
PDF/A支援無法提供全面支援
PDF/UA 可訪問性無法提供全面支援
PDF編輯無法提供合併、分割、蓋章、編輯
數位簽名無法提供全面支援
線程安全限額全文
專業支援社區有 SLA 的商業翻譯

平台支援

圖書館.NET Framework 4.7.2.NET Core 3.1.NET 6-8.NET 10
IronPDF全文全文全文全文
PuppeteerSharp限額全文全文待定

IronPDF 跨 .NET 平台的廣泛支援,可確保開發人員在各種環境中利用IronPDF而不會遇到相容性問題,為 2025 年和 2026 年的現代 .NET 應用程式提供靈活的選擇。


開始之前

先決條件

1..NET 環境:.NET Framework 4.6.2+ 或 .NET Core 3.1+ / .NET 5/6/7/8/9+ 2.NuGet存取:安裝 NuGet 套件的能力 3.IronPDF 授權:從IronPdf.com取得您的授權金鑰。

NuGet 套件變更

# Remove PuppeteerSharp
dotnet remove package PuppeteerSharp

# Remove downloaded Chromium binaries (~300MB recovered)
# Delete the .local-chromium folder

# Add IronPDF
dotnet add package IronPdf
# Remove PuppeteerSharp
dotnet remove package PuppeteerSharp

# Remove downloaded Chromium binaries (~300MB recovered)
# Delete the .local-chromium folder

# Add IronPDF
dotnet add package IronPdf
SHELL

使用 IronPDF 不需要 BrowserFetcher.DownloadAsync() - 會自動捆綁渲染引擎。

授權組態

// Add at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
// Add at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

完整的 API 參考資料

命名空間變更

// Before: PuppeteerSharp
using PuppeteerSharp;
using PuppeteerSharp.Media;
using System.Threading.Tasks;

// After: IronPDF
using IronPdf;
using IronPdf.Rendering;
// Before: PuppeteerSharp
using PuppeteerSharp;
using PuppeteerSharp.Media;
using System.Threading.Tasks;

// After: IronPDF
using IronPdf;
using IronPdf.Rendering;
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

核心 API 對應

PuppeteerSharp APIIronPdf API筆記
new BrowserFetcher().DownloadAsync()不需要無需下載瀏覽器
<代碼>Puppeteer.LaunchAsync(選項)</代碼不需要無瀏覽器管理
<代碼>browser.NewPageAsync()</代碼不需要無頁面上下文
page.GoToAsync(url)renderer.RenderUrlAsPdf(url)直接渲染
page.SetContentAsync(html)renderer.RenderHtmlAsPdf(html)直接渲染
page.PdfAsync(path)<代碼>pdf.SaveAs(路徑)</代碼渲染後
await page.CloseAsync()不需要自動清理
await browser.CloseAsync()不需要自動清理
PdfOptions.FormatRenderingOptions.PaperSize紙張大小
<編碼>PdfOptions.Landscape</編碼<編碼>RenderingOptions.PaperOrientation</編碼導向
<編碼>PdfOptions.MarginOptions</編碼RenderingOptions.MarginTop/Bottom/Left/Right渲染選項。個別邊距
<編碼>PdfOptions.PrintBackground</編碼<編碼>RenderingOptions.PrintHtmlBackgrounds</編碼背景印刷
<編碼>PdfOptions.HeaderTemplate</編碼<編碼>RenderingOptions.HtmlHeader</編碼HTML 標頭
<編碼>PdfOptions.FooterTemplate</編碼RenderingOptions.HtmlFooterHTML 頁腳
page.WaitForSelectorAsync()<編碼>RenderingOptions.WaitFor.HtmlElementId</編碼等待元素

程式碼遷移範例

範例 1:基本 HTML 到 PDF 的轉換

之前 (PuppeteerSharp):

// NuGet: Install-Package PuppeteerSharp
using PuppeteerSharp;
using System.Threading.Tasks;

class Program
{
    static async Task Main(string[] args)
    {
        var browserFetcher = new BrowserFetcher();
        await browserFetcher.DownloadAsync();

        await using var browser = await Puppeteer.LaunchAsync(new LaunchOptions
        {
            Headless = true
        });

        await using var page = await browser.NewPageAsync();
        await page.SetContentAsync("<h1>Hello World</h1><p>This is a PDF document.</p>");
        await page.PdfAsync("output.pdf");
    }
}
// NuGet: Install-Package PuppeteerSharp
using PuppeteerSharp;
using System.Threading.Tasks;

class Program
{
    static async Task Main(string[] args)
    {
        var browserFetcher = new BrowserFetcher();
        await browserFetcher.DownloadAsync();

        await using var browser = await Puppeteer.LaunchAsync(new LaunchOptions
        {
            Headless = true
        });

        await using var page = await browser.NewPageAsync();
        await page.SetContentAsync("<h1>Hello World</h1><p>This is a PDF document.</p>");
        await page.PdfAsync("output.pdf");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

After (IronPDF):

// NuGet: Install-Package IronPdf
using IronPdf;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1><p>This is a PDF document.</p>");
        pdf.SaveAs("output.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1><p>This is a PDF document.</p>");
        pdf.SaveAs("output.pdf");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

本範例展示了基本的架構差異。PuppeteerSharp需要六個同步操作:BrowserFetcher.DownloadAsync() (300MB+ Chromium 下載)、Puppeteer.LaunchAsync()browser.NewPageAsync()page.SetContentAsync()page.PdfAsync(), Plus 與 await using 的適當處理。

IronPDF 消除了所有這些複雜性:創建一個 ChromePdfRenderer ,呼叫 RenderHtmlAsPdf() 以及 SaveAs() 。 沒有 async 模式、沒有瀏覽器生命週期、沒有 Chromium 下載。IronPDF的方法提供了更簡潔的語法,並能更好地與現代 .NET 應用程式整合。 請參閱 HTML to PDF 文件,以瞭解全面的範例。

範例 2:URL 到 PDF 的轉換

之前 (PuppeteerSharp):

// NuGet: Install-Package PuppeteerSharp
using PuppeteerSharp;
using System.Threading.Tasks;

class Program
{
    static async Task Main(string[] args)
    {
        var browserFetcher = new BrowserFetcher();
        await browserFetcher.DownloadAsync();

        await using var browser = await Puppeteer.LaunchAsync(new LaunchOptions
        {
            Headless = true
        });

        await using var page = await browser.NewPageAsync();
        await page.GoToAsync("https://www.example.com");
        await page.PdfAsync("webpage.pdf");
    }
}
// NuGet: Install-Package PuppeteerSharp
using PuppeteerSharp;
using System.Threading.Tasks;

class Program
{
    static async Task Main(string[] args)
    {
        var browserFetcher = new BrowserFetcher();
        await browserFetcher.DownloadAsync();

        await using var browser = await Puppeteer.LaunchAsync(new LaunchOptions
        {
            Headless = true
        });

        await using var page = await browser.NewPageAsync();
        await page.GoToAsync("https://www.example.com");
        await page.PdfAsync("webpage.pdf");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

After (IronPDF):

// NuGet: Install-Package IronPdf
using IronPdf;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderUrlAsPdf("https://www.example.com");
        pdf.SaveAs("webpage.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderUrlAsPdf("https://www.example.com");
        pdf.SaveAs("webpage.pdf");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

PuppeteerSharp 使用 GoToAsync() 來導航到 URL,接著是 PdfAsync() 。IronPDF提供了單一的 RenderUrlAsPdf() 方法,可在一次呼叫中處理導航和 PDF 生成。 請參閱我們的 教學,瞭解更多資訊。

範例 3:自訂頁面設定與邊界

之前 (PuppeteerSharp):

// NuGet: Install-Package PuppeteerSharp
using PuppeteerSharp;
using PuppeteerSharp.Media;
using System.Threading.Tasks;

class Program
{
    static async Task Main(string[] args)
    {
        var browserFetcher = new BrowserFetcher();
        await browserFetcher.DownloadAsync();

        await using var browser = await Puppeteer.LaunchAsync(new LaunchOptions
        {
            Headless = true
        });

        await using var page = await browser.NewPageAsync();
        await page.SetContentAsync("<h1>Custom PDF</h1><p>With landscape orientation and margins.</p>");

        await page.PdfAsync("custom.pdf", new PdfOptions
        {
            Format = PaperFormat.A4,
            Landscape = true,
            MarginOptions = new MarginOptions
            {
                Top = "20mm",
                Bottom = "20mm",
                Left = "20mm",
                Right = "20mm"
            }
        });
    }
}
// NuGet: Install-Package PuppeteerSharp
using PuppeteerSharp;
using PuppeteerSharp.Media;
using System.Threading.Tasks;

class Program
{
    static async Task Main(string[] args)
    {
        var browserFetcher = new BrowserFetcher();
        await browserFetcher.DownloadAsync();

        await using var browser = await Puppeteer.LaunchAsync(new LaunchOptions
        {
            Headless = true
        });

        await using var page = await browser.NewPageAsync();
        await page.SetContentAsync("<h1>Custom PDF</h1><p>With landscape orientation and margins.</p>");

        await page.PdfAsync("custom.pdf", new PdfOptions
        {
            Format = PaperFormat.A4,
            Landscape = true,
            MarginOptions = new MarginOptions
            {
                Top = "20mm",
                Bottom = "20mm",
                Left = "20mm",
                Right = "20mm"
            }
        });
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

After (IronPDF):

// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();
        renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
        renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape;
        renderer.RenderingOptions.MarginTop = 20;
        renderer.RenderingOptions.MarginBottom = 20;
        renderer.RenderingOptions.MarginLeft = 20;
        renderer.RenderingOptions.MarginRight = 20;

        var pdf = renderer.RenderHtmlAsPdf("<h1>Custom PDF</h1><p>With landscape orientation and margins.</p>");
        pdf.SaveAs("custom.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();
        renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
        renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape;
        renderer.RenderingOptions.MarginTop = 20;
        renderer.RenderingOptions.MarginBottom = 20;
        renderer.RenderingOptions.MarginLeft = 20;
        renderer.RenderingOptions.MarginRight = 20;

        var pdf = renderer.RenderHtmlAsPdf("<h1>Custom PDF</h1><p>With landscape orientation and margins.</p>");
        pdf.SaveAs("custom.pdf");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

此範例顯示 PDF 選項如何在兩個函式庫之間對應。PuppeteerSharp使用 PdfOptionsFormat, Landscape, 和 MarginOptions 包含字串值 ("20mm")。 IronPdf 使用 RenderingOptions 屬性,其中包含直接的紙張尺寸枚舉、方向枚舉,以及以毫米為單位的數字邊界值。

關鍵對應:

  • Format = PaperFormat.A4PaperSize = PdfPaperSize.A4
  • Landscape = truePaperOrientation = PdfPaperOrientation.Landscape
  • MarginOptions.Top = "20mm"MarginTop = 20 (數字毫米)

記憶體洩漏問題

PuppeteerSharp 在持續負載下會造成記憶體累積:

// ❌PuppeteerSharp- Memory grows with each operation
// Requires explicit browser recycling every N operations
for (int i = 0; i < 1000; i++)
{
    var page = await browser.NewPageAsync();
    await page.SetContentAsync($"<h1>Document {i}</h1>");
    await page.PdfAsync($"doc_{i}.pdf");
    await page.CloseAsync(); // Memory still accumulates!
}
// Must periodically: await browser.CloseAsync(); and re-launch

// ✅IronPDF- Stable memory, reuse renderer
var renderer = new ChromePdfRenderer();
for (int i = 0; i < 1000; i++)
{
    var pdf = renderer.RenderHtmlAsPdf($"<h1>Document {i}</h1>");
    pdf.SaveAs($"doc_{i}.pdf");
    // Memory managed automatically
}
// ❌PuppeteerSharp- Memory grows with each operation
// Requires explicit browser recycling every N operations
for (int i = 0; i < 1000; i++)
{
    var page = await browser.NewPageAsync();
    await page.SetContentAsync($"<h1>Document {i}</h1>");
    await page.PdfAsync($"doc_{i}.pdf");
    await page.CloseAsync(); // Memory still accumulates!
}
// Must periodically: await browser.CloseAsync(); and re-launch

// ✅IronPDF- Stable memory, reuse renderer
var renderer = new ChromePdfRenderer();
for (int i = 0; i < 1000; i++)
{
    var pdf = renderer.RenderHtmlAsPdf($"<h1>Document {i}</h1>");
    pdf.SaveAs($"doc_{i}.pdf");
    // Memory managed automatically
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

IronPdf 不需要PuppeteerSharp所需的瀏覽器池架構:

// Before (PuppeteerSharp - delete entire class)
public class PuppeteerBrowserPool
{
    private readonly ConcurrentBag<IBrowser> _browsers;
    private readonly SemaphoreSlim _semaphore;
    private int _operationCount;
    // ... recycling logic ...
}

// After (IronPDF - simple reuse)
public class PdfService
{
    private readonly ChromePdfRenderer _renderer = new();

    public byte[] Generate(string html)
    {
        return _renderer.RenderHtmlAsPdf(html).BinaryData;
    }
}
// Before (PuppeteerSharp - delete entire class)
public class PuppeteerBrowserPool
{
    private readonly ConcurrentBag<IBrowser> _browsers;
    private readonly SemaphoreSlim _semaphore;
    private int _operationCount;
    // ... recycling logic ...
}

// After (IronPDF - simple reuse)
public class PdfService
{
    private readonly ChromePdfRenderer _renderer = new();

    public byte[] Generate(string html)
    {
        return _renderer.RenderHtmlAsPdf(html).BinaryData;
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

關鍵遷移注意事項

Async 到 Sync 的轉換

PuppeteerSharp 自始至終需要 async/await; IronPdf 支援同步作業:

// PuppeteerSharp: Async required
public async Task<byte[]> GeneratePdfAsync(string html)
{
    await new BrowserFetcher().DownloadAsync();
    await using var browser = await Puppeteer.LaunchAsync(...);
    await using var page = await browser.NewPageAsync();
    await page.SetContentAsync(html);
    return await page.PdfDataAsync();
}

// IronPDF: Sync default
public byte[] GeneratePdf(string html)
{
    var renderer = new ChromePdfRenderer();
    return renderer.RenderHtmlAsPdf(html).BinaryData;
}

// Or async when needed
public async Task<byte[]> GeneratePdfAsync(string html)
{
    var renderer = new ChromePdfRenderer();
    var pdf = await renderer.RenderHtmlAsPdfAsync(html);
    return pdf.BinaryData;
}
// PuppeteerSharp: Async required
public async Task<byte[]> GeneratePdfAsync(string html)
{
    await new BrowserFetcher().DownloadAsync();
    await using var browser = await Puppeteer.LaunchAsync(...);
    await using var page = await browser.NewPageAsync();
    await page.SetContentAsync(html);
    return await page.PdfDataAsync();
}

// IronPDF: Sync default
public byte[] GeneratePdf(string html)
{
    var renderer = new ChromePdfRenderer();
    return renderer.RenderHtmlAsPdf(html).BinaryData;
}

// Or async when needed
public async Task<byte[]> GeneratePdfAsync(string html)
{
    var renderer = new ChromePdfRenderer();
    var pdf = await renderer.RenderHtmlAsPdfAsync(html);
    return pdf.BinaryData;
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

邊際單位轉換

PuppeteerSharp 使用字串單位; IronPdf 使用數字毫米:

//PuppeteerSharp- string units
MarginOptions = new MarginOptions
{
    Top = "1in",      // 25.4mm
    Bottom = "0.75in", // 19mm
    Left = "1cm",     // 10mm
    Right = "20px"    // ~7.5mm at 96dpi
}

//IronPDF- numeric millimeters
renderer.RenderingOptions.MarginTop = 25;    // mm
renderer.RenderingOptions.MarginBottom = 19;
renderer.RenderingOptions.MarginLeft = 10;
renderer.RenderingOptions.MarginRight = 8;
//PuppeteerSharp- string units
MarginOptions = new MarginOptions
{
    Top = "1in",      // 25.4mm
    Bottom = "0.75in", // 19mm
    Left = "1cm",     // 10mm
    Right = "20px"    // ~7.5mm at 96dpi
}

//IronPDF- numeric millimeters
renderer.RenderingOptions.MarginTop = 25;    // mm
renderer.RenderingOptions.MarginBottom = 19;
renderer.RenderingOptions.MarginLeft = 10;
renderer.RenderingOptions.MarginRight = 8;
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

頁首/頁尾占位符轉換

PuppeteerSharp 類別IronPdf 占位符
class="pageNumber"></編碼{page}
class="totalPages"></編碼{總頁數}
<span> class="date"><編碼>{日期}</編碼
<span> class="title"><編碼>{html-title}</編碼

遷移後的新功能

轉移到IronPDF之後,您將獲得PuppeteerSharp無法提供的功能:

PDF 合併

var pdf1 = renderer.RenderHtmlAsPdf(html1);
var pdf2 = renderer.RenderHtmlAsPdf(html2);
var merged = PdfDocument.Merge(pdf1, pdf2);
merged.SaveAs("merged.pdf");
var pdf1 = renderer.RenderHtmlAsPdf(html1);
var pdf2 = renderer.RenderHtmlAsPdf(html2);
var merged = PdfDocument.Merge(pdf1, pdf2);
merged.SaveAs("merged.pdf");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

水印。

var watermark = new TextStamper
{
    Text = "CONFIDENTIAL",
    FontSize = 48,
    Opacity = 30,
    Rotation = -45
};
pdf.ApplyStamp(watermark);
var watermark = new TextStamper
{
    Text = "CONFIDENTIAL",
    FontSize = 48,
    Opacity = 30,
    Rotation = -45
};
pdf.ApplyStamp(watermark);
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

密碼保護

pdf.SecuritySettings.OwnerPassword = "admin";
pdf.SecuritySettings.UserPassword = "readonly";
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
pdf.SecuritySettings.OwnerPassword = "admin";
pdf.SecuritySettings.UserPassword = "readonly";
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

數位簽名

var signature = new PdfSignature("certificate.pfx", "password");
pdf.Sign(signature);
var signature = new PdfSignature("certificate.pfx", "password");
pdf.Sign(signature);
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

PDF/A 合規性

pdf.SaveAsPdfA("archive.pdf", PdfAVersions.PdfA3b);
pdf.SaveAsPdfA("archive.pdf", PdfAVersions.PdfA3b);
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

效能比較摘要

指標PuppeteerSharpIronPDF改進
第一份 PDF (冷启动)45s+~20s速度快 55% 以上
後續 PDF變數一致性可預測性
記憶體使用情況500MB+ (成長中)~50MB (穩定)減少 90% 記憶體
磁碟空間 (Chromium)300MB+0消除下載
瀏覽器下載要求不需要零設定
線程安全限額全文可靠的並發性
PDF 生成時間45s20s快55%

遷移清單

預遷移

  • [確認程式碼中所有PuppeteerSharp的用法
  • [ ] 文件邊界值(將字串轉換為毫米)
  • [ ] 轉換時請注意頁首/頁尾的占位符語法
  • [ ] 刪除瀏覽器匯集/回收基礎架構
  • [ ] 從 ironpdf.com 獲得IronPDF授權金鑰

套件變更

  • [ ] 移除 PuppeteerSharp NuGet 套件
  • [ ] 刪除 .local-chromium 資料夾,以回收 ~300MB 磁碟空間
  • [ ] 安裝 IronPDF NuGet 套件:dotnet add package IronPdf

程式碼變更

  • [ ] 更新命名空間匯入
  • [ ] 移除 BrowserFetcher.DownloadAsync() 呼叫
  • [ ] 移除 Puppeteer.LaunchAsync() 和瀏覽器管理
  • [ ] 將 page.SetContentAsync() + page.PdfAsync() 改為 RenderHtmlAsPdf()
  • [ ] 將 page.GoToAsync() + page.PdfAsync() 替換為 RenderUrlAsPdf()
  • [ ] 將邊距字串轉換為毫米值
  • [ ] 轉換頁首/頁尾佔位符語法
  • [ ] 移除所有瀏覽器/網頁處理程式碼
  • [ ] 刪除瀏覽器池架構
  • [ ] 在應用程式啟動時加入授權初始化

後遷移

  • [ ] PDF 輸出的視覺比較
  • [ ] 記憶體穩定性的負載測試(應保持穩定而無需循環使用)
  • [ ] 用頁碼驗證標題/頁尾的呈現
  • [ ] 必要時增加新功能(安全性、水印、合併)。

結論

在選擇PuppeteerSharp和IronPDF時,請考慮您專案的特定需求。PuppeteerSharp在需要精確的 HTML 呈現,以及管理 Chromium 相依性的開銷合理的情況下表現優異。 相比之下,IronPDF 提供了一個全面的套件,具有廣泛的 PDF 處理功能、無與倫比的部署簡便性以及優異的記憶體管理,非常適合追求簡單性及多功能性的開發人員。

本次轉換的主要變更如下 1.架構:瀏覽器自動化工具 → 專用的 PDF 函式庫 2.依賴項目:300MB+Chromium 下載 → 綁定的渲染引擎 3.複雜性:6 個以上的同步操作 → 3 個同步呼叫 4.記憶體:500MB 以上有洩漏 → ~50MB 穩定 5.瀏覽器管理:手動生命週期與回收 → 自動處理 6.邊界:字串單位 ("20mm") → 數字毫米 (20) 7.Placeholders:CSS 類別 (<span> class="pageNumber">) → 大括號 ({page}) 8.效能:45 秒冷啟動 → ~20秒冷啟動 9.新功能:PDF 合併、分割、水印、安全性、數位簽署、PDF/A 合規性

這兩個函式庫都有其獨特的優點和缺點,瞭解這些優點和缺點可以引導您選擇合適的工具來滿足您的 PDF 產生和處理需求。

探索完整的 IronPDF文件教程API參考,加速您的PuppeteerSharp遷移。

Curtis Chau
技術作家

Curtis Chau 擁有卡爾頓大學計算機科學學士學位,專注於前端開發,擅長於 Node.js、TypeScript、JavaScript 和 React。Curtis 熱衷於創建直觀且美觀的用戶界面,喜歡使用現代框架並打造結構良好、視覺吸引人的手冊。

除了開發之外,Curtis 對物聯網 (IoT) 有著濃厚的興趣,探索將硬體和軟體結合的創新方式。在閒暇時間,他喜愛遊戲並構建 Discord 機器人,結合科技與創意的樂趣。