Scryber.Core vs IronPDF:技術比較指南
Scryber.Core vs IronPDF:.NET PDF 生成比較指南。
當 .NET 開發人員評估 PDF 生成解決方案時,Scryber.Core 和IronPDF代表了具有不同架構理念和授權模式的不同方法。 Scryber.Core 提供使用 XML/HTML 範本的開放源碼函式庫,並搭配自訂的解析引擎,而IronPDF則提供基於Chromium的渲染引擎,專為高保真 HTML 至 PDF 的轉換而設計。 本技術比較將在 2025 年及之後,針對專業開發人員和為 .NET 應用程式做 PDF 生成決策的架構人員最關心的層面,檢視這兩個函式庫。
瞭解 Scryber.Core
Scryber.Core 是一個開放原始碼的函式庫,可以使用 C# 將 HTML 模板轉換成 PDF。 這個函式庫利用 HTML 的多樣性和 CSS 的造型能力,提供範本驅動的 PDF 產生方式。 Scryber.Core 使用自訂的解析引擎,而非基於瀏覽器的渲染器,透過其專屬的 Document.ParseDocument() 方法處理文件。
該函式庫以 LGPL 授權方式運作,這表示只要開發人員遵守 LGPL 條款,在專案中使用 Scryber.Core 就不會產生任何直接成本。 然而,這種授權模式要求對程式庫本身進行的任何修改都必須開放原始碼,這對某些商業應用程式可能會造成限制。
關鍵考量:Scryber.Core 使用專屬的資料範本綁定語法和重 XML 的組態方式。 該函式庫不執行 JavaScript,僅提供靜態呈現,與瀏覽器型解決方案相比,僅提供有限的 CSS 支援。
了解 IronPDF
IronPDF提供了一個商業支援的 PDF 產生函式庫,使用基於Chromium的渲染引擎。該函式庫可將 HTML、CSS 和JavaScript轉換為 PDF 文件,並具有完全瀏覽器層級的真實性,支援包括Flexbox和CSS 網格在內的現代 CSS3 功能,以及完整的JavaScriptES2024 執行。
IronPDF 安裝為 NuGet 套件,不受 LGPL 相關的授權限制。 相較於開放原始碼的替代方案,這個函式庫提供廣泛的文件、專業的支援以及更大的社群。
架構比較
Scryber.Core 與IronPDF的基本差異會影響渲染功能和開發工作流程:
| 範疇 | Scryber.Core | IronPDF |
|---|---|---|
| 許可證 | LGPL (限制性) | 商業的 |
| 渲染引擎 | 自訂解析器 | Chromium |
| CSS 支援 | 限額 | 完整的 CSS3 |
| JavaScript | 無 | 完整的 ES2024 |
| 範本綁定 | 專屬 XML | 標準(Razor 等) |
| 學習曲線 | 自訂語法 | 標準 HTML/CSS |
| 同步支援 | 限額 | 全文 |
| 文件 | 基本的 | 廣泛 |
功能比較矩陣
| 特點 | Scryber.Core | IronPDF |
|---|---|---|
| HTML 至 PDF | 基本的 | 完整的 Chromium |
| URL 至 PDF | 需要手動擷取 | 原生支援 |
| CSS 網格 | 限額 | 全面支援 |
| Flexbox | 限額 | 全面支援 |
| JavaScript | 無 | 完整的 ES2024 |
| 資料綁定 | 專屬 XML | 使用 Razor/Handlebars |
| 頁首/頁尾 | 基於 XML | HTML/CSS |
| 合併 PDF | 限額 | 內建 |
| 分割 PDF | 無 | 是 |
| 水印 | 基本的 | 完整 HTML |
| 數位簽名 | 無 | 是。 |
| PDF/A | 無 | 是 |
| 密碼保護 | 基本的 | 全文 |
| 跨平台 | 是 | 是 |
HTML 至 PDF 轉換
HTML-to-PDF 的核心工作流程展示了不同程式庫的基本 API 差異。
Scryber.Core HTML 轉換
Scryber.Core 使用 Document.ParseDocument() 方法與自訂的解析引擎:
// NuGet: Install-Package Scryber.Core
using Scryber.Core;
using Scryber.Core.Html;
using System.IO;
class Program
{
static void Main()
{
string html = "<html><body><h1>Hello World</h1><p>This is a PDF document.</p></body></html>";
using (var doc = Document.ParseDocument(html, ParseSourceType.DynamicContent))
{
doc.SaveAsPDF("output.pdf");
}
}
}// NuGet: Install-Package Scryber.Core
using Scryber.Core;
using Scryber.Core.Html;
using System.IO;
class Program
{
static void Main()
{
string html = "<html><body><h1>Hello World</h1><p>This is a PDF document.</p></body></html>";
using (var doc = Document.ParseDocument(html, ParseSourceType.DynamicContent))
{
doc.SaveAsPDF("output.pdf");
}
}
}IRON VB CONVERTER ERROR developers@ironsoftware.com此方法要求:
- 明確的
using聲明,以妥善處理資源 - 用於 HTML 字串解析的
ParseSourceType.DynamicContent參數 - 與標準 HTML 呈現模式不同的文件型 API
IronPDFHTML 轉換
IronPDF 提供 ChromePdfRenderer 類,可直接進行 HTML 轉換:
// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
string html = "<html><body><h1>Hello World</h1><p>This is a PDF document.</p></body></html>";
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
}
}// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
string html = "<html><body><h1>Hello World</h1><p>This is a PDF document.</p></body></html>";
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comRenderHtmlAsPdf 方法使用Chromium渲染引擎處理 HTML,並提供完整的 CSS 和JavaScript支援。 API 遵循直接的 render-then-save 模式,不需要明確的資源管理語法。
URL 至 PDF 轉換
將實際的網頁轉換成 PDF,可以發現庫與庫之間有顯著的能力差異。
Scryber.Core URL 處理
Scryber.Core 無法直接呈現 URL,開發人員必須手動取得 HTML 內容:
// NuGet: Install-Package Scryber.Core
using Scryber.Core;
using Scryber.Core.Html;
using System.Net.Http;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
using var client = new HttpClient();
string html = await client.GetStringAsync("https://www.example.com");
using (var doc = Document.ParseDocument(html, ParseSourceType.DynamicContent))
{
doc.SaveAsPDF("webpage.pdf");
}
}
}// NuGet: Install-Package Scryber.Core
using Scryber.Core;
using Scryber.Core.Html;
using System.Net.Http;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
using var client = new HttpClient();
string html = await client.GetStringAsync("https://www.example.com");
using (var doc = Document.ParseDocument(html, ParseSourceType.DynamicContent))
{
doc.SaveAsPDF("webpage.pdf");
}
}
}IRON VB CONVERTER ERROR developers@ironsoftware.com這種變通方式:
- 需要明確的 HTTP 用戶端管理
- 下載未執行JavaScript的原始 HTML
- 無法捕捉動態渲染的內容
- 遺失相對的資源參考(圖片、樣式表)
IronPDFURL 轉換
IronPDF 提供原生 URL 到 PDF 的轉換:
// 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");
}
}// 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");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comRenderUrlAsPdf 方法會使用Chromium引擎導航到 URL、執行 JavaScript、套用 CSS 定型,並擷取完整呈現的頁面為 PDF 文件。
自訂渲染設定
頁面配置和渲染選項展示了不同的 API 方法。
Scryber.Core 自訂設定
Scryber.Core 透過文件的 RenderOptions 屬性來設定設定:
// NuGet: Install-Package Scryber.Core
using Scryber.Core;
using Scryber.Core.Html;
using Scryber.Drawing;
using System.IO;
class Program
{
static void Main()
{
string html = "<html><body><h1>Custom PDF</h1><p>With custom margins and settings.</p></body></html>";
using (var doc = Document.ParseDocument(html, ParseSourceType.DynamicContent))
{
doc.RenderOptions.Compression = OutputCompressionType.FlateDecode;
doc.RenderOptions.PaperSize = PaperSize.A4;
doc.SaveAsPDF("custom.pdf");
}
}
}// NuGet: Install-Package Scryber.Core
using Scryber.Core;
using Scryber.Core.Html;
using Scryber.Drawing;
using System.IO;
class Program
{
static void Main()
{
string html = "<html><body><h1>Custom PDF</h1><p>With custom margins and settings.</p></body></html>";
using (var doc = Document.ParseDocument(html, ParseSourceType.DynamicContent))
{
doc.RenderOptions.Compression = OutputCompressionType.FlateDecode;
doc.RenderOptions.PaperSize = PaperSize.A4;
doc.SaveAsPDF("custom.pdf");
}
}
}IRON VB CONVERTER ERROR developers@ironsoftware.com配置發生在文件解析之後,但在儲存之前。 邊界配置需要額外的基於 XML 的樣式或程式化的頁面部分操作。
IronPDF自訂設定
IronPDF 會在轉換前透過渲染器的渲染選項屬性來設定設定:
// 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 = 40;
renderer.RenderingOptions.MarginBottom = 40;
string html = "<html><body><h1>Custom PDF</h1><p>With custom margins and settings.</p></body></html>";
var pdf = renderer.RenderHtmlAsPdf(html);
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.A4;
renderer.RenderingOptions.MarginTop = 40;
renderer.RenderingOptions.MarginBottom = 40;
string html = "<html><body><h1>Custom PDF</h1><p>With custom margins and settings.</p></body></html>";
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("custom.pdf");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comRenderingOptions 屬性可透過強化類型的屬性直接存取 紙張大小、邊緣及其他 PDF 設定。 渲染器可設定一次並重複使用於多次轉換。
API 對應參考。
評估 Scryber.Core 移轉至IronPDF的團隊可參考此對應操作的映射:
| Scryber.Core | IronPDF | 筆記 |
|---|---|---|
Document.ParseDocument(html) | renderer.RenderHtmlAsPdf(html)。 | HTML 渲染 |
| <編碼>Document.ParseTemplate(路徑)</編碼 | renderer.RenderHtmlFileAsPdf(path)。 | 檔案渲染 |
doc.SaveAsPDF(path)。 | <代碼>pdf.SaveAs(路徑)</代碼 | 儲存至檔案 |
doc.SaveAsPDF(stream)。 | pdf.Stream或pdf.BinaryData | 取得串流/位元組 |
| <編碼>doc.Info.Title</編碼 | <編碼>pdf.MetaData.Title</編碼 | 元資料 |
| <編碼>doc.Info.Author</編碼 | <編碼>pdf.MetaData.Author</編碼 | 元資料 |
| <編碼>PDF 頁面</編碼 | <代碼>pdf.Pages[i]</代碼 | 頁面存取 |
| <編碼>PDFLayoutDocument</編碼 | 渲染選項 | 版面控制 |
| <編碼>PDFStyle</編碼 | HTML 中的 CSS | 造型設計 |
資料綁定 ({{value}}) | Razor/String 插值 | 模板製作 |
doc.RenderOptions.PaperSize | <編碼>renderer.RenderingOptions.PaperSize</編碼 | 頁面大小 |
The範本綁定Difference
Scryber.Core 使用專屬的基於 XML 的綁定語法,需要學習自訂的模板語言:
<!-- Scryber proprietary binding -->
<pdf:Para text='{{model.Name}}' />
<pdf:Para text='Total: {{model.Total:C}}' />
<pdf:ForEach on='{{model.Items}}'>
<pdf:Para text='{{.Name}}: {{.Price}}' />
</pdf:ForEach><!-- Scryber proprietary binding -->
<pdf:Para text='{{model.Name}}' />
<pdf:Para text='Total: {{model.Total:C}}' />
<pdf:ForEach on='{{model.Items}}'>
<pdf:Para text='{{.Name}}: {{.Price}}' />
</pdf:ForEach>IronPdf 使用標準 C# 字串插值或任何模板引擎(Razor、Handlebars):
// Standard C# with IronPDF
var items = model.Items.Select(i => $"<li>{i.Name}: {i.Price:C}</li>");
var html = $@"
<p>{model.Name}</p>
<p>Total: {model.Total:C}</p>
<ul>
{string.Join("", items)}
</ul>";
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);// Standard C# with IronPDF
var items = model.Items.Select(i => $"<li>{i.Name}: {i.Price:C}</li>");
var html = $@"
<p>{model.Name}</p>
<p>Total: {model.Total:C}</p>
<ul>
{string.Join("", items)}
</ul>";
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);IRON VB CONVERTER ERROR developers@ironsoftware.comIronPdf 的方法充分利用了現有的 C# 和 Web 開發技能,而不是要求開發人員學習專有的模板語法。
頁首與頁尾實作
文件的頁首和頁尾揭示了顯著的工作流程差異。
Scryber.Core 頁首和頁尾。
Scryber.Core 需要基於 XML 的頁首和頁尾定義:
<!-- Scryber XML template -->
<?xml version='1.0' encoding='utf-8' ?>
<pdf:Document xmlns:pdf='http://www.scryber.co.uk/schemas/core/release/v1/Scryber.Components.xsd'>
<Pages>
<pdf:Section>
<Header>
<pdf:Para text='Company Report' />
</Header>
<Footer>
<pdf:Para text='Page {{pagenum}} of {{pagetotal}}' />
</Footer>
<Content>
<pdf:H1 text='Content Here' />
</Content>
</pdf:Section>
</Pages>
</pdf:Document><!-- Scryber XML template -->
<?xml version='1.0' encoding='utf-8' ?>
<pdf:Document xmlns:pdf='http://www.scryber.co.uk/schemas/core/release/v1/Scryber.Components.xsd'>
<Pages>
<pdf:Section>
<Header>
<pdf:Para text='Company Report' />
</Header>
<Footer>
<pdf:Para text='Page {{pagenum}} of {{pagetotal}}' />
</Footer>
<Content>
<pdf:H1 text='Content Here' />
</Content>
</pdf:Section>
</Pages>
</pdf:Document>此方法需要具有專屬名稱空間宣告和元素名稱的 XML 模板檔案。
IronPDF頁首和頁尾
IronPDF 提供完全程式化、基於 HTML 的頁首與頁尾設定:
using IronPdf;
var renderer = new ChromePdfRenderer();
// HTML header with full CSS support
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter
{
HtmlFragment = @"
<div style='width: 100%; text-align: center; font-size: 12pt; border-bottom: 1px solid #ccc;'>
Company Report
</div>",
MaxHeight = 30
};
// HTML footer with page numbers
renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
{
HtmlFragment = @"
<div style='width: 100%; text-align: center; font-size: 10pt;'>
Page {page} of {total-pages}
</div>",
MaxHeight = 25
};
var pdf = renderer.RenderHtmlAsPdf("<h1>Content Here</h1>");
pdf.SaveAs("report.pdf");using IronPdf;
var renderer = new ChromePdfRenderer();
// HTML header with full CSS support
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter
{
HtmlFragment = @"
<div style='width: 100%; text-align: center; font-size: 12pt; border-bottom: 1px solid #ccc;'>
Company Report
</div>",
MaxHeight = 30
};
// HTML footer with page numbers
renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
{
HtmlFragment = @"
<div style='width: 100%; text-align: center; font-size: 10pt;'>
Page {page} of {total-pages}
</div>",
MaxHeight = 25
};
var pdf = renderer.RenderHtmlAsPdf("<h1>Content Here</h1>");
pdf.SaveAs("report.pdf");IRON VB CONVERTER ERROR developers@ironsoftware.comIronPdf 的 HtmlHeaderFooter 類可透過 {page} 和 {total-pages} 占位符實現完整的HTML/CSS造型,以進行動態頁碼編排。
LGPL 授權考量
Scryber.Core 的 LGPL 授權會產生影響商業應用程式的特定義務:
LGPL 要求:
- 任何對 Scryber.Core 函式庫本身的修改都必須開放原始碼。
- 應用程式必須允許使用者以修改過的版本取代 LGPL 函式庫
- 在某些商業發行情況下,可能需要揭露原始碼。
IronPDF商業授權:
- 無來源揭露要求
- 修改或散佈不受限制
- 明確的授權,但不會造成合規的複雜性
- 專業支援包括
對於評估長期商業部署的組織而言,授權模式的差異會嚴重影響法律與合規規劃。
何時團隊會考慮 Scryber.Core 遷移?
有幾個因素促使開發團隊評估 Scryber.Core 的替代方案:
LGPL 授權疑慮會影響商業應用程式,在此情況下,原始碼揭露義務與商業需求會產生衝突。IronPDF的商業授權消除了這些限制。
當設計使用現代 CSS 功能時,有限的 CSS 支援就會變成問題。 Scryber.Core 的自訂解析器無法呈現 Flexbox、CSS Grid 或基於Chromium引擎原生處理的複雜造型。
不執行 JavaScript 阻擋動態內容呈現。 單頁應用程式、圖表和互動內容需要執行 Scryber.Core 無法提供的 JavaScript。
專屬的範本語法增加了學習曲線,並限制了開發人員的上線。 熟悉HTML/CSS的團隊必須學習 Scryber 的自訂綁定語法,而非利用現有技能。
較小的社群意味著較少的疑難排解資源和較少的第三方文件。IronPDF的大型社區提供了更多的範例和支援資源。
有限的 async 支援會影響應用程式的可擴充性。 在 2026 年,以 .NET 10 和 C# 14 為目標的現代 .NET 應用程式會受益於整個 PDF 生成管道的完整 async/await 支援。
優勢與取捨
Scryber.Core 的優勢
- 開放原始碼,無直接授權成本(需符合 LGPL 規範)
- 跨 .NET 環境的跨平台支援
- HTML 模板方式,適合熟悉網路技術的開發人員使用
- 適用於 LGPL 條款與商業模式相符的專案
Scryber.Core 的限制
- LGPL 授權限制某些商業應用程式
- 自訂解析引擎與有限的 CSS 支援
- 不執行JavaScript(僅靜態呈現)
- 專屬的 XML 綁定語法需要學習曲線
- 社區規模較小,文件較少
- 有限的 async 支援
- 無本機 URL 轉 PDF 功能
- 無 PDF 操作功能(合併、分割、簽名)
IronPDF的優勢
- 支援 CSS3 與JavaScriptES2024 的完整Chromium渲染功能
- 原生 URL-to-PDF 轉換
- 標準HTML/CSS模板(使用 Razor、Handlebars 或純 HTML)
- 無 LGPL 限制的商業授權
- 廣泛的文件和專業支援
- 完整的 async/await 支援
- PDF 操作功能(合併、分割、水印)
- 數位簽章與安全功能
- 支援PDF/A規範
IronPDF注意事項
- 需要購買商業授權模式 -Chromium引擎比自訂解析器佔用更多空間
結論
Scryber.Core 和IronPDF服務於不同的組織背景和技術需求。 Scryber.Core 提供開放原始碼的選擇,適合尋求 LGPL 授權的 PDF 與 HTML 範本,並願意在函式庫的自訂語法和渲染限制下工作的開發人員。
對於需要現代 CSS 渲染、JavaScript 執行、原生 URL 轉換或無 LGPL 義務的商業授權的應用程式,IronPdf 透過其基於Chromium的引擎提供了全面的功能。使用標準HTML/CSS模板的能力、利用現有網頁開發技能的能力,以及存取 PDF 操作功能的能力,可解決團隊在使用自訂解析器解決方案時常遇到的限制。
在評估 Scryber.Core 轉移到IronPDF時,Team 應該考慮他們圍繞 CSS 複雜性、JavaScript 需求、License 偏好和模板工作流程偏好的特定需求。 對於針對現代 .NET 平台與網頁設計工作流程的團隊而言,IronPDF 的架構與當代開發實務更自然地結合。
如需實作指導,請參閱 IronPDF HTML-to-PDF 教學,以及涵蓋 .NET 應用程式 PDF 產生模式的 文件。