如何用 C# 從 Playwright 轉移到 IronPDF
從編劇轉移到 IronPDF:完整的 C# 遷移指南。
從編劇for .NET 轉換到 IronPDF,可將您的 PDF 生成工作流程從以測試為中心的瀏覽器自動化工具轉換為專用的 PDF 函式庫。 本指南提供完整的逐步遷移路徑,可消除複雜的 async 模式、瀏覽器生命週期管理和 400MB 以上的瀏覽器下載,同時提供更好的效能和專業的 PDF 功能。
為什麼要從編劇轉移到 IronPDF?
瞭解編劇for .NET
Playwright for .NET 是 Microsoft 瀏覽器自動化工具系列的一部分; 本專案的結構圍繞著提供跨 Chromium、Firefox 和 WebKit 的全面測試功能。 圖書館採用"測試第一"的設計,這表示其主要重點在於涉及瀏覽器測試的情境。 雖然編劇支援 PDF 產生,但此功能僅屬於輔助功能,無法提供專用 PDF 工具的細部設定。
Playwright for .NET 主要是一個瀏覽器自動化和測試框架,其中 PDF 生成是次要功能。 如同 PuppeteerSharp,Playwright 使用瀏覽器的列印至 PDF 功能來產生 PDF,等同於按下 Ctrl+P。這會產生最佳化為紙張的列印就緒輸出,這與螢幕渲染不同。
測試框架問題
Playwright 是專為端對端測試而設計,而非文件生成。 這在用於 PDF 時會產生基本問題:
1.首次使用前需要下載 400MB 以上的瀏覽器。編劇的預設組態需要下載多個瀏覽器,這對於有嚴格資源限制的環境來說可能是個考量。
2.複雜的 async 模式與瀏覽器上下文和頁面管理。 開發人員必須熟悉瀏覽器上下文和頁面管理,以及正確的處理方式。
3.測試為先的架構未針對文件生成進行最佳化。
4.Print-to-PDF限制相當於Ctrl+P瀏覽器列印。 版面可能會回流,背景可能會依預設省略,而輸出則會分頁列印。
5.不支援 PDF/A 或 PDF/UA,以符合可存取性。編劇無法製作符合 PDF/A (歸檔) 或 PDF/UA (可存取性) 的文件。 針對 Section 508、歐盟可讀性指令或長期歸檔要求,您需要專用的 PDF 資料庫。
6.需要完整瀏覽器實體的重資源作業。
編劇vsIronPDF性能比較
| 指標 | 編劇 | IronPDF |
|---|---|---|
| 主要目的 | 瀏覽器測試 | 生成 PDF |
| 瀏覽器下載 | 400MB+ (Chromium, Firefox, WebKit) | 內建最佳化引擎 |
| 首次渲染(冷啟動) | 4.5 秒鐘 | 2.8 秒 |
| 後續渲染 | 3.8-4.1 秒 | 0.8-1.2 秒 |
| 每次轉換的記憶體 | 280-420MB | 80-120MB |
| API複雜性 | 異步瀏覽器/內容/頁面生命週期 | 同步單行字 |
| 初始化 | playwright install + CreateAsync + LaunchAsync | 新的 ChromePdfRenderer() |
| PDF/A支援 | 無法提供 | 全面支援 |
| PDF/UA 可訪問性 | 無法提供 | 全面支援 |
| 數位簽名 | 無法提供 | 全面支援 |
| PDF編輯 | 無法提供 | 合併、分割、蓋章、編輯 |
| 專業支援。 | 社區 | 有 SLA 的商業翻譯 |
IronPDF 是以 PDF 生成為重點而建立的。 與以測試為中心的編劇不同,IronPDF 提供各種以文件為中心的 API 功能。 它依賴於單一最佳化的 Chromium 實例,以效率為優先,並提供同步與異步操作。 如此一來,對於需要 PDF 功能的開發人員而言,心智模式和工作流程都會變得更簡單。
對於計劃在 2025 年和 2026 年之前採用 .NET 10 和 C# 14 的團隊而言,IronPDF 提供了專門打造的 PDF 解決方案,可消除瀏覽器自動化的開銷,同時提供更好的效能和專業的文件功能。
開始之前
先決條件
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 Playwright
dotnet remove package Microsoft.Playwright
# Remove browser binaries (reclaim ~400MB disk space)
# Delete the .playwright folder in your project or user directory
# Add IronPDF
dotnet add package IronPdf# Remove Playwright
dotnet remove package Microsoft.Playwright
# Remove browser binaries (reclaim ~400MB disk space)
# Delete the .playwright folder in your project or user directory
# Add IronPDF
dotnet add package IronPdf使用 IronPDF 無需 playwright 安裝 - 會自動捆綁渲染引擎。
授權組態
// 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完整的 API 參考資料
命名空間變更
// Before: Playwright
using Microsoft.Playwright;
using System.Threading.Tasks;
// After: IronPDF
using IronPdf;
using IronPdf.Rendering;// Before: Playwright
using Microsoft.Playwright;
using System.Threading.Tasks;
// After: IronPDF
using IronPdf;
using IronPdf.Rendering;IRON VB CONVERTER ERROR developers@ironsoftware.com核心 API 對應
| Playwright API | IronPdf API | 筆記 |
|---|---|---|
| <編碼>Playwright.CreateAsync()</編碼 | 新的 ChromePdfRenderer() | 不需要 async |
| <編碼>playwright.Chromium.LaunchAsync()</編碼 | 不需要 | 無瀏覽器管理 |
| <代碼>browser.NewPageAsync()</代碼 | 不需要 | 無頁面上下文 |
page.GotoAsync(url)。 | renderer.RenderUrlAsPdf(url)。 | 直接 URL 呈現 |
page.SetContentAsync(html)+page.PdfAsync()。 | renderer.RenderHtmlAsPdf(html)。 | 單一方法 |
page.CloseAsync()。 | 不需要 | 自動清理 |
| <代碼>browser.CloseAsync()</代碼 | 不需要 | 自動清理 |
| <代碼>PagePdfOptions.格式</代碼 | RenderingOptions.PaperSize | 紙張大小 |
PagePdfOptions.邊界 | RenderingOptions.MarginTop/Bottom/Left/Right渲染選項。 | 個別邊距 |
| <代碼>PagePdfOptions.DisplayHeaderFooter</代碼 | RenderingOptions.TextHeader/TextFooter。 | 標題/頁腳 |
| <編碼>PagePdfOptions.HeaderTemplate</編碼 | <編碼>RenderingOptions.HtmlHeader</編碼 | HTML 標頭 |
| <編碼>PagePdfOptions.FooterTemplate</編碼 | RenderingOptions.HtmlFooter | HTML 頁腳 |
class="pageNumber"></編碼 | {page} | 頁碼占位符 |
程式碼遷移範例
範例 1:HTML 字串至 PDF 的轉換
之前(編劇):
// NuGet: Install-Package Microsoft.Playwright
using Microsoft.Playwright;
using System.Threading.Tasks;
class Program
{
static async Task Main(string[] args)
{
var playwright = await Playwright.CreateAsync();
var browser = await playwright.Chromium.LaunchAsync();
var page = await browser.NewPageAsync();
string html = "<h1>Hello World</h1><p>This is a test PDF.</p>";
await page.SetContentAsync(html);
await page.PdfAsync(new PagePdfOptions { Path = "output.pdf" });
await browser.CloseAsync();
}
}// NuGet: Install-Package Microsoft.Playwright
using Microsoft.Playwright;
using System.Threading.Tasks;
class Program
{
static async Task Main(string[] args)
{
var playwright = await Playwright.CreateAsync();
var browser = await playwright.Chromium.LaunchAsync();
var page = await browser.NewPageAsync();
string html = "<h1>Hello World</h1><p>This is a test PDF.</p>";
await page.SetContentAsync(html);
await page.PdfAsync(new PagePdfOptions { Path = "output.pdf" });
await browser.CloseAsync();
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comAfter (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main(string[] args)
{
var renderer = new ChromePdfRenderer();
string html = "<h1>Hello World</h1><p>This is a test PDF.</p>";
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
}
}// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main(string[] args)
{
var renderer = new ChromePdfRenderer();
string html = "<h1>Hello World</h1><p>This is a test PDF.</p>";
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.com本範例展示了基本的架構差異。編劇需要五個同步操作:Playwright.CreateAsync()、Chromium.LaunchAsync()、NewPageAsync()、SetContentAsync()和PdfAsync(),Plus 使用CloseAsync()進行明確的瀏覽器清理。
IronPDF 消除了所有這些複雜性:創建一個 ChromePdfRenderer ,呼叫 RenderHtmlAsPdf() 以及 SaveAs() 。 沒有 async 模式、沒有瀏覽器生命週期、沒有清理程式碼。IronPDF的方法提供了更簡潔的語法,並能更好地與現代 .NET 應用程式整合。 請參閱 HTML to PDF 文件,以瞭解全面的範例。
範例 2:URL 到 PDF 的轉換
之前(編劇):
// NuGet: Install-Package Microsoft.Playwright
using Microsoft.Playwright;
using System.Threading.Tasks;
class Program
{
static async Task Main(string[] args)
{
var playwright = await Playwright.CreateAsync();
var browser = await playwright.Chromium.LaunchAsync();
var page = await browser.NewPageAsync();
await page.GotoAsync("https://www.example.com");
await page.PdfAsync(new PagePdfOptions
{
Path = "webpage.pdf",
Format = "A4"
});
await browser.CloseAsync();
}
}// NuGet: Install-Package Microsoft.Playwright
using Microsoft.Playwright;
using System.Threading.Tasks;
class Program
{
static async Task Main(string[] args)
{
var playwright = await Playwright.CreateAsync();
var browser = await playwright.Chromium.LaunchAsync();
var page = await browser.NewPageAsync();
await page.GotoAsync("https://www.example.com");
await page.PdfAsync(new PagePdfOptions
{
Path = "webpage.pdf",
Format = "A4"
});
await browser.CloseAsync();
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comAfter (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.comPlaywright 使用 GotoAsync() 來導航到 URL,接著是 PdfAsync() 。IronPDF提供了單一的 RenderUrlAsPdf() 方法,可在一次呼叫中處理導航和 PDF 生成。 請注意,Playwright 需要在 PagePdfOptions 中指定 Format ,而IronPDF則使用RenderingOptions.PaperSize來設定紙張大小。 請參閱我們的 教學,瞭解更多資訊。
範例 3:自訂頁面大小與頁邊空白
之前(編劇):
// NuGet: Install-Package Microsoft.Playwright
using Microsoft.Playwright;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
using var playwright = await Playwright.CreateAsync();
await using var browser = await playwright.Chromium.LaunchAsync();
var page = await browser.NewPageAsync();
await page.SetContentAsync("<h1>Custom PDF</h1><p>Letter size with margins</p>");
await page.PdfAsync(new PagePdfOptions
{
Path = "custom.pdf",
Format = "Letter",
Margin = new Margin { Top = "1in", Bottom = "1in", Left = "0.5in", Right = "0.5in" }
});
}
}// NuGet: Install-Package Microsoft.Playwright
using Microsoft.Playwright;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
using var playwright = await Playwright.CreateAsync();
await using var browser = await playwright.Chromium.LaunchAsync();
var page = await browser.NewPageAsync();
await page.SetContentAsync("<h1>Custom PDF</h1><p>Letter size with margins</p>");
await page.PdfAsync(new PagePdfOptions
{
Path = "custom.pdf",
Format = "Letter",
Margin = new Margin { Top = "1in", Bottom = "1in", Left = "0.5in", Right = "0.5in" }
});
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comAfter (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.PaperSize = PdfPaperSize.Letter;
renderer.RenderingOptions.MarginTop = 25;
renderer.RenderingOptions.MarginBottom = 25;
renderer.RenderingOptions.MarginLeft = 12;
renderer.RenderingOptions.MarginRight = 12;
var pdf = renderer.RenderHtmlAsPdf("<h1>Custom PDF</h1><p>Letter size with margins</p>");
pdf.SaveAs("custom.pdf");
}
}// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.PaperSize = PdfPaperSize.Letter;
renderer.RenderingOptions.MarginTop = 25;
renderer.RenderingOptions.MarginBottom = 25;
renderer.RenderingOptions.MarginLeft = 12;
renderer.RenderingOptions.MarginRight = 12;
var pdf = renderer.RenderHtmlAsPdf("<h1>Custom PDF</h1><p>Letter size with margins</p>");
pdf.SaveAs("custom.pdf");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comPlaywright 使用基於字串的頁邊空白值("1in", "0.5in"),而IronPDF則使用數字毫米值。 換算方式為:1 吋 = 25.4 公釐,因此"1in"變成25而"0.5in"約變成12。編劇的 Format = "Letter" 映射到IronPDF的 PaperSize = PdfPaperSize.Letter。
範例 4:頁首、頁尾和自訂設定
之前(編劇):
// NuGet: Install-Package Microsoft.Playwright
using Microsoft.Playwright;
using System.Threading.Tasks;
class Program
{
static async Task Main(string[] args)
{
var playwright = await Playwright.CreateAsync();
var browser = await playwright.Chromium.LaunchAsync();
var page = await browser.NewPageAsync();
string html = "<h1>Custom PDF</h1><p>With margins and headers.</p>";
await page.SetContentAsync(html);
await page.PdfAsync(new PagePdfOptions
{
Path = "custom.pdf",
Format = "A4",
Margin = new Margin { Top = "1cm", Bottom = "1cm", Left = "1cm", Right = "1cm" },
DisplayHeaderFooter = true,
HeaderTemplate = "<div style='font-size:10px; text-align:center;'>Header</div>",
FooterTemplate = "<div style='font-size:10px; text-align:center;'>Page <span class='pageNumber'></span></div>"
});
await browser.CloseAsync();
}
}// NuGet: Install-Package Microsoft.Playwright
using Microsoft.Playwright;
using System.Threading.Tasks;
class Program
{
static async Task Main(string[] args)
{
var playwright = await Playwright.CreateAsync();
var browser = await playwright.Chromium.LaunchAsync();
var page = await browser.NewPageAsync();
string html = "<h1>Custom PDF</h1><p>With margins and headers.</p>";
await page.SetContentAsync(html);
await page.PdfAsync(new PagePdfOptions
{
Path = "custom.pdf",
Format = "A4",
Margin = new Margin { Top = "1cm", Bottom = "1cm", Left = "1cm", Right = "1cm" },
DisplayHeaderFooter = true,
HeaderTemplate = "<div style='font-size:10px; text-align:center;'>Header</div>",
FooterTemplate = "<div style='font-size:10px; text-align:center;'>Page <span class='pageNumber'></span></div>"
});
await browser.CloseAsync();
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comAfter (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;
class Program
{
static void Main(string[] args)
{
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.MarginTop = 10;
renderer.RenderingOptions.MarginBottom = 10;
renderer.RenderingOptions.MarginLeft = 10;
renderer.RenderingOptions.MarginRight = 10;
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.TextHeader.CenterText = "Header";
renderer.RenderingOptions.TextFooter.CenterText = "Page {page}";
string html = "<h1>Custom PDF</h1><p>With margins and headers.</p>";
var pdf = renderer.RenderHtmlAsPdf(html);
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.MarginTop = 10;
renderer.RenderingOptions.MarginBottom = 10;
renderer.RenderingOptions.MarginLeft = 10;
renderer.RenderingOptions.MarginRight = 10;
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.TextHeader.CenterText = "Header";
renderer.RenderingOptions.TextFooter.CenterText = "Page {page}";
string html = "<h1>Custom PDF</h1><p>With margins and headers.</p>";
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("custom.pdf");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.com此範例顯示 header/footer 占位符的語法差異。編劇使用基於 HTML 類的占位符 (<span> class="pageNumber"></span>),而IronPDF則使用大括弧占位符 ({page})。 請注意,Playwright 需要 DisplayHeaderFooter = true 來啟用頁首/頁尾,而IronPDF會在您設定頁首/頁尾內容時自動啟用。
關鍵遷移注意事項
Async 到 Sync 的轉換
Playwright 要求全程使用 async/await; IronPdf 支援同步作業:
// Playwright: Async required
public async Task<byte[]> GeneratePdfAsync(string html)
{
using var playwright = await Playwright.CreateAsync();
await using var browser = await playwright.Chromium.LaunchAsync();
var page = await browser.NewPageAsync();
await page.SetContentAsync(html);
return await page.PdfAsync();
}
// IronPDF: Sync is simpler
public byte[] GeneratePdf(string html)
{
var renderer = new ChromePdfRenderer();
return renderer.RenderHtmlAsPdf(html).BinaryData;
}// Playwright: Async required
public async Task<byte[]> GeneratePdfAsync(string html)
{
using var playwright = await Playwright.CreateAsync();
await using var browser = await playwright.Chromium.LaunchAsync();
var page = await browser.NewPageAsync();
await page.SetContentAsync(html);
return await page.PdfAsync();
}
// IronPDF: Sync is simpler
public byte[] GeneratePdf(string html)
{
var renderer = new ChromePdfRenderer();
return renderer.RenderHtmlAsPdf(html).BinaryData;
}IRON VB CONVERTER ERROR developers@ironsoftware.com邊際單位轉換
Playwright 使用字串單位; IronPdf 使用數字毫米:
| 編劇 | IronPdf (mm) |
|---|---|
"1in" | 25 |
"0.5in" | 12 |
"1cm" | 10 |
頁首/頁尾占位符轉換
| 編劇班 | IronPdf 占位符 |
|---|---|
class="pageNumber"></編碼 | {page} |
class="totalPages"></編碼 | {總頁數} |
<span> class="date">。 | <編碼>{日期}</編碼 |
<span> class="title">。 | <編碼>{html-title}</編碼 |
消除瀏覽器生命週期
移除所有瀏覽器管理程式碼:
// Playwright: Explicit cleanup required
await page.CloseAsync();
await browser.CloseAsync();
playwright.Dispose();
// IronPDF: No disposal needed - just use the renderer
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");// Playwright: Explicit cleanup required
await page.CloseAsync();
await browser.CloseAsync();
playwright.Dispose();
// IronPDF: No disposal needed - just use the renderer
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");IRON VB CONVERTER ERROR developers@ironsoftware.com遷移後的新功能
轉移到IronPDF之後,您將獲得編劇無法提供的功能:
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水印。
pdf.ApplyWatermark("<h1 style='color:red; opacity:0.3;'>DRAFT</h1>");pdf.ApplyWatermark("<h1 style='color:red; opacity:0.3;'>DRAFT</h1>");IRON VB CONVERTER ERROR developers@ironsoftware.com密碼保護
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數位簽名
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.comPDF/A 合規性
pdf.SaveAsPdfA("archive.pdf", PdfAVersions.PdfA3b);pdf.SaveAsPdfA("archive.pdf", PdfAVersions.PdfA3b);IRON VB CONVERTER ERROR developers@ironsoftware.com遷移清單
預遷移
- [ ] 識別所有編劇PDF 生成代碼
- [ ] 文件邊界值(將英寸/厘米轉換為毫米)
- [ ] 轉換時請注意頁首/頁尾的占位符語法
- [ ] 從 ironpdf.com 獲得IronPDF授權金鑰
套件變更
- [ ] 移除
Microsoft.PlaywrightNuGet 套件 - [ ] 刪除
.playwright資料夾,以回收 ~400MB 磁碟空間 - [ ] 安裝
IronPDFNuGet 套件:dotnet add package IronPdf。
程式碼變更
- [ ] 更新命名空間匯入
- [ ] 使用
ChromePdfRenderer取代 async 瀏覽器生命週期 - [ ] 將
page.SetContentAsync()+page.PdfAsync()轉換為RenderHtmlAsPdf()。 - [ ] 將
page.GotoAsync()+page.PdfAsync()轉換為RenderUrlAsPdf()。 - [ ] 將邊距字串轉換為毫米值
- [ ] 轉換頁首/頁尾佔位符語法
- [ ] 移除所有瀏覽器/網頁處理程式碼
- [ ] 在應用程式啟動時加入授權初始化
後遷移
- [ ] PDF 輸出的視覺比較
- [ ] 用頁碼驗證標題/頁尾的呈現
- [ ] 測試頁邊距和頁面大小的準確性
- [ ] 必要時增加新功能(安全性、水印、合併)。
結論
Playwright for .NET 和IronPDF都能滿足 .NET 生態系統中的不同需求。編劇的優勢在於其測試框架的功能,在需要時可利用其 PDF 生成功能加以補充。 然而,如果您的主要目標是以較少的開銷高效率、高品質地產生 PDF,IronPDF 是更有力的競爭者。
本次轉換的主要變更如下 1.架構:具備 PDF 功能的測試框架 → 專用的 PDF 函式庫 2.複雜性:5 個以上的同步操作 → 3 個同步呼叫 3.瀏覽器管理:手動處理的生命週期 → 自動處理 4.Performance: 4.5s cold start / 3.8-4.1s renders → 2.8s cold start / 0.8-1.2s renders 5.記憶體:每次轉換280-420MB→ 每次轉換 80-120MB 6.磁碟空間: 400MB+ 瀏覽器下載 → 零額外下載 7.邊界:字串單位 ("1in") → 數字毫米 (25) 8.Placeholders:CSS 類別 (<span> class="pageNumber">) → 大括號 ({page}) 9.新功能:PDF 合併、水印、安全性、數位簽署、符合 PDF/A 規範
考慮您的專案需求,並選擇與您的優先順序相符的函式庫 - 無論您需要的是可在一旁進行 PDF 生成的強大測試架構,或是可最大化轉換速度與資源效率的專用 PDF 工具。






