XFINIUM.PDF 與 IronPDF:技術比較指南
當.NET開發人員評估用於文件生成和操作的 PDF 庫時,XFINIUM.PDF 作為一個具有全面底層 PDF 工具的跨平台選項而出現。 然而,它基於座標的圖形程式設計模型與以 HTML 為中心的方法有顯著差異。 本次技術比較將 XFINIUM.PDF 與IronPDF進行比較,以協助架構師和開發人員了解 PDF 生成理念、API 設計和現代 Web 內容支援的根本差異。
了解 XFINIUM.PDF
XFINIUM.PDF 是一個完全以 C# 開發的商業跨平台 PDF 庫,旨在服務 PDF 開發人員的初學者和專家。 該庫提供多種功能,包括 PDF 生成、表單填寫、PDF 作品集建置、內容編輯和多頁 TIFF 轉換。
XFINIUM.PDF 提供兩個版本:生成器版本用於建立和編輯 PDF,檢視器版本增加了渲染和顯示功能。 該庫提供跨平台的全面PDF處理工具。
然而,XFINIUM.PDF 的運作模式與以網路為中心的 PDF 庫有著根本不同的範式:
-基於座標的 API:需要手動使用像素座標進行定位,例如 DrawString("text", font, brush, 50, 100) -不支援原生 HTML:無法將 HTML/CSS 轉換為 PDF-依賴底層繪圖原語 -手動字體管理:必須明確建立和管理字體對象 -不支援 CSS 樣式:不支援現代網頁樣式-顏色、字體和版面必須手動設定。 -不支援JavaScript渲染:僅支援靜態內容,無法渲染動態網頁內容 -複雜的文字佈局:需要手動計算文字長度和換行。
圖形程式設計模型
XFINIUM.PDF 迫使開發人員像圖形程式設計師一樣思考,而不是像文件設計師一樣思考:
// XFINIUM.PDF: Position every element manually
page.Graphics.DrawString("Invoice", titleFont, titleBrush, new XPoint(50, 50));
page.Graphics.DrawString("Customer:", labelFont, brush, new XPoint(50, 80));
page.Graphics.DrawString(customer.Name, valueFont, brush, new XPoint(120, 80));
page.Graphics.DrawLine(pen, 50, 100, 550, 100);
// ... hundreds of lines for a simple document// XFINIUM.PDF: Position every element manually
page.Graphics.DrawString("Invoice", titleFont, titleBrush, new XPoint(50, 50));
page.Graphics.DrawString("Customer:", labelFont, brush, new XPoint(50, 80));
page.Graphics.DrawString(customer.Name, valueFont, brush, new XPoint(120, 80));
page.Graphics.DrawLine(pen, 50, 100, 550, 100);
// ... hundreds of lines for a simple document隨著需求的變化,這種方法會為維護帶來挑戰,因為當內容改變時,每個元素的位置都必須重新計算。
了解IronPDF
IronPDF採用以 Web 為中心的 PDF 產生方式,使用 Chromium 渲染引擎將 HTML、CSS 和JavaScript直接轉換為 PDF 文件。 IronPDF並沒有採用基於座標的繪圖方式,而是讓開發人員使用熟悉的 Web 技術來建立文件。
主要特點包括:
-基於 HTML/CSS 的設計:使用標準 Web 技術進行文件佈局
- Chromium渲染引擎:透過現代瀏覽器技術全面支援CSS3和JavaScript -自動佈局:無需手動計算座標-內容自然流暢 現代 Web 標準: CSS Grid、Flexbox、Web 字體和 ES2024 JavaScript
- URL 轉 PDF:直接將即時網頁渲染成 PDF 文件 -龐大的社群:豐富的文件、教學和支援資源
功能對比
下表列出了 XFINIUM.PDF 和IronPDF之間的根本差異:
| 特徵 | XFINIUM.PDF | IronPDF |
|---|---|---|
| HTML 轉 PDF | HTML 支援有限,主要著重於程式化 PDF 創建。 | 提供全面的 HTML 轉 PDF 轉換功能及支持 |
| 社區與支持 | 社群規模較小,可用的線上資源也較少。 | 擁有大量文件和教程的大型社區 |
| 執照 | 商業用途,採用開發者授權模式 | 商業的 |
| 跨平台支援 | 強大的跨平台能力 | 同時支援跨平台操作 |
| 特色功能 | 全面的PDF編輯工具 | 進階 HTML 渲染以及 PDF 功能 |
詳細功能對比
| 特徵 | XFINIUM.PDF | IronPDF |
|---|---|---|
| 內容創作 | ||
| HTML 轉 PDF | 有限(PdfHtmlTextElement) | 全鉻渲染 |
| PDF檔案的URL | 不 | 是的 |
| CSS 支援 | 不 | 完整的 CSS3 |
| JavaScript | 不 | 完整版 ES2024 |
| Flexbox/Grid | 不 | 是的 |
| 網頁字體 | 不 | 是的 |
| SVG 支持 | 有限的 | 滿的 |
| 佈局 | ||
| 自動佈局 | 不 | 是的 |
| 自動分頁符 | 不 | 是的 |
| 手動定位 | 必需的 | 可選(CSS 定位) |
| 表格 | 手繪 | HTML <table> |
| PDF 操作 | ||
| 合併PDF | 是的 | 是的 |
| 拆分PDF | 是的 | 是的 |
| 水印 | 手繪 | 內建 |
| 頁首/頁尾 | 每頁手冊 | 自動的 |
| 發展 | ||
| 學習曲線 | 高(座標系) | 低(HTML/CSS) |
| 程式碼冗長性 | 非常高 | 低的 |
| 維護 | 難的 | 簡單的 |
| 跨平台 | 是的 | 是的 |
API架構差異
XFINIUM.PDF 和IronPDF在架構上的差異代表了 PDF 產生方式的根本不同。
XFINIUM.PDF 流程文件模式
XFINIUM.PDF 使用多步驟流程,其中包含 PdfFlowDocument 和 PdfFlowContent 物件:
// NuGet: Install-Package Xfinium.Pdf
using Xfinium.Pdf;
using Xfinium.Pdf.Actions;
using Xfinium.Pdf.FlowDocument;
using System.IO;
class Program
{
static void Main()
{
PdfFixedDocument document = new PdfFixedDocument();
PdfFlowDocument flowDocument = new PdfFlowDocument();
string html = "<html><body><h1>Hello World</h1><p>This is a PDF from HTML.</p></body></html>";
PdfFlowContent content = new PdfFlowContent();
content.AppendHtml(html);
flowDocument.AddContent(content);
flowDocument.RenderDocument(document);
document.Save("output.pdf");
}
}// NuGet: Install-Package Xfinium.Pdf
using Xfinium.Pdf;
using Xfinium.Pdf.Actions;
using Xfinium.Pdf.FlowDocument;
using System.IO;
class Program
{
static void Main()
{
PdfFixedDocument document = new PdfFixedDocument();
PdfFlowDocument flowDocument = new PdfFlowDocument();
string html = "<html><body><h1>Hello World</h1><p>This is a PDF from HTML.</p></body></html>";
PdfFlowContent content = new PdfFlowContent();
content.AppendHtml(html);
flowDocument.AddContent(content);
flowDocument.RenderDocument(document);
document.Save("output.pdf");
}
}這種模式需要建立多個文檔對象,將內容新增到流容器中,渲染到固定文件中,然後儲存。 透過 AppendHtml 實現的 HTML 支援與完整的瀏覽器渲染相比有其限制。
IronPDF精簡版
IronPDF提供使用 ChromePdfRenderer 類別的直接 HTML 到 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 from HTML.</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 from HTML.</p></body></html>";
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
}
}ChromePdfRenderer類別使用 Chromium 渲染引擎處理 HTML,並完全支援 CSS3 和JavaScript 。 有關 HTML 轉換的全面指南,請參閱HTML 轉 PDF 教學。
PDF合併操作
合併多個 PDF 文件會發現不同函式庫之間的 API 複雜度有顯著差異。
XFINIUM.PDF 手冊頁循環
XFINIUM.PDF 需要開啟檔案流,遍歷頁面,並手動將每一頁新增至輸出文件:
// NuGet: Install-Package Xfinium.Pdf
using Xfinium.Pdf;
using System.IO;
class Program
{
static void Main()
{
PdfFixedDocument output = new PdfFixedDocument();
FileStream file1 = File.OpenRead("document1.pdf");
PdfFixedDocument pdf1 = new PdfFixedDocument(file1);
FileStream file2 = File.OpenRead("document2.pdf");
PdfFixedDocument pdf2 = new PdfFixedDocument(file2);
for (int i = 0; i < pdf1.Pages.Count; i++)
{
output.Pages.Add(pdf1.Pages[i]);
}
for (int i = 0; i < pdf2.Pages.Count; i++)
{
output.Pages.Add(pdf2.Pages[i]);
}
output.Save("merged.pdf");
file1.Close();
file2.Close();
}
}// NuGet: Install-Package Xfinium.Pdf
using Xfinium.Pdf;
using System.IO;
class Program
{
static void Main()
{
PdfFixedDocument output = new PdfFixedDocument();
FileStream file1 = File.OpenRead("document1.pdf");
PdfFixedDocument pdf1 = new PdfFixedDocument(file1);
FileStream file2 = File.OpenRead("document2.pdf");
PdfFixedDocument pdf2 = new PdfFixedDocument(file2);
for (int i = 0; i < pdf1.Pages.Count; i++)
{
output.Pages.Add(pdf1.Pages[i]);
}
for (int i = 0; i < pdf2.Pages.Count; i++)
{
output.Pages.Add(pdf2.Pages[i]);
}
output.Save("merged.pdf");
file1.Close();
file2.Close();
}
}這種方法需要明確流程管理、手動遍歷每個文件的頁面以及仔細清理文件句柄。
IronPDF靜態合併方法
IronPDF提供了一個靜態方法,該方法在內部處理所有複雜性:
// NuGet: Install-Package IronPdf
using IronPdf;
using System.Collections.Generic;
class Program
{
static void Main()
{
var pdf1 = PdfDocument.FromFile("document1.pdf");
var pdf2 = PdfDocument.FromFile("document2.pdf");
var merged = PdfDocument.Merge(pdf1, pdf2);
merged.SaveAs("merged.pdf");
}
}// NuGet: Install-Package IronPdf
using IronPdf;
using System.Collections.Generic;
class Program
{
static void Main()
{
var pdf1 = PdfDocument.FromFile("document1.pdf");
var pdf2 = PdfDocument.FromFile("document2.pdf");
var merged = PdfDocument.Merge(pdf1, pdf2);
merged.SaveAs("merged.pdf");
}
}PdfDocument.Merge 方法消除了手動頁面迭代和流程管理,從而顯著降低了程式碼複雜度。
建立包含文字和圖像的文檔
建立包含混合內容的文件體現了基於座標的圖形和基於 HTML 的設計之間的範式差異。
XFINIUM.PDF 圖形方法
XFINIUM.PDF 需要建立字體物件、畫筆對象,將圖像載入到特定的圖像類別中,並在精確的座標上繪製每個元素:
// NuGet: Install-Package Xfinium.Pdf
using Xfinium.Pdf;
using Xfinium.Pdf.Graphics;
using Xfinium.Pdf.Core;
using System.IO;
class Program
{
static void Main()
{
PdfFixedDocument document = new PdfFixedDocument();
PdfPage page = document.Pages.Add();
PdfStandardFont font = new PdfStandardFont(PdfStandardFontFace.Helvetica, 24);
PdfBrush brush = new PdfBrush(PdfRgbColor.Black);
page.Graphics.DrawString("Sample PDF Document", font, brush, 50, 50);
FileStream imageStream = File.OpenRead("image.jpg");
PdfJpegImage image = new PdfJpegImage(imageStream);
page.Graphics.DrawImage(image, 50, 100, 200, 150);
imageStream.Close();
document.Save("output.pdf");
}
}// NuGet: Install-Package Xfinium.Pdf
using Xfinium.Pdf;
using Xfinium.Pdf.Graphics;
using Xfinium.Pdf.Core;
using System.IO;
class Program
{
static void Main()
{
PdfFixedDocument document = new PdfFixedDocument();
PdfPage page = document.Pages.Add();
PdfStandardFont font = new PdfStandardFont(PdfStandardFontFace.Helvetica, 24);
PdfBrush brush = new PdfBrush(PdfRgbColor.Black);
page.Graphics.DrawString("Sample PDF Document", font, brush, 50, 50);
FileStream imageStream = File.OpenRead("image.jpg");
PdfJpegImage image = new PdfJpegImage(imageStream);
page.Graphics.DrawImage(image, 50, 100, 200, 150);
imageStream.Close();
document.Save("output.pdf");
}
}這需要管理 PdfRgbColor 和 PdfJpegImage 對象,並對文字和圖像進行明確座標定位。
IronPDF HTML 方法
IronPDF使用嵌入式影像的標準 HTML:
// NuGet: Install-Package IronPdf
using IronPdf;
using System.IO;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
string imageBase64 = Convert.ToBase64String(File.ReadAllBytes("image.jpg"));
string html = $@"
<html>
<body>
<h1>Sample PDF Document</h1>
<img src='data:image/jpeg;base64,{imageBase64}' width='200' height='150' />
</body>
</html>";
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
}
}// NuGet: Install-Package IronPdf
using IronPdf;
using System.IO;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
string imageBase64 = Convert.ToBase64String(File.ReadAllBytes("image.jpg"));
string html = $@"
<html>
<body>
<h1>Sample PDF Document</h1>
<img src='data:image/jpeg;base64,{imageBase64}' width='200' height='150' />
</body>
</html>";
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
}
}HTML 會自動處理佈局-無需座標計算,無需字型物件管理,圖片使用標準 <img> 標籤或 base64 編碼自然嵌入。
API對應參考
評估從 XFINIUM.PDF 過渡到IronPDF 的團隊會發現此映射有助於理解概念等效性:
| XFINIUM.PDF | IronPDF |
|---|---|
PdfFixedDocument | ChromePdfRenderer |
PdfPage | 自動的 |
page.Graphics.DrawString() | HTML 文字元素 |
page.Graphics.DrawImage() | <img> 標籤 |
page.Graphics.DrawLine() | CSS border 或 <hr> |
page.Graphics.DrawRectangle() | CSS border on <div> |
PdfUnicodeTrueTypeFont | CSS font-family |
PdfRgbColor | CSS color |
PdfBrush | CSS屬性 |
PdfPen | CSS border |
PdfHtmlTextElement | RenderHtmlAsPdf() |
document.Save(stream) | pdf.SaveAs() 或 pdf.BinaryData |
PdfStringAppearanceOptions | CSS樣式 |
PdfStringLayoutOptions | CSS佈局 |
當團隊考慮從 XFINIUM.PDF 遷移到IronPDF時
在以下幾種情況下,開發團隊通常會評估IronPDF作為 XFINIUM.PDF 的替代方案:
現代網路內容需求
對於建立從基於 Web 的範本、儀表板或報告產生 PDF 的應用程式的團隊來說,XFINIUM.PDF 基於座標的方法有其限制。 IronPDF 的 Chromium 引擎可以渲染 XFINIUM.PDF 無法支援的現代 CSS Grid、Flexbox 和 JavaScript 驅動的內容。
維護和程式碼複雜性
XFINIUM.PDF 中基於座標的 API 會產生冗長的程式碼,隨著文件佈局的演變,這些程式碼將變得難以維護。 一個簡單的發票文件在 XFINIUM.PDF 中可能需要數百行定位程式碼,而使用IronPDF則只需要幾十行 HTML/CSS。
URL轉PDF功能
XFINIUM.PDF 無法將即時網頁渲染成 PDF-此功能需要外部 HTML 解析庫。 IronPDF提供原生URL 轉 PDF 功能,支援完整的JavaScript執行和動態內容。
開發者熟悉度
即使是擁有紮實網頁開發技能的團隊,也會發現基於座標的 PDF 生成方法學習曲線陡峭。 HTML 和 CSS 是廣為人知的技術,因此 IronPDF 的方法對那些不具備專業 PDF 知識的開發人員來說更容易上手。
自動佈局和分頁符
XFINIUM.PDF 需要手動追蹤 Y 軸位置,並且在內容超出頁面邊界時需要明確建立頁面。 IronPDF可根據 CSS 規則和內容流自動處理分頁符號。
常見的移民考量
從 XFINIUM.PDF 過渡到IronPDF 的團隊應考慮以下技術差異:
從基於座標的佈局到流程佈局
XFINIUM.PDF 要求每個元素都有精確的 X、Y 座標。 IronPDF預設使用HTML串流佈局。 對於需要絕對定位的情況,CSS 提供了以下功能:
.positioned-element {
position: absolute;
top: 100px;
left: 50px;
}字體物件到 CSS 字體系列
XFINIUM.PDF 明確建立 PdfUnicodeTrueTypeFont 物件。 IronPDF使用 CSS 字體系列,並具有自動字體處理功能:
<style>
body { font-family: Arial, sans-serif; }
h1 { font-family: 'Times New Roman', serif; font-size: 24px; }
</style><style>
body { font-family: Arial, sans-serif; }
h1 { font-family: 'Times New Roman', serif; font-size: 24px; }
</style>將顏色物件轉換為 CSS 顏色
XFINIUM.PDF 需要 PdfRgbColor 和 PdfBrush 物件。 IronPDF使用標準的 CSS 顏色:
.header { color: navy; background-color: #f5f5f5; }
.warning { color: rgb(255, 0, 0); }
.info { color: rgba(0, 0, 255, 0.8); }手動分頁轉自動分頁
XFINIUM.PDF 需要追蹤 Y 軸位置並手動建立新頁面。 IronPDF提供透過 CSS 控制的自動分頁功能:
.section { page-break-after: always; }
.keep-together { page-break-inside: avoid; }IronPDF 的其他功能
除了核心對比點之外, IronPDF還提供文件操作功能,作為對其 HTML 渲染功能的補充:
-頁首和頁尾:自動產生基於 HTML 的頁首和頁腳,並帶有頁碼 -數位簽章:套用加密簽章來驗證文件的真實性 -水印:內置浮水印支持,無需手動繪製
.NET相容性和未來適應性
這兩個函式庫都支援跨平台的.NET開發。 IronPDF持續進行積極開發和定期更新,確保與.NET 8、 .NET 9 以及包括預計 2026 年發布的.NET 10 在內的未來版本相容。該程式庫的 HTML/CSS 方法符合現代 Web 開發實踐,充分利用了.NET開發人員已掌握的技能。
結論
XFINIUM.PDF 和IronPDF代表了.NET中產生 PDF 的兩種截然不同的方法。 XFINIUM.PDF 的基於座標的圖形 API 提供底層控制,但需要大量的文件佈局程式碼——每個元素都需要明確定位、字體物件和顏色管理。 隨著文件複雜性的增加,這種方法越來越難以維持。
IronPDF 以 HTML/CSS 為基礎的方法利用 Chromium 渲染引擎將 PDF 產生視為 Web 渲染。 開發者使用熟悉的 HTML、CSS 和JavaScript,而無需學習基於座標的圖形 API。自動佈局、分頁符號和對現代 Web 標準(CSS Grid、Flexbox、ES2024 JavaScript)的支援顯著降低了程式碼複雜度。
對於建立產生基於 Web 的報告、儀表板或動態文件的應用程式的團隊來說,IronPDF 的方法自然而然地與現代開發實踐相契合。 對於需要對文件中的每個元素進行像素級精確控制,並且願意投資於基於座標的程式設計模型的團隊而言,XFINIUM.PDF 的圖形 API 提供了這種能力。
最終的選擇取決於您團隊的需求:如果您的 PDF 源自 Web 內容,或者您喜歡使用 HTML/CSS 進行文件設計,那麼 IronPDF 的方法可以提供顯著的生產力優勢。 如果您正在建立具有精確定位要求的高度專業化的 PDF 內容,並且您的團隊擁有圖形程式設計專業知識,那麼 XFINIUM.PDF 的底層 API 可以滿足這些需求。
