如何在 C# 中從 Syncfusion PDF 遷移到 IronPDF
從Syncfusion PDF遷移到 IronPDF:完整的 C# 遷移指南。
從Syncfusion PDFFramework 轉換到 IronPDF,可將您的 PDF 生成工作流程從捆綁在大型套件中的基於坐標的圖形 API 轉換為具有現代 Chromium 渲染功能的獨立、HTML/CSS-first 函式庫。 本指南提供完整的逐步遷移路徑,可免除僅限套件的授權、複雜的部署要求以及基於坐標的定位。
為什麼要從Syncfusion PDF轉移到 IronPDF?
瞭解Syncfusion PDFFramework
Syncfusion PDF Framework 是一個全面的函式庫,提供廣泛的功能,可使用 C# 來建立、編輯和保護 PDF 文件。 它是 融合 的 Essential Studio 的一部分,其中包括跨越多種平台的一千多個元件。
然而,它最顯著的缺點之一就是不能作為獨立產品購買; 開發人員必須購買整套 融合 元件。 對於只對 PDF 功能感興趣的團隊來說,這項要求可能會很麻煩,尤其是這個套件可能會包含對他們的專案而言不必要的工具。
捆綁授權問題
Syncfusion 的 License 模式為只需要 PDF 功能的團隊帶來了重大的挑戰:
1.僅限套件購買:無法單獨購買 PDF 函式庫 - 必須購買整個 Essential Studio 2.社群授權限制:免費層需要 <$1M 收入和 <5 位開發人員 3.複雜部署授權:網頁、桌面、伺服器部署的不同授權 4.Annual Renewal Required(需要每年續約):訂閱模式,費用為每年一次。 5.每位開發人員定價:成本與團隊規模成線性比例 6.Suite Bloat:包含 1000 多個您可能不需要的元件
Syncfusion PDF與IronPDF的比較
| 範疇 | Syncfusion PDF | IronPDF |
|---|---|---|
| 購買模式 | 僅套件包 | 單機版 |
| 授權 | 複雜層級 | 簡單的每個開發人員 |
| 社群限制 | <$1M AND <5 位開發人員 | 免費試用,然後取得授權 |
| 部署 | 多種授權類型 | 一個授權涵蓋所有 |
| API 風格 | 基於座標的圖形 | HTML/CSS 為先 |
| HTML 支援 | 需要 BlinkBinaries | 原生 Chromium |
| CSS 支援 | 限額 | 完整的 CSS3/flexbox/grid |
| 依賴性 | 多種套件 | 單一 NuGet |
| 套件需求 | 是(整套) | 無 |
| 聚焦 PDF | 廣泛; 大型套件的一部分 | 狹義; 以 PDF 為主 |
IronPDF 以獨立產品的形式提供 PDF 功能,提供了更有針對性的方法。 這種差異對成本考量和整合的難易度都有顯著的影響。
對於計劃在 2025 年和 2026 年之前採用 .NET 10 和 C# 14 的團隊而言,IronPDF 的獨立 License 和HTML/CSS 為先方法提供了靈活性,而無套件依賴性。
開始之前
先決條件
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 融合 packages
dotnet remove package Syncfusion.Pdf.Net.Core
dotnet remove package Syncfusion.HtmlToPdfConverter.Net.Windows
dotnet remove package Syncfusion.Licensing
# Install IronPDF
dotnet add package IronPdf# Remove 融合 packages
dotnet remove package Syncfusion.Pdf.Net.Core
dotnet remove package Syncfusion.HtmlToPdfConverter.Net.Windows
dotnet remove package Syncfusion.Licensing
# Install IronPDF
dotnet add package IronPdf授權組態
Syncfusion:
// Must register before any 融合 calls
Syncfusion.Licensing.SyncfusionLicenseProvider.RegisterLicense("YOUR-SYNCFUSION-KEY");// Must register before any 融合 calls
Syncfusion.Licensing.SyncfusionLicenseProvider.RegisterLicense("YOUR-SYNCFUSION-KEY");IRON VB CONVERTER ERROR developers@ironsoftware.comIronPDF:
// One-time at startup
IronPdf.License.LicenseKey = "YOUR-IRONPDF-KEY";// One-time at startup
IronPdf.License.LicenseKey = "YOUR-IRONPDF-KEY";IRON VB CONVERTER ERROR developers@ironsoftware.com完整的 API 參考資料
命名空間變更
// Before: 融合 PDF
using Syncfusion.Pdf;
using Syncfusion.Pdf.Graphics;
using Syncfusion.Pdf.Parsing;
using Syncfusion.HtmlConverter;
using Syncfusion.Drawing;
// After: IronPDF
using IronPdf;
using IronPdf.Rendering;// Before: 融合 PDF
using Syncfusion.Pdf;
using Syncfusion.Pdf.Graphics;
using Syncfusion.Pdf.Parsing;
using Syncfusion.HtmlConverter;
using Syncfusion.Drawing;
// After: IronPDF
using IronPdf;
using IronPdf.Rendering;IRON VB CONVERTER ERROR developers@ironsoftware.com核心 API 對應
| 融合 | IronPDF | 筆記 |
|---|---|---|
| <編碼>PDF 文件</編碼 | <代碼>ChromePdfRenderer</代碼 | 建立 PDF |
| <代碼>PdfLoadedDocument</代碼 | <代碼>PdfDocument.FromFile()</代碼 | 載入 PDF |
| <編碼>HtmlToPdfConverter</編碼 | <代碼>ChromePdfRenderer</代碼 | HTML 轉換 |
| <代碼>graphics.DrawString()</代碼 | HTML 文字元素 | <p>, <h1> |
| <代碼>graphics.DrawImage()</代碼 | <img> 標籤 | HTML 影像 |
| <編碼>PdfGrid</編碼 | HTML <table> | 表格 |
| <編碼>PdfStandardFont</編碼 | CSS font-family | 字體 |
| <編碼>PdfBrushes.Black</編碼 | CSS color: black | 顏色 |
文件.安全性 | <編碼>pdf.SecuritySettings</編碼 | 安全性 |
| <編碼>PdfTextExtractor</編碼 | <代碼>pdf.ExtractAllText()</代碼 | 文字擷取 |
導入頁面範圍() | <代碼>PdfDocument.Merge()</代碼 | 合併 |
document.Save(stream)。 | <代碼>pdf.SaveAs(路徑)</代碼 | 節省 |
document.Close(true) | 不需要 | 自動清理 |
程式碼遷移範例
範例 1:HTML/URL 到 PDF 的轉換
之前(Syncfusion PDF):
// NuGet: Install-Package Syncfusion.Pdf.Net.Core
using Syncfusion.HtmlConverter;
using Syncfusion.Pdf;
using System.IO;
class Program
{
static void Main()
{
// Initialize HTML to PDF converter
HtmlToPdfConverter htmlConverter = new HtmlToPdfConverter();
// Convert URL to PDF
PdfDocument document = htmlConverter.Convert("https://www.example.com");
// Save the document
FileStream fileStream = new FileStream("Output.pdf", FileMode.Create);
document.Save(fileStream);
document.Close(true);
fileStream.Close();
}
}// NuGet: Install-Package Syncfusion.Pdf.Net.Core
using Syncfusion.HtmlConverter;
using Syncfusion.Pdf;
using System.IO;
class Program
{
static void Main()
{
// Initialize HTML to PDF converter
HtmlToPdfConverter htmlConverter = new HtmlToPdfConverter();
// Convert URL to PDF
PdfDocument document = htmlConverter.Convert("https://www.example.com");
// Save the document
FileStream fileStream = new FileStream("Output.pdf", FileMode.Create);
document.Save(fileStream);
document.Close(true);
fileStream.Close();
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comAfter (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main()
{
// Create a PDF from a URL
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderUrlAsPdf("https://www.example.com");
// Save the PDF
pdf.SaveAs("Output.pdf");
}
}// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main()
{
// Create a PDF from a URL
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderUrlAsPdf("https://www.example.com");
// Save the PDF
pdf.SaveAs("Output.pdf");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.com本範例展示了基本的 API 差異。Syncfusion PDF需要一個<編碼>HtmlToPdfConverter</編碼實例,呼叫 Convert() 會返回一個<編碼>PDF 文件</編碼,然後手動建立一個 FileStream 、儲存並關閉文件和流。
IronPDF 使用<代碼>ChromePdfRenderer</代碼與 RenderUrlAsPdf() 僅僅三行代碼。 無 FileStream 管理,無 Close() 呼叫 -IronPDF自動處理清理。 請參閱 HTML to PDF 文件,以瞭解全面的範例。
範例 2:從文字建立 PDF
之前(Syncfusion PDF):
// NuGet: Install-Package Syncfusion.Pdf.Net.Core
using Syncfusion.Pdf;
using Syncfusion.Pdf.Graphics;
using Syncfusion.Drawing;
using System.IO;
class Program
{
static void Main()
{
// Create a new PDF document
PdfDocument document = new PdfDocument();
// Add a page
PdfPage page = document.Pages.Add();
// Create a font
PdfFont font = new PdfStandardFont(PdfFontFamily.Helvetica, 12);
// Draw text
page.Graphics.DrawString("Hello, World!", font, PdfBrushes.Black, new PointF(10, 10));
// Save the document
FileStream fileStream = new FileStream("Output.pdf", FileMode.Create);
document.Save(fileStream);
document.Close(true);
fileStream.Close();
}
}// NuGet: Install-Package Syncfusion.Pdf.Net.Core
using Syncfusion.Pdf;
using Syncfusion.Pdf.Graphics;
using Syncfusion.Drawing;
using System.IO;
class Program
{
static void Main()
{
// Create a new PDF document
PdfDocument document = new PdfDocument();
// Add a page
PdfPage page = document.Pages.Add();
// Create a font
PdfFont font = new PdfStandardFont(PdfFontFamily.Helvetica, 12);
// Draw text
page.Graphics.DrawString("Hello, World!", font, PdfBrushes.Black, new PointF(10, 10));
// Save the document
FileStream fileStream = new FileStream("Output.pdf", FileMode.Create);
document.Save(fileStream);
document.Close(true);
fileStream.Close();
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comAfter (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;
class Program
{
static void Main()
{
// Create a PDF from HTML string
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Hello, World!</h1>");
// Save the document
pdf.SaveAs("Output.pdf");
}
}// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;
class Program
{
static void Main()
{
// Create a PDF from HTML string
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Hello, World!</h1>");
// Save the document
pdf.SaveAs("Output.pdf");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comSyncfusion PDF 使用基於坐標的圖形模型。 您建立一個 PdfDocument, 加入一個 PdfPage, 建立一個 PdfFont 與 PdfFontFamily.Helvetica, 然後呼叫 page.Graphics.DrawString() 與明確的座標 (new PointF(10, 10)), 字型和筆刷 (PdfBrushes.Black)。 最後,您要管理 FileStream 的建立與處理。
IronPdf 採用 HTML/CSS 為先的方法。 Instead of coordinates, you write <h1>Hello, World!</h1> and let CSS handle positioning, fonts, and colors. 此方法更簡單、更易維護,並可利用開發人員已有的技能。 請參閱我們的 教學,瞭解更多資訊。
範例 3:合併 PDF 文件
之前(Syncfusion PDF):
// NuGet: Install-Package Syncfusion.Pdf.Net.Core
using Syncfusion.Pdf;
using Syncfusion.Pdf.Parsing;
using System.IO;
class Program
{
static void Main()
{
// Load the first PDF document
FileStream stream1 = new FileStream("Document1.pdf", FileMode.Open, FileAccess.Read);
PdfLoadedDocument loadedDocument1 = new PdfLoadedDocument(stream1);
// Load the second PDF document
FileStream stream2 = new FileStream("Document2.pdf", FileMode.Open, FileAccess.Read);
PdfLoadedDocument loadedDocument2 = new PdfLoadedDocument(stream2);
// Merge the documents
PdfDocument finalDocument = new PdfDocument();
finalDocument.ImportPageRange(loadedDocument1, 0, loadedDocument1.Pages.Count - 1);
finalDocument.ImportPageRange(loadedDocument2, 0, loadedDocument2.Pages.Count - 1);
// Save the merged document
FileStream outputStream = new FileStream("Merged.pdf", FileMode.Create);
finalDocument.Save(outputStream);
// Close all documents
finalDocument.Close(true);
loadedDocument1.Close(true);
loadedDocument2.Close(true);
stream1.Close();
stream2.Close();
outputStream.Close();
}
}// NuGet: Install-Package Syncfusion.Pdf.Net.Core
using Syncfusion.Pdf;
using Syncfusion.Pdf.Parsing;
using System.IO;
class Program
{
static void Main()
{
// Load the first PDF document
FileStream stream1 = new FileStream("Document1.pdf", FileMode.Open, FileAccess.Read);
PdfLoadedDocument loadedDocument1 = new PdfLoadedDocument(stream1);
// Load the second PDF document
FileStream stream2 = new FileStream("Document2.pdf", FileMode.Open, FileAccess.Read);
PdfLoadedDocument loadedDocument2 = new PdfLoadedDocument(stream2);
// Merge the documents
PdfDocument finalDocument = new PdfDocument();
finalDocument.ImportPageRange(loadedDocument1, 0, loadedDocument1.Pages.Count - 1);
finalDocument.ImportPageRange(loadedDocument2, 0, loadedDocument2.Pages.Count - 1);
// Save the merged document
FileStream outputStream = new FileStream("Merged.pdf", FileMode.Create);
finalDocument.Save(outputStream);
// Close all documents
finalDocument.Close(true);
loadedDocument1.Close(true);
loadedDocument2.Close(true);
stream1.Close();
stream2.Close();
outputStream.Close();
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comAfter (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
using System.Collections.Generic;
class Program
{
static void Main()
{
// Load PDF documents
var pdf1 = PdfDocument.FromFile("Document1.pdf");
var pdf2 = PdfDocument.FromFile("Document2.pdf");
// Merge PDFs
var merged = PdfDocument.Merge(new List<PdfDocument> { pdf1, pdf2 });
// Save the merged document
merged.SaveAs("Merged.pdf");
}
}// NuGet: Install-Package IronPdf
using IronPdf;
using System.Collections.Generic;
class Program
{
static void Main()
{
// Load PDF documents
var pdf1 = PdfDocument.FromFile("Document1.pdf");
var pdf2 = PdfDocument.FromFile("Document2.pdf");
// Merge PDFs
var merged = PdfDocument.Merge(new List<PdfDocument> { pdf1, pdf2 });
// Save the merged document
merged.SaveAs("Merged.pdf");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.com合併 PDF 的反差非常大。Syncfusion PDF需要為每個輸入文件建立 FileStream 物件,以<代碼>PdfLoadedDocument</代碼加載它們,建立一個新的<編碼>PDF 文件</編碼,呼叫導入頁面範圍()為每個來源加上開始和結束索引、建立一個輸出 FileStream, 然後關閉 6 個獨立的物件 (finalDocument, loadedDocument1, loadedDocument2, stream1, stream2, outputStream).
IronPDF 使用<代碼>PdfDocument.FromFile()</代碼來載入每個 PDF,並使用靜態<代碼>PdfDocument.Merge()</代碼方法來接受文件清單。 無需流管理、無需手動計算頁面範圍、無需千鈞一髮。
API 理念的主要差異
基於座標 vs HTML/CSS 為主
Syncfusion PDF 使用從傳統 PDF 函式庫繼承下來的基於坐標的圖形模型:
// Syncfusion: 手動的 positioning
page.Graphics.DrawString("Text", font, PdfBrushes.Black, new PointF(100, 200));
page.Graphics.DrawRectangle(brush, new RectangleF(50, 50, 200, 100));// Syncfusion: 手動的 positioning
page.Graphics.DrawString("Text", font, PdfBrushes.Black, new PointF(100, 200));
page.Graphics.DrawRectangle(brush, new RectangleF(50, 50, 200, 100));IRON VB CONVERTER ERROR developers@ironsoftware.comIronPdf 使用 HTML/CSS 進行排版:
// IronPDF: CSS-based positioning
var html = @"
<div style='margin: 50px; padding: 20px; border: 1px solid black;'>
<p style='color: black;'>Text</p>
</div>";
var pdf = renderer.RenderHtmlAsPdf(html);// IronPDF: CSS-based positioning
var html = @"
<div style='margin: 50px; padding: 20px; border: 1px solid black;'>
<p style='color: black;'>Text</p>
</div>";
var pdf = renderer.RenderHtmlAsPdf(html);IRON VB CONVERTER ERROR developers@ironsoftware.comHTML/CSS 方法對網頁開發人員而言更直覺、更容易維護,並能在不同大小的頁面上產生一致的結果。
串流管理 vs 自動清理
Syncfusion PDF 要求明確的流和文件處理:
// Syncfusion: 手動的 cleanup
FileStream fileStream = new FileStream("Output.pdf", FileMode.Create);
document.Save(fileStream);
document.Close(true);
fileStream.Close();// Syncfusion: 手動的 cleanup
FileStream fileStream = new FileStream("Output.pdf", FileMode.Create);
document.Save(fileStream);
document.Close(true);
fileStream.Close();IRON VB CONVERTER ERROR developers@ironsoftware.comIronPdf 會自動處理清理工作:
// IronPDF:自動化cleanup
pdf.SaveAs("Output.pdf");// IronPDF:自動化cleanup
pdf.SaveAs("Output.pdf");IRON VB CONVERTER ERROR developers@ironsoftware.com功能比較
| 特點 | Syncfusion PDF | IronPDF |
|---|---|---|
| Standalone 購買 | 無(僅套件) | 是 |
| 授權 | 商業與社群限制 | 簡化商業 |
| HTML至PDF | 需要 BlinkBinaries | 原生 Chromium |
| CSS3 支援。 | 限額 | 完整 (flexbox、grid) |
| API 風格 | 基於座標的圖形 | HTML/CSS 為先 |
| 流管理 | 手動的 | 自動化 |
| 依賴性 | 多種套件 | 單一 NuGet |
| 部署複雜性 | 潛在的複雜性 | 簡單直接 |
遷移清單
預遷移
- [清查代碼庫中所有Syncfusion PDF的使用情況
- [ ] 文件許可成本和部署要求
- [ ] 識別
PdfGrid,PdfGraphics, 和<編碼>HtmlToPdfConverter</編碼的用法。 - [ ] 從 ironpdf.com 獲得IronPDF授權金鑰
程式碼更新
- [ ] 移除 融合 套件 (
Syncfusion.Pdf.Net.Core,Syncfusion.HtmlToPdfConverter.Net.Windows,Syncfusion.Licensing) - [ ] 安裝
IronPdfNuGet 套件 - [ ] 更新命名空間匯入 (
using Syncfusion.Pdf;→using IronPdf;) - [ ] 將
Syncfusion.Licensing.SyncfusionLicenseProvider.RegisterLicense()替換為IronPdf.License.LicenseKey = "..."。 - [將
HtmlToPdfConverter.Convert()替換為ChromePdfRenderer.RenderUrlAsPdf()或RenderHtmlAsPdf()。 - [ ] 使用
ChromePdfRenderer.RenderHtmlAsPdf()取代<編碼>PDF 文件</編碼+Pages.Add()+Graphics.DrawString()。 - [ ] 將<代碼>PdfLoadedDocument</代碼替換為<代碼>PdfDocument.FromFile()</代碼。
- [ ] 將
導入頁面範圍()替換為<代碼>PdfDocument.Merge()</代碼。 - [ ] 將
document.Save(stream)。替換為<代碼>pdf.SaveAs(路徑)</代碼。 - [ ] 移除所有
document.Close(true)和stream.Close()呼叫 - [ ] 將<編碼>PdfGrid</編碼替換為HTML
<table>元素 - [ ] 將<編碼>PdfStandardFont</編碼替換為 CSS
font-family - [ ] 將
PdfBrushes替換為 CSScolor屬性
測試
- [ ] PDF 輸出的視覺比較
- [驗證 CSS 渲染的改進(flexbox、grid 現在可以工作了)
- [ ] 測試文字擷取
- [ ] 測試合併與分割
- [ ] 效能比較
結論
在Syncfusion PDFFramework 和IronPDF之間做出選擇,需要瞭解特定專案的需求以及每個函式庫所帶來的更廣泛工具集。 融合 提供強大的多合一解決方案,是大型套件的一部分,非常適合需要不只 PDF 功能的組織。 另一方面,IronPdf 提供了一個專注、易於投入的選項,非常適合那些以直接的 PDF 整合為優先,而不需要額外元件的專案。
本次轉換的主要變更如下 1.授權:僅套件捆綁版 → 獨立購買 2.API 風格:基於座標的圖形 → HTML/CSS 為先 3.HTML 轉換:HtmlToPdfConverter.Convert() → ChromePdfRenderer.RenderUrlAsPdf() 4.文字渲染:使用字型/筆刷的 Graphics.DrawString() → 使用 CSS 的 HTML 元素 5.載入 PDF:PdfLoadedDocument + FileStream → PdfDocument.FromFile() 6.Merge PDFs:使用手動頁面索引的導入頁面範圍()→ PdfDocument.Merge() 7.儲存:document.Save(stream) + stream 管理 → pdf.SaveAs(path) 8.清理:手動在文件和串流上呼叫 Close() → 自動 9.表格:PdfGrid 與儲存格操作 →HTML <table>與 CSS 10.字體:PdfStandardFont(PdfFontFamily.Helvetica, 12) → CSS font-family: Helvetica; font-size: 12pt;
總而言之,企業必須衡量成本、授權條款和特定專案需求,以決定哪一個函式庫最符合他們的目標。 如需深入的教學和資源豐富的 C# PDF 使用心得,企業可利用IronPDF的線上指導。






