比較

NReco.PdfGenerator vs IronPDF:技術比較指南

NReco.PdfGenerator vs IronPDF:wkhtmltopdf Wrapper 與現代 Chromium 引擎的比較。

當 .NET 開發人員需要將 HTML 內容轉換為 PDF 文件時,他們經常會遇到 NReco.PdfGenerator--一種流行的 wkhtmltopdf 二進位包裝。 然而,底層技術帶有重大的安全性和相容性問題,導致許多團隊評估IronPDF等替代方案。 本比較針對關鍵技術層面檢視這兩個函式庫,以協助開發人員、架構師和技術決策者選擇適合其 PDF 產生工作流程的工具。

什麼是 NReco.PdfGenerator? NReco.PdfGenerator 是一個 C# 函式庫,旨在透過包覆 wkhtmltopdf 指令列工具,將 HTML 文件轉換為 PDF。 該函式庫透過其 `HtmlToPdfConverter` 類提供熟悉的 API,該類在內部會呼叫 wkhtmltopdf 來執行實際的渲染。 wkhtmltopdf 工具使用 WebKit Qt 作為其渲染引擎 - WebKit 的版本可追溯至約 2012 年。雖然這種方法已被廣泛採用,但 wkhtmltopdf 的開發已於 2020 年停止,這意味著沒有進一步的安全修補程式或功能更新。 這種依賴性對於以目前的 CSS 和 JavaScript 要求建立現代應用程式的團隊造成了挑戰。 NReco.PdfGenerator 的免費版本會在生成的 PDF 上加入水印,生產使用需要商業授權。 商業授權的定價需要聯絡銷售人員,這可能會使採購流程變得複雜。

