如何在 C# 中從 Scryber.Core 遷移到 IronPDF
從 Scryber.Core 轉換到IronPDF可將您的 PDF 生成工作流程從自訂的 XML/HTML 解析引擎轉換為完全支援 CSS3 和JavaScript的現代ChromiumPowered 渲染器。 本指南提供完整的逐步遷移路徑,可消除 LGPL 授權疑慮、專屬範本語法以及有限的渲染功能。
為何要從 Scryber.Core 轉移到 IronPDF?
瞭解 Scryber.Core
Scryber.Core 是一個開放原始碼的函式庫,可以使用 C# 將 HTML 模板轉換成 PDF。 此功能使其成為熟悉網頁開發和 HTML 的開發人員所喜愛的工具。 與其他需要特定文件編碼技巧的 PDF 解決方案不同,Scryber.Core 利用 HTML 的多樣性和 CSS 的造型能力,提供更直覺的 PDF 產生方法。
雖然 Scryber.Core 對許多開發人員來說是一個可行的選擇,主要是因為它的意識形態符合開放原始碼原則,而且具有彈性,但它也不是沒有限制。
遷移的主要原因
- LGPL 許可問題: LGPL 許可要求對庫本身的任何修改都必須開源,這可能會限制某些商業應用程式的使用。 2.自訂模板語法:專有綁定語法需要一定的學習成本
- CSS 支援有限:並非完整的基於瀏覽器的渲染器 4.社群規模較小:文檔和社群案例較少 5.不執行 JavaScript:僅靜態渲染 6.複雜配置:大量使用 XML 的配置方法 7.商業支持有限: Scryber.Core 主要依賴社區支持。
Scryber.Core vsIronPDF比較。
| 範疇 | Scryber.Core | IronPDF |
|---|---|---|
| 許可證 | LGPL (限制性) | 商業的 |
| 渲染引擎 | 自訂 | Chromium |
| CSS 支援 | 限額 | 完整的 CSS3 |
| JavaScript | 無 | 完整的 ES2024 |
| 範本綁定 | 專屬 XML | 標準(Razor 等) |
| 學習曲線 | 自訂語法 | 標準 HTML/CSS |
| 同步支援 | 限額 | 全文 |
| 文件 | 基本的 | 廣泛 |
| 社群支援 | 較小 | 大型 |
| 商業支援 | 限額 | 專業支援包括 |
與 Scryber.Core 相比,IronPDF 提供企業級的商業支援、詳盡的文件,以及更大的社群。 該函式庫提供更靈活的授權選項,不受 LGPL 限制,非常適合商業應用。
對於計劃在 2025 年和 2026 年之前採用 .NET 10 和 C# 14 的團隊而言,IronPDF 的現代Chromium引擎提供了與當代網路標準的完全相容性。
開始之前
先決條件
- .NET環境: .NET Framework 4.6.2+ 或.NET Core 3.1+ / .NET 5/6/7/8/9+
- NuGet存取權限:能夠安裝NuGet套件
- IronPDF許可證:請從IronPDF取得您的許可證密鑰。
NuGet 套件變更
# Remove Scryber.Core
dotnet remove package Scryber.Core
# Install IronPDF
dotnet add package IronPdf
# Remove Scryber.Core
dotnet remove package Scryber.Core
# Install IronPDF
dotnet add package IronPdf
授權組態
// Add at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
// Add at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
' Add at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
完整的 API 參考資料
命名空間變更
// Before: Scryber.Core
using Scryber.Components;
using Scryber.Components.Pdf;
using Scryber.PDF;
using Scryber.Styles;
using Scryber.Core;
using Scryber.Core.Html;
using Scryber.Drawing;
// After: IronPDF
using IronPdf;
using IronPdf.Rendering;
// Before: Scryber.Core
using Scryber.Components;
using Scryber.Components.Pdf;
using Scryber.PDF;
using Scryber.Styles;
using Scryber.Core;
using Scryber.Core.Html;
using Scryber.Drawing;
// After: IronPDF
using IronPdf;
using IronPdf.Rendering;
Imports Scryber.Components
Imports Scryber.Components.Pdf
Imports Scryber.PDF
Imports Scryber.Styles
Imports Scryber.Core
Imports Scryber.Core.Html
Imports Scryber.Drawing
Imports IronPdf
Imports IronPdf.Rendering
核心 API 對應
| Scryber.Core | IronPDF |
|---|---|
Document.ParseDocument(html) |
renderer.RenderHtmlAsPdf(html) |
Document.ParseTemplate(path) |
renderer.RenderHtmlFileAsPdf(path) |
doc.SaveAsPDF(path) |
pdf.SaveAs(path) |
doc.SaveAsPDF(stream) |
pdf.Stream 或 pdf.BinaryData |
doc.Info.Title |
pdf.MetaData.Title |
doc.Info.Author |
pdf.MetaData.Author |
PDFPage |
pdf.Pages[i] |
PDFLayoutDocument |
RenderingOptions |
PDFStyle |
HTML 中的 CSS |
doc.RenderOptions.PaperSize |
@@--CODE-19821--@@ |
資料綁定({{value}}) |
Razor/String 插值 |
程式碼遷移範例
範例 1:基本 HTML 到 PDF 的轉換
之前 (Scryber.Core):
// 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");
}
}
}
Imports Scryber.Core
Imports Scryber.Core.Html
Imports System.IO
Class Program
Shared Sub Main()
Dim html As String = "<html><body><h1>Hello World</h1><p>This is a PDF document.</p></body></html>"
Using doc = Document.ParseDocument(html, ParseSourceType.DynamicContent)
doc.SaveAsPDF("output.pdf")
End Using
End Sub
End Class
After (IronPDF):
// 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");
}
}
Imports IronPdf
Class Program
Shared Sub Main()
Dim renderer = New ChromePdfRenderer()
Dim html As String = "<html><body><h1>Hello World</h1><p>This is a PDF document.</p></body></html>"
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("output.pdf")
End Sub
End Class
本範例展示了基本的架構差異。 Scryber.Core 使用 Document.ParseDocument() 和 ParseSourceType.DynamicContent 參數來解析 HTML 內容,需要 using 區塊才能正確處置。 然後,該文件以 SaveAsPDF() 儲存。
IronPDF 使用 ChromePdfRenderer 實例和 RenderHtmlAsPdf() 直接渲染 HTML。 PDF 檔案已儲存,檔案名稱為 SaveAs()。 不需要手動處理,IronPDF 會自動處理清理工作。 請參閱 HTML to PDF 文件,以瞭解全面的範例。
範例 2:URL 到 PDF 的轉換
之前 (Scryber.Core):
// 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");
}
}
}
Imports Scryber.Core
Imports Scryber.Core.Html
Imports System.Net.Http
Imports System.Threading.Tasks
Module Program
Async Function Main() As Task
Using client As New HttpClient()
Dim html As String = Await client.GetStringAsync("https://www.example.com")
Using doc = Document.ParseDocument(html, ParseSourceType.DynamicContent)
doc.SaveAsPDF("webpage.pdf")
End Using
End Using
End Function
End Module
After (IronPDF):
// 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");
}
}
Imports IronPdf
Class Program
Shared Sub Main()
Dim renderer As New ChromePdfRenderer()
Dim pdf = renderer.RenderUrlAsPdf("https://www.example.com")
pdf.SaveAs("webpage.pdf")
End Sub
End Class
Scryber.Core 無法直接將 URL 轉換為 PDF。 您必須使用 HttpClient.GetStringAsync() 手動取得 HTML 內容,然後使用 Document.ParseDocument() 解析下載的 HTML。 由於自訂解析器不會執行腳本,因此此方法會遺漏JavaScript執行、動態內容和正確的 CSS 解析。
IronPDF 的 RenderUrlAsPdf() 方法只需一次呼叫即可處理整個流程,包括完整的JavaScript執行和使用Chromium引擎進行 CSS 渲染。了解更多信息,請參閱我們的教程。
範例 3:自訂頁面設定與邊界
之前 (Scryber.Core):
// 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");
}
}
}
Imports Scryber.Core
Imports Scryber.Core.Html
Imports Scryber.Drawing
Imports System.IO
Class Program
Shared Sub Main()
Dim html As String = "<html><body><h1>Custom PDF</h1><p>With custom margins and settings.</p></body></html>"
Using doc = Document.ParseDocument(html, ParseSourceType.DynamicContent)
doc.RenderOptions.Compression = OutputCompressionType.FlateDecode
doc.RenderOptions.PaperSize = PaperSize.A4
doc.SaveAsPDF("custom.pdf")
End Using
End Sub
End Class
After (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");
}
}
Imports IronPdf
Imports IronPdf.Rendering
Class Program
Shared Sub Main()
Dim renderer As New ChromePdfRenderer()
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4
renderer.RenderingOptions.MarginTop = 40
renderer.RenderingOptions.MarginBottom = 40
Dim html As String = "<html><body><h1>Custom PDF</h1><p>With custom margins and settings.</p></body></html>"
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("custom.pdf")
End Sub
End Class
Scryber.Core 使用 doc.RenderOptions 來配置輸出設置,例如 Compression(設定為 OutputCompressionType.FlateDecode)和 PaperSize(設定為 @@--CODE-19837--@@),在解析文件後進行配置。
IronPDF 在渲染之前對渲染器使用 RenderingOptions。 屬性包括 PaperSize(設定為 PdfPaperSize.A4)、MarginTop 和 MarginBottom,單位為毫米。 關鍵差異在於IronPDF可透過數值屬性直接控制頁邊距,而 Scryber.Core 則使用基於 XML 的樣式設計。
範本遷移模式
將專有綁定轉換為標準範本
Scryber.Core 使用專屬的基於 XML 的綁定語法,必須轉換為標準模板:
Scryber.Core綁定:
<pdf:Para text='{{model.Name}}' />
<pdf:Para text='Total: {{model.Total:C}}' />
<pdf:ForEach on='{{model.Items}}'>
<pdf:Para text='{{.Name}}: {{.Price}}' />
</pdf:ForEach>
<pdf:Para text='{{model.Name}}' />
<pdf:Para text='Total: {{model.Total:C}}' />
<pdf:ForEach on='{{model.Items}}'>
<pdf:Para text='{{.Name}}: {{.Price}}' />
</pdf:ForEach>
使用 C# 字串插值的 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);
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);
Dim items = model.Items.Select(Function(i) $"<li>{i.Name}: {i.Price:C}</li>")
Dim html = $"
<p>{model.Name}</p>
<p>Total: {model.Total:C}</p>
<ul>
{String.Join("", items)}
</ul>"
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf(html)
主要優勢:IronPDF 使用標準 C# 和 HTML,因此您可以使用任何模板引擎(Razor、Handlebars 等),而無需學習專用語法。
頁首與頁尾遷移
Scryber.Core(基於 XML 的頁首/頁腳):
<?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 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>
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");
Imports IronPdf
Dim renderer As New ChromePdfRenderer()
' HTML header with full CSS support
renderer.RenderingOptions.HtmlHeader = New HtmlHeaderFooter With {
.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 With {
.HtmlFragment = "
<div style='width: 100%; text-align: center; font-size: 10pt;'>
Page {page} of {total-pages}
</div>",
.MaxHeight = 25
}
Dim pdf = renderer.RenderHtmlAsPdf("<h1>Content Here</h1>")
pdf.SaveAs("report.pdf")
Scryber.Core 需要基於 XML 的頁首/頁尾定義,其中包含專有佔位符,例如 {{pagenum}} 和 {{pagetotal}}。IronPDF使用完整的HTML/CSS來建立頁首和頁腳,並使用 {page} 和 {total-pages} 佔位符。
遷移後的新功能
轉移到IronPDF之後,您將獲得 Scryber.Core 無法提供的功能:
PDF 合併
var pdf1 = PdfDocument.FromFile("chapter1.pdf");
var pdf2 = PdfDocument.FromFile("chapter2.pdf");
var pdf3 = PdfDocument.FromFile("chapter3.pdf");
var merged = PdfDocument.Merge(pdf1, pdf2, pdf3);
merged.SaveAs("complete_book.pdf");
var pdf1 = PdfDocument.FromFile("chapter1.pdf");
var pdf2 = PdfDocument.FromFile("chapter2.pdf");
var pdf3 = PdfDocument.FromFile("chapter3.pdf");
var merged = PdfDocument.Merge(pdf1, pdf2, pdf3);
merged.SaveAs("complete_book.pdf");
Dim pdf1 = PdfDocument.FromFile("chapter1.pdf")
Dim pdf2 = PdfDocument.FromFile("chapter2.pdf")
Dim pdf3 = PdfDocument.FromFile("chapter3.pdf")
Dim merged = PdfDocument.Merge(pdf1, pdf2, pdf3)
merged.SaveAs("complete_book.pdf")
安全性與元資料
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Confidential</h1>");
// Metadata
pdf.MetaData.Title = "My Document";
pdf.MetaData.Author = "John Doe";
pdf.MetaData.Subject = "Annual Report";
pdf.MetaData.Keywords = "report, annual, confidential";
// Security
pdf.SecuritySettings.OwnerPassword = "owner123";
pdf.SecuritySettings.UserPassword = "user456";
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.FullPrintRights;
pdf.SaveAs("protected.pdf");
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Confidential</h1>");
// Metadata
pdf.MetaData.Title = "My Document";
pdf.MetaData.Author = "John Doe";
pdf.MetaData.Subject = "Annual Report";
pdf.MetaData.Keywords = "report, annual, confidential";
// Security
pdf.SecuritySettings.OwnerPassword = "owner123";
pdf.SecuritySettings.UserPassword = "user456";
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.FullPrintRights;
pdf.SaveAs("protected.pdf");
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf("<h1>Confidential</h1>")
' Metadata
pdf.MetaData.Title = "My Document"
pdf.MetaData.Author = "John Doe"
pdf.MetaData.Subject = "Annual Report"
pdf.MetaData.Keywords = "report, annual, confidential"
' Security
pdf.SecuritySettings.OwnerPassword = "owner123"
pdf.SecuritySettings.UserPassword = "user456"
pdf.SecuritySettings.AllowUserCopyPasteContent = False
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.FullPrintRights
pdf.SaveAs("protected.pdf")
功能比較摘要
| 特點 | Scryber.Core | IronPDF |
|---|---|---|
| HTML 至 PDF | 基本的 | 完整的 Chromium |
| URL 至 PDF | 手動取得 | 原生支援 |
| CSS 網格 | 限額 | 支援 |
| Flexbox | 限額 | 支援 |
| JavaScript | 無 | 完整的 ES2024 |
| 資料綁定 | 專屬 XML | 使用 Razor/Handlebars |
| 頁首/頁尾 | 基於 XML | HTML/CSS |
| 合併 PDF | 限額 | 內建 |
| 分割 PDF | 無 | 是 |
| 水印 | 基本的 | 完整 HTML |
| 數位簽名 | 無 | 是 |
| PDF/A | 無 | 是 |
| 密碼保護 | 基本的 | 全文 |
| 同步支援 | 限額 | 全文 |
| 跨平台 | 是 | 是 |
遷移清單
預遷移
- 審核所有 Scryber 範本的 XML/綁定模式
- 所使用的文件資料綁定模式(
{{model.Property}}) - 識別需要進行 CSS 轉換的自訂樣式
- 從ironpdf.com取得IronPDF許可證金鑰
程式碼更新
- 刪除
Scryber.CoreNuGet 套件 - 安裝
IronPdfNuGet 套件 - 更新命名空間導入(
using Scryber.Core;→using IronPdf;) - 將
Document.ParseDocument(html, ParseSourceType.DynamicContent)替換為renderer.RenderHtmlAsPdf(html) - 將
doc.SaveAsPDF()替換為pdf.SaveAs()將 XML 模板轉換為 HTML - 將專有綁定替換為標準模板(Razor/字串插值)
- 更新頁設定:
doc.RenderOptions.PaperSize→renderer.RenderingOptions.PaperSize - 將頁首/頁尾轉換為帶有
{page}和{total-pages}佔位符的 HTML 格式 - 在應用程式啟動時新增許可證初始化
測試
- 測試所有文件模板
- 驗證樣式是否匹配(充分利用 CSS 支援)
- 使用新模板測試資料綁定
- 驗證分頁
- 測試帶有頁碼佔位符的頁首/頁腳
- 效能比較

