XFINIUM.PDF 與 IronPDF:技術比較指南
XFINIUM.PDF vs IronPDF:.NET PDF 生成的技術比較
當 .NET 開發人員評估用於文件產生和處理的 PDF 函式庫時,XFINIUM.PDF 將成為具有全面低階 PDF 工具的跨平台選擇。 然而,其基於坐標的圖形編程模型與以 HTML 為中心的方法有顯著的差異。 本技術比較將 XFINIUM.PDF 與IronPDF一併檢視,以協助架構師和開發人員瞭解 PDF 產生哲學、API 設計和現代網頁內容支援的基本差異。
瞭解 XFINIUM.PDF
XFINIUM.PDF 是完全以 C# 開發的商用跨平台 PDF 函式庫,專為 PDF 開發初學者和專家所設計。 這個函式庫提供廣泛的功能,包括 PDF 產生、表格填寫、PDF 作品集建構、內容編輯以及多頁 TIFF 轉換。
XFINIUM.PDF 提供了兩個版本:用於 PDF 創建和編輯的 Generator Edition,以及增加了渲染和顯示功能的 Viewer Edition。 該資料庫提供跨平台的全面 PDF 操作工具。
然而,XFINIUM.PDF 的運作模式與以網頁為中心的 PDF 函式庫根本不同:
- 基於座標的 API:需要使用像素座標進行手動定位,例如
DrawString("text", font, brush, 50, 100) - 沒有原生 HTML 支援:無法將 HTML/CSS 轉換為 PDF - 依賴低階繪圖原素
- 手動字型管理:必須明確地建立和管理字型物件
- No CSS Styling:不支援現代網頁樣式-顏色、字型和版面必須手動處理。
- 無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 documentIRON VB CONVERTER ERROR developers@ironsoftware.com當需求改變時,這個方法就會成為維護上的挑戰,因為內容轉換時,每個元素的位置都必須重新計算。
了解 IronPDF
IronPDF 採用以網頁為中心的方式來產生 PDF,使用 Chromium 演算引擎將 HTML、CSS 和JavaScript直接轉換成 PDF 文件。 IronPDF不是基於坐標的繪圖,而是讓開發人員使用熟悉的網路技術來製作文件。
主要特點包括
- 基於 HTML/CSS 的設計:使用標準的網頁技術進行文件排版
- Chromium 渲染引擎:透過現代瀏覽器技術提供完整的 CSS3 與JavaScript支援
- 自動排版:無需手動計算坐標-內容自然流暢
- 現代網路標準:CSS Grid、Flexbox、網路字型和 ES2024 JavaScript
- URL-to-PDF 轉換:將即時網頁直接渲染為 PDF
- 大型社群:廣泛的文件、教學和支援資源
功能比較
下表強調了 XFINIUM.PDF 與IronPDF的基本差異:
| 特點 | XFINIUM.PDF | IronPDF |
|---|---|---|
| HTML至PDF | 有限的 HTML 支援,著重於程式化 PDF 建立 | 全面支援 HTML 至 PDF 的完整轉換 |
| 社群與支援 | 社群規模較小,可用的線上資源較少 | 擁有大量文件和教學的大型社群 |
| 執照 | 基於開發人員的商業授權 | 商業的 |
| 跨平台支援 | 強大的跨平台能力 | 同時支援跨平台作業 |
| 專業特色 | 全面的 PDF 編輯工具 | 先進的 HTML 渲染功能與 PDF 功能 |
詳細功能比較
| 特點 | XFINIUM.PDF | IronPDF |
|---|---|---|
| 內容創作 | ||
| HTML 至 PDF | 有限 (PdfHtmlTextElement) | 完整的 Chromium 渲染 |
| URL 至 PDF | 無 | 是 |
| CSS 支援 | 無 | 完整的 CSS3 |
| JavaScript | 無 | 完整的 ES2024 |
| Flexbox/Grid | 無 | 是 |
| 網頁字型 | 無 | 是 |
| SVG 支援 | 限額 | 全文 |
| 版面設計 | ||
| 自動排版 | 無 | 是 |
| 自動分頁 | 無 | 是 |
| 手動定位 | 要求 | 可選 (CSS 定位) |
| 表格 | 手繪 | HTML <table> |
| PDF作業 | ||
| 合併 PDF | 是 | 是 |
| 分割 PDF | 是 | 是 |
| 水印 | 手繪 | 內建 |
| 頁首/頁尾 | 手冊每頁 | 自動化 |
| 開發 | ||
| 學習曲線 | 高(坐標系統) | 低 (HTML/CSS) |
| 程式碼正確程度 | 非常高 | 低 |
| 維護 | 難度 | 簡易 |
| 跨平台 | 是 | 是 |
API 架構差異
XFINIUM.PDF 和IronPDF在架構上的差異代表了根本不同的 PDF 產生方法。
XFINIUM.PDF 流程文件樣式
XFINIUM.PDF 使用 PdfFixedDocument, 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");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.com此模式需要建立多個文件物件、將內容新增至 flow container、渲染至固定文件,然後儲存。 相較於完整的瀏覽器呈現,透過 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");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comChromePdfRenderer 類使用 Chromium 渲染引擎處理 HTML,並完全支援 CSS3 和 JavaScript。 如需全面的 HTML 轉換指南,請參閱 HTML to 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();
}
}IRON VB CONVERTER ERROR developers@ironsoftware.com這種方法需要明確的流管理、手動迭代每個文件的頁面,以及仔細清理檔案句柄。
IronPDF的靜態合併方法
IronPDF 提供了一個靜態 Merge 方法,可在內部處理所有複雜的問題:
// 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");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comPdfDocument.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");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.com這需要管理 PdfStandardFont、PdfBrush、PdfRgbColor 和 PdfJpegImage 物件,並對文字和圖像進行明確的坐標定位。
IronPDFHTML 方法
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");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comHTML 會自動處理佈局 - 不需要座標計算、不需要字型物件管理,圖片會使用標準 <img> 標籤或 base64 編碼自然地嵌入。
API 對應參考。
評估從 XFINIUM.PDF 轉換到IronPDF的團隊將會發現此對應圖有助於理解概念等同性:
| XFINIUM.PDF | IronPDF | 筆記 |
|---|---|---|
| <編碼>PDFFixedDocument</編碼 | <代碼>ChromePdfRenderer</代碼 | 建立呈現器,而非文件 |
PdfPage | 自動化 | 從 HTML 內容建立的頁面 |
page.Graphics.DrawString()頁面。 | HTML 文字元素 | <p>、<h1>、<span>等。 |
page.Graphics.DrawImage()頁面。 | <img> 標籤 | HTML 影像 |
page.Graphics.DrawLine()頁面。 | CSS 邊框或 <hr> | HTML/CSS 行 |
page.Graphics.DrawRectangle()頁面。 | CSS <div> 上的 邊框 | HTML 方塊 |
| <編碼>PdfUnicodeTrueTypeFont</編碼 | CSS font-family | 不需要字型物件 |
| <編碼>PdfRgbColor</編碼 | CSS 顏色 | 標準 CSS 顏色 |
| <編碼>PdfBrush</編碼 | CSS 特性 | 背景、顏色等 |
| <編碼>PdfPen</編碼 | CSS 邊框 | 行文風格 |
| <編碼>PdfHtmlTextElement</編碼 | <代碼>RenderHtmlAsPdf()</代碼 | 完整的 HTML 支援 |
document.Save(stream)。 | pdf.SaveAs()或pdf.BinaryData | 多種輸出選項 |
| <編碼>PdfStringAppearanceOptions</編碼 | CSS 造型 | 使用 CSS 設計外觀 |
| <編碼>PdfStringLayoutOptions</編碼 | CSS 排版 | Flexbox、Grid 等。 |
當團隊考慮從 XFINIUM.PDF 轉移到IronPDF時。
有幾種情況通常會促使開發團隊評估IronPDF作為 XFINIUM.PDF 的替代方案:
現代網路內容需求
建立從網頁範本、儀表板或報表產生 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-to-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;
}Font Object 至 CSS Font-Family
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 式頁首和頁尾
- 數位簽章:應用加密簽章來確保文件的真實性
- 水印:內建水印支援,無需手動繪圖
- IronPDF/A Compliance:產生符合歸檔標準的文件
- Form Filling:以程式化方式填入 PDF 表單欄位
- 密碼保護:使用使用者和所有者密碼為 PDF 加密
.NET相容性與未來準備
這兩個函式庫都支援跨平台的 .NET 開發。IronPDF保持定期更新的積極開發,確保與 .NET 8、.NET 9 以及未來版本(包括預計在 2026 年推出的 .NET 10)的相容性。圖書館的 HTML/CSS 方法與現代網路開發實務一致,充分利用了 .NET 開發人員已經具備的技能。
結論
XFINIUM.PDF 和IronPDF代表了在 .NET 中生成 PDF 的基本不同方法。 XFINIUM.PDF 基於坐標的圖形 API 提供低階控制,但需要大量程式碼來進行文件排版 - 每個元素都需要明確的定位、字型物件和顏色管理。 隨著文件複雜度的增加,這種方法變得越來越難維持。
IronPdf 基於 HTML/CSS 的方法利用 Chromium 渲染引擎,將 PDF 生成視為網頁渲染。 開發人員使用熟悉的 HTML、CSS 和 JavaScript,而非學習基於坐標的圖形 API。自動排版、分頁和現代網路標準支援 (CSS Grid、Flexbox、ES2024 JavaScript) 大幅降低程式碼複雜度。
對於建立應用程式的團隊而言,若要產生網頁型報表、儀表板或動態文件,IronPDF 的方法與現代開發實務自然相符。 對於需要對每個文件元素進行像素完美控制,並願意投資於基於坐標的編程模型的團隊,XFINIUM.PDF 的圖形 API 可提供此功能。
最終的選擇取決於您團隊的需求:如果您的 PDF 源自網頁內容,或者您偏好使用 HTML/CSS 進行文件設計,IronPDF 的方法將提供顯著的生產力優勢。 如果您正在建立具有精確定位需求的高度專業化 PDF 內容,而且您的團隊具有圖形編程的專業知識,XFINIUM.PDF 的低階 API 可能可以滿足這些需求。
如需其他實施指導,請參閱 IronPDF 文件和涵蓋特定用例和進階功能的 教學。