什麼是 IronPDF? [IronPDF](https://ironpdf.com/) 是一個 .NET 函式庫,使用基於 Chromium 的現代化渲染引擎,將 HTML、CSS 和 JavaScript 轉換成 PDF 文件。 [ChromePdfRenderer](https://ironpdf.com/object-reference/api/IronPdf.ChromePdfRenderer.html) 類提供 HTML 轉換為IronPDF的主要介面,並透過 `RenderingOptions` 屬性提供廣泛的設定選項。 與 wkhtmltopdf 封裝程式不同,IronPDF 的渲染引擎會定期接受更新,以確保安全性與相容性。 這個函式庫是自給自足的,不需要在不同的平台上管理外部的二進位相依性。 IronPDF 提供完整功能的試用期(無水印),讓團隊在購買前評估功能。 商業授權使用公開、透明的價格。 ## 渲染引擎比較 這些函式庫的根本差異在於它們的呈現引擎。 這種區別會影響到從安全勢態到 CSS 相容性等各方面。 |範疇| NReco.PdfGenerator |IronPDF| |--------|-------------------|---------| |**渲染引擎**|WebKit Qt (2012)|Chromium (目前)| |**安全性**|20+ CVE,已放棄|主動安全更新| |**CSS 支援**|CSS2.1, 有限的 CSS3|完整的 CSS3、網格、Flexbox| |**JavaScript**。|基本 ES5|完整的 ES6+| |**依賴性**|外部 wkhtmltopdf 二進位|自成一格| |**Async 支援**|僅同步|完整的 async/await| |**網路字型**|限額|完整的 Google 字型,@font-face| |**免費試用**|水印|完整功能| |**定價透明度**|不透明,請聯絡銷售|出版價格| NReco.PdfGenerator 繼承了 wkhtmltopdf 的所有安全漏洞,包括伺服器端請求偽造、本機檔案讀取漏洞和潛在遠端程式碼執行的 CVE 記錄。 由於 wkhtmltopdf 自 2020 年起已被棄用,因此無法針對這些問題提供修補程式。 IronPdf 的 Chromium 引擎提供當前 Web 標準支援,可實現現代 CSS 功能,如 Grid 和 Flexbox 布局、CSS 變數和自訂屬性。 JavaScript 執行支援 ES6+ 語法,包括 async/await 模式。 ## 基本 HTML 到 PDF 的轉換 這兩個函式庫都處理基本的 HTML 至 PDF 轉換,但 API 模式不同。 **NReco.PdfGenerator 方法:** ```csharp // NuGet: Install-Package NReco.PdfGenerator using NReco.PdfGenerator; using System.IO; class Program { static void Main() { var htmlToPdf = new HtmlToPdfConverter(); var htmlContent = "

Hello World

This is a PDF document.

"; var pdfBytes = htmlToPdf.GeneratePdf(htmlContent); File.WriteAllBytes("output.pdf", pdfBytes); } } ``` **IronPDF 方法:** ```csharp // NuGet: Install-Package IronPdf using IronPdf; using System.IO; class Program { static void Main() { var renderer = new ChromePdfRenderer(); var htmlContent = "

Hello World

This is a PDF document.

"; var pdf = renderer.RenderHtmlAsPdf(htmlContent); pdf.SaveAs("output.pdf"); } } ``` 這兩個函式庫的基本轉換都只需要最少的程式碼。 NReco.PdfGenerator 返回一個 `byte[]` 陣列,需要手動進行檔案操作,而IronPDF返回一個 `PdfDocument` 物件,具有方便的方法,如 `SaveAs()` 。 IronPdf 物件還提供對 `BinaryData` 的存取,以存取位元組陣列,以及對 `Stream` 的存取,以進行基於流的操作。 對於熟悉 [HTML 至 PDF 轉換](https://ironpdf.com/how-to/html-file-to-pdf/)工作流程的開發人員而言,IronPDF 的 API 會讓他們感覺直覺,同時提供基本轉換以外的額外功能。 ## URL 至 PDF 轉換 將網頁轉換成 PDF 文件,可以發現方法命名和語義上的 API 差異。 **NReco.PdfGenerator URL 轉換:** ```csharp // NuGet: Install-Package NReco.PdfGenerator using NReco.PdfGenerator; using System.IO; class Program { static void Main() { var htmlToPdf = new HtmlToPdfConverter(); var pdfBytes = htmlToPdf.GeneratePdfFromFile("https://www.example.com", null); File.WriteAllBytes("webpage.pdf", pdfBytes); } } ``` **IronPDF URL 轉換:** ```csharp // NuGet: Install-Package IronPdf using IronPdf; class Program { static void Main() { var renderer = new ChromePdfRenderer(); var pdf = renderer.RenderUrlAsPdf("https://www.example.com"); pdf.SaveAs("webpage.pdf"); } } ``` NReco.PdfGenerator 使用 `GeneratePdfFromFile()` 來處理檔案路徑和 URL,這在語義上可能會造成混淆。IronPDF提供了一個專用的 [RenderUrlAsPdf](https://ironpdf.com/how-to/url-to-pdf/) 方法,可以清楚地指出正在執行的操作。 ## 自訂頁面大小與邊界 專業文件通常需要特定的頁面尺寸和頁邊配置。 這兩個函式庫都以不同的組態模式支援這些客製化功能。 **NReco.PdfGenerator頁面配置:** ```csharp // NuGet: Install-Package NReco.PdfGenerator using NReco.PdfGenerator; using System.IO; class Program { static void Main() { var htmlToPdf = new HtmlToPdfConverter(); htmlToPdf.PageWidth = 210; htmlToPdf.PageHeight = 297; htmlToPdf.Margins = new PageMargins { Top = 10, Bottom = 10, Left = 10, Right = 10 }; var htmlContent = "

Custom Page Size

A4 size document with margins.

"; var pdfBytes = htmlToPdf.GeneratePdf(htmlContent); File.WriteAllBytes("custom-size.pdf", pdfBytes); } } ``` **IronPDF 頁面配置:** ```csharp // NuGet: Install-Package IronPdf using IronPdf; using IronPdf.Rendering; class Program { static void Main() { var renderer = new ChromePdfRenderer(); renderer.RenderingOptions.PaperSize = PdfPaperSize.A4; renderer.RenderingOptions.MarginTop = 10; renderer.RenderingOptions.MarginBottom = 10; renderer.RenderingOptions.MarginLeft = 10; renderer.RenderingOptions.MarginRight = 10; var htmlContent = "

Custom Page Size

A4 size document with margins.

"; var pdf = renderer.RenderHtmlAsPdf(htmlContent); pdf.SaveAs("custom-size.pdf"); } } ``` NReco.PdfGenerator 要求以毫米為單位指定頁面尺寸(A4 的尺寸為 210×297),並使用 `PageMargins` 物件。IronPDF使用 `PdfPaperSize` 枚舉用於標準尺寸,並透過 `RenderingOptions` 提供個別邊距屬性。 [RenderingOptions](https://ironpdf.com/how-to/html-headers-footers/) 類集中了所有頁面設定,使設定可透過 IDE 自動完成發現。 ## API 對應參考。 對於考慮將 NReco.PdfGenerator 移植至IronPDF的團隊而言,瞭解 API 對應有助於估算工作量並規劃轉換。 ### 核心方法對應 | NReco.PdfGenerator |IronPDF| 筆記 | |-------------------|---------|-------| |`新的 HtmlToPdfConverter()`|`新的 ChromePdfRenderer()`|主要呈現器| |`GeneratePdf(html)`|`RenderHtmlAsPdf(html)`|返回 PdfDocument| |`GeneratePdfFromFile(url,輸出)`|<代碼>RenderUrlAsPdf(url)RenderHtmlAsPdfAsync(html)RenderingOptions.HtmlHeader{日期}{html-title}[網頁]{url}