比較

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 document
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

當需求改變時,這個方法就會成為維護上的挑戰,因為內容轉換時,每個元素的位置都必須重新計算。

了解 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.PDFIronPDF
HTML至PDF有限的 HTML 支援,著重於程式化 PDF 建立全面支援 HTML 至 PDF 的完整轉換
社群與支援社群規模較小,可用的線上資源較少擁有大量文件和教學的大型社群
執照基於開發人員的商業授權商業的
跨平台支援強大的跨平台能力同時支援跨平台作業
專業特色全面的 PDF 編輯工具先進的 HTML 渲染功能與 PDF 功能

詳細功能比較

特點XFINIUM.PDFIronPDF
內容創作
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, PdfFlowDocumentPdfFlowContent 物件的多步流程:

// 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
$vbLabelText   $csharpLabel

此模式需要建立多個文件物件、將內容新增至 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.com
$vbLabelText   $csharpLabel

ChromePdfRenderer 類使用 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
$vbLabelText   $csharpLabel

這種方法需要明確的流管理、手動迭代每個文件的頁面,以及仔細清理檔案句柄。

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.com
$vbLabelText   $csharpLabel

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");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

這需要管理 PdfStandardFontPdfBrushPdfRgbColorPdfJpegImage 物件,並對文字和圖像進行明確的坐標定位。

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.com
$vbLabelText   $csharpLabel

HTML 會自動處理佈局 - 不需要座標計算、不需要字型物件管理,圖片會使用標準 <img> 標籤或 base64 編碼自然地嵌入。

API 對應參考。

評估從 XFINIUM.PDF 轉換到IronPDF的團隊將會發現此對應圖有助於理解概念等同性:

XFINIUM.PDFIronPDF筆記
<編碼>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>
HTML

顏色物件轉換為 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 渲染功能相輔相成的文件操作功能:

.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 文件和涵蓋特定用例和進階功能的 教學