PDFSharp與IronPDF:技術比較指南
了解Syncfusion PDF Framework
Syncfusion PDF Framework是一個全面的程式庫,提供多種功能來使用C#建立、編輯和保護PDF文件。 它作為Syncfusion的Essential Studio的一部分提供,該Studio包含了跨多平台的超過千個組件。
該框架提供了豐富的功能集,支援建立和操作PDF文件、從各種來源轉換PDF文件,並實施複雜的安全措施。 然而,它的一個最顯著特點是它不能作為獨立產品購買—開發者必須購買整個Syncfusion組件套裝。 這個要求對於只關心PDF功能的團隊來說可能會很麻煩。
此外,雖然Syncfusion提供免費的社群授權,但其有限制—僅對於收入少於$1百萬且開發者少於五人的小公司開放。 由於不同的部署需要不同的授權,授權條款可能變得很複雜。
了解IronPDF
IronPDF透過提供PDF能力作為獨立產品的方式提供了一個專注的解決方案。 與Syncfusion經緯度為基礎的圖像API不同,IronPDF使用HTML/CSS優先的方法,開發者通過使用熟悉的網頁技術建立PDF內容,然後由本地Chromium引擎渲染。
IronPDF通過提供明確的條款來簡化授權,這不依賴於部署的複雜性或場景,這與Syncfusion PDF Framework的分層授權形成對比。 該程式庫作為單一NuGet套件安裝,不需要多個相依性。
打包授權的問題
Syncfusion的授權模式對僅需要PDF功能的團隊造成了重大挑戰:
- 僅限套裝購買: 無法單獨購買PDF程式庫—必須購買整個Essential Studio
- 社群授權限制: 免費層需要收入低於$1百萬且開發者少於5人
- 複雜的部署授權: 不同的授權用於網頁、桌面、伺服器部署
- 需要年度續訂: 訂閱模式需要年費
- 按開發者計價: 費用隨團隊規模線性增長
- 套裝膨脹: 包括1000+個您可能不需要的組件
授權和購買模式比較
| 方面 | Syncfusion PDF | IronPDF |
|---|---|---|
| 購買模式 | 僅限套裝打包 | 獨立 |
| 授權 | 复雜的層級 | 簡單的按開發者 |
| 社群限制 | <$1M AND <5 devs | 免費試用,然後授權 |
| 部署 | 多種授權型別 | 一個授權涵蓋所有 |
| API風格 | 基於坐標的圖形 | HTML/CSS優先 |
| HTML支援 | 需要BlinkBinaries | 本地Chromium |
| CSS支持 | 有限 | 完整CSS3/flexbox/grid |
| 相依性 | 多個包 | 單一NuGet |
API設計理念
Syncfusion PDF和IronPDF在其API設計方法上有根本的不同。
Syncfusion 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();
}
}Imports Syncfusion.Pdf
Imports Syncfusion.Pdf.Graphics
Imports Syncfusion.Drawing
Imports System.IO
Module Program
Sub Main()
' Create a new PDF document
Dim document As New PdfDocument()
' Add a page
Dim page As PdfPage = document.Pages.Add()
' Create a font
Dim font As PdfFont = New PdfStandardFont(PdfFontFamily.Helvetica, 12)
' Draw text
page.Graphics.DrawString("Hello, World!", font, PdfBrushes.Black, New PointF(10, 10))
' Save the document
Dim fileStream As New FileStream("Output.pdf", FileMode.Create)
document.Save(fileStream)
document.Close(True)
fileStream.Close()
End Sub
End Module此方法需要:
- 使用
document.Pages.Add()手動頁面管理 - 使用
PdfStandardFont建立字體物件 - 使用
PointF(10, 10)明確坐標定位 - 手動流管理和明確的
Close()調用 - 為不同的命名空間使用多個using語句
IronPDF:HTML/CSS優先的方式
IronPDF使用HTML和CSS來建立內容,利用開發者已知的網頁技術:
// 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");
}
}Imports IronPdf
Imports IronPdf.Rendering
Class Program
Shared Sub Main()
' Create a PDF from HTML string
Dim renderer As New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf("<h1>Hello, World!</h1>")
' Save the document
pdf.SaveAs("Output.pdf")
End Sub
End ClassRenderHtmlAsPdf方法直接將HTML內容轉換為PDF。 無需經緯度計算,無需手動字體物件,無需流管理—Chromium引擎自動處理佈局。
HTML到PDF轉換
將網頁內容轉換為PDF文件揭示了方法和複雜程度的顯著差異。
Syncfusion PDF HTML轉換
Syncfusion PDF使用一個單獨的HTML轉換器,需要明確的文件和流管理:
// 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();
}
}Imports Syncfusion.HtmlConverter
Imports Syncfusion.Pdf
Imports System.IO
Module Program
Sub Main()
' Initialize HTML to PDF converter
Dim htmlConverter As New HtmlToPdfConverter()
' Convert URL to PDF
Dim document As PdfDocument = htmlConverter.Convert("https://www.example.com")
' Save the document
Dim fileStream As New FileStream("Output.pdf", FileMode.Create)
document.Save(fileStream)
document.Close(True)
fileStream.Close()
End Sub
End Module此方法需要:
- 獨立的
HtmlToPdfConverter類 - 用於HTML渲染的BlinkBinaries
- 手動
FileStream建立和管理 - 明確的
document.Close(true)調用 - 多個清理操作
IronPDF HTML轉換
IronPDF提供了流線化的URL到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");
}
}// 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");
}
}Imports IronPdf
Class Program
Shared Sub Main()
' Create a PDF from a URL
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderUrlAsPdf("https://www.example.com")
' Save the PDF
pdf.SaveAs("Output.pdf")
End Sub
End ClassRenderUrlAsPdf方法導航到URL,使用本地Chromium引擎進行JavaScript執行的頁面渲染,並捕獲結果。 無需單獨的轉換器類,無需流管理,無需明確的清理。
PDF合併操作
合併多個PDF文件展示了兩個庫之間複雜性的區別。
Syncfusion 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();
}
}Imports Syncfusion.Pdf
Imports Syncfusion.Pdf.Parsing
Imports System.IO
Class Program
Shared Sub Main()
' Load the first PDF document
Dim stream1 As New FileStream("Document1.pdf", FileMode.Open, FileAccess.Read)
Dim loadedDocument1 As New PdfLoadedDocument(stream1)
' Load the second PDF document
Dim stream2 As New FileStream("Document2.pdf", FileMode.Open, FileAccess.Read)
Dim loadedDocument2 As New PdfLoadedDocument(stream2)
' Merge the documents
Dim finalDocument As New PdfDocument()
finalDocument.ImportPageRange(loadedDocument1, 0, loadedDocument1.Pages.Count - 1)
finalDocument.ImportPageRange(loadedDocument2, 0, loadedDocument2.Pages.Count - 1)
' Save the merged document
Dim outputStream As 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()
End Sub
End Class此方法需要:
- 為每個文件建立單獨的
FileStream物件 - 使用
PdfLoadedDocument讀取現有PDF - 使用頁索引進行手動
ImportPageRange()調用 - 為結果建立新的
PdfDocument - 進行六次
Close()清理調用 - 大量樣板程式碼
IronPDF合併
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");
}
}Imports IronPdf
Imports System.Collections.Generic
Class Program
Shared Sub Main()
' Load PDF documents
Dim pdf1 = PdfDocument.FromFile("Document1.pdf")
Dim pdf2 = PdfDocument.FromFile("Document2.pdf")
' Merge PDFs
Dim merged = PdfDocument.Merge(New List(Of PdfDocument) From {pdf1, pdf2})
' Save the merged document
merged.SaveAs("Merged.pdf")
End Sub
End ClassPdfDocument.Merge()方法接受文件列表並返回合併結果。 無需流管理,無需頁索引計算,無需手動清理—自動資源管理處理所有事情。
完整的API映射
評估從Syncfusion PDF遷移到IronPDF的團隊可以參考這些映射:
核心文件類
| Syncfusion | IronPDF |
|---|---|
PdfDocument | ChromePdfRenderer / PdfDocument |
PdfPage | 不適用(HTML生成頁面) |
PdfLoadedDocument | PdfDocument.FromFile() |
PdfLoadedPage | pdf.Pages[index] |
圖形和繪製
| Syncfusion PdfGraphics | IronPDF |
|---|---|
graphics.DrawString() | HTML文字元素 |
graphics.DrawLine() | CSS邊框或<hr> |
graphics.DrawRectangle() | <div>對應CSS |
graphics.DrawImage() | <img>標籤 |
graphics.DrawPath() | SVG <path> |
字型和文字
| Syncfusion | IronPDF |
|---|---|
PdfStandardFont | CSS font-family |
PdfTrueTypeFont | CSS @font-face |
PdfFontFamily.Helvetica | font-family: Helvetica |
PdfFontStyle.Bold | font-weight: bold |
PdfFontStyle.Italic | font-style: italic |
顏色和畫刷
| Syncfusion | IronPDF |
|---|---|
PdfBrushes.Black | color: black |
PdfSolidBrush | CSS color / background-color |
PdfLinearGradientBrush | CSS linear-gradient() |
PdfColor | CSS顏色值 |
表格
| Syncfusion PdfGrid | IronPDF |
|---|---|
new PdfGrid() | HTML <table> |
grid.DataSource = data | 從資料構建HTML |
grid.Columns.Add() | <th>元素 |
grid.Rows.Add() | <tr>元素 |
PdfGridCell | <td>元素 |
安全性
| Syncfusion | IronPDF |
|---|---|
document.Security.UserPassword | pdf.SecuritySettings.UserPassword |
document.Security.OwnerPassword | pdf.SecuritySettings.OwnerPassword |
document.Security.Permissions | pdf.SecuritySettings.Allow* |
PdfPermissionsFlags.Print | AllowUserPrinting |
PdfPermissionsFlags.CopyContent | AllowUserCopyPasteContent |
HTML轉換
| Syncfusion | IronPDF |
|---|---|
HtmlToPdfConverter | ChromePdfRenderer |
converter.Convert(url) | renderer.RenderUrlAsPdf(url) |
converter.Convert(html, baseUrl) | renderer.RenderHtmlAsPdf(html) |
BlinkConverterSettings | ChromePdfRenderOptions |
settings.EnableJavaScript | RenderingOptions.EnableJavaScript |
功能比較總結
| 功能/方面 | Syncfusion PDF Framework | IronPDF |
|---|---|---|
| 購買模式 | Essential Studio的一部分 | 獨立 |
| 授權 | 商業的,帶有社群限制 | 簡化的商業 |
| 部署複雜性 | 可能很複雜 | 簡單明瞭 |
| 套件需求 | 是(整個套件) | 無 |
| 專注於PDF | 廣泛的; 較大套件的一部分 | 狹窄的; 以PDF為重點 |
| API風格 | 基於坐標 | HTML/CSS優先 |
| CSS支援 | 有限 | 完整CSS3/flexbox/grid |
| 渲染引擎 | 需要BlinkBinaries | 本地Chromium |
當團隊考慮Syncfusion PDF遷移
有幾個因素促使開發團隊評估Syncfusion PDF的替代方案:
套件組合要求迫使購買整個Essential Studio,而僅需要PDF功能。 這包括1000+個可能對僅專注於PDF生成的項目來說不必要的組件。
社群授權限制將免費使用限制在收入少於$1百萬且開發者少於5人的公司。 超過任何一個門檻的組織必須購買商業許可證。
複雜部署授權要求不同的授權型別用於網頁、桌面和伺服器部署,增加了管理開銷和潛在的合規問題。
基於坐標的API複雜性需要手動位置計算、字體物件管理和明確的流處理,這增加了相較於HTML/CSS方法的開發時間。
多個套件相依性需要安裝不同的套件來支持不同的功能(Syncfusion.Pdf.Net.Core, Syncfusion.HtmlToPdfConverter.Net.Windows, Syncfusion.Pdf.Imaging.Net.Core),而不是單一的統一套件。
安裝比較
Syncfusion PDF安裝
# Multiple packages may be needed
dotnet add package Syncfusion.Pdf.Net.Core
dotnet add package Syncfusion.HtmlToPdfConverter.Net.Windows
dotnet add package Syncfusion.Pdf.Imaging.Net.Core
dotnet add package Syncfusion.Licensing# Multiple packages may be needed
dotnet add package Syncfusion.Pdf.Net.Core
dotnet add package Syncfusion.HtmlToPdfConverter.Net.Windows
dotnet add package Syncfusion.Pdf.Imaging.Net.Core
dotnet add package Syncfusion.Licensing授權註冊:
// Must register before any Syncfusion calls
Syncfusion.Licensing.SyncfusionLicenseProvider.RegisterLicense("YOUR-SYNCFUSION-KEY");// Must register before any Syncfusion calls
Syncfusion.Licensing.SyncfusionLicenseProvider.RegisterLicense("YOUR-SYNCFUSION-KEY");' Must register before any Syncfusion calls
Syncfusion.Licensing.SyncfusionLicenseProvider.RegisterLicense("YOUR-SYNCFUSION-KEY")IronPDF安裝
# Single package
dotnet add package IronPdf# Single package
dotnet add package IronPdf授權配置:
// One-time at startup
IronPdf.License.LicenseKey = "YOUR-IRONPDF-KEY";// One-time at startup
IronPdf.License.LicenseKey = "YOUR-IRONPDF-KEY";' One-time at startup
IronPdf.License.LicenseKey = "YOUR-IRONPDF-KEY"結論
Syncfusion PDF Framework和IronPDF服務於不同的組織背景和開發偏好。 Syncfusion提供了一個全面的套件,作為Essential Studio的一部分,適合已經投資於Syncfusion生態的組織,需要包括PDF功能在內的多種組件型別。 其基於坐標的圖形API為熟悉精確定位的開發者提供了精細的控制。
對於僅專注於PDF生成的團隊來說,IronPDF提供了一個獨立的解決方案,採用HTML/CSS優先的方法。 能夠使用熟悉的網頁技術進行佈局,結合簡化的授權和單一套件安裝,解決了PDF開發工作流程中的常見摩擦點。
在評估Syncfusion PDF向IronPDF的遷移時,團隊應考慮其在授權複雜性、API偏好上的具體需求,以及套件捆綁模型是否與他們的需求對齊。 對於將在2026年目標 .NET 10 和 C# 14 的團隊來說,IronPDF的HTML/CSS方法和本地Chromium引擎提供了符合當代開發實踐的能力。
欲獲取實施指導,請參閱IronPDF HTML-to-PDF教程和文件,其中涵蓋現代.NET應用的PDF生成模式。
