比較

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

隨著需求的變化,這種方法會為維護帶來挑戰,因為當內容改變時,每個元素的位置都必須重新計算。

了解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.PDFIronPDF
HTML 轉 PDFHTML 支援有限,主要著重於程式化 PDF 創建。提供全面的 HTML 轉 PDF 轉換功能及支持
社區與支持社群規模較小,可用的線上資源也較少。擁有大量文件和教程的大型社區
執照商業用途,採用開發者授權模式商業的
跨平台支援強大的跨平台能力同時支援跨平台操作
特色功能全面的PDF編輯工具進階 HTML 渲染以及 PDF 功能

詳細功能對比

特徵XFINIUM.PDFIronPDF
內容創作
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 使用多步驟流程,其中包含 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");
    }
}
$vbLabelText   $csharpLabel

這種模式需要建立多個文檔對象,將內容新增到流容器中,渲染到固定文件中,然後儲存。 透過 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");
    }
}
$vbLabelText   $csharpLabel

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();
    }
}
$vbLabelText   $csharpLabel

這種方法需要明確流程管理、手動遍歷每個文件的頁面以及仔細清理文件句柄。

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");
    }
}
$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");
    }
}
$vbLabelText   $csharpLabel

這需要管理 PdfRgbColorPdfJpegImage 對象,並對文字和圖像進行明確座標定位。

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");
    }
}
$vbLabelText   $csharpLabel

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

API對應參考

評估從 XFINIUM.PDF 過渡到IronPDF 的團隊會發現此映射有助於理解概念等效性:

XFINIUM.PDFIronPDF
PdfFixedDocumentChromePdfRenderer
PdfPage自動的
page.Graphics.DrawString()HTML 文字元素
page.Graphics.DrawImage()<img> 標籤
page.Graphics.DrawLine()CSS border<hr>
page.Graphics.DrawRectangle()CSS border on <div>
PdfUnicodeTrueTypeFontCSS font-family
PdfRgbColorCSS color
PdfBrushCSS屬性
PdfPenCSS border
PdfHtmlTextElementRenderHtmlAsPdf()
document.Save(stream)pdf.SaveAs()pdf.BinaryData
PdfStringAppearanceOptionsCSS樣式
PdfStringLayoutOptionsCSS佈局

當團隊考慮從 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>
HTML

將顏色物件轉換為 CSS 顏色

XFINIUM.PDF 需要 PdfRgbColorPdfBrush 物件。 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 可以滿足這些需求。

如需更多實施指導,請查閱IronPDF文件教程,其中涵蓋具體用例和高級功能。