比較

Apache PDFBox與IronPDF:技術比較指南

當.NET開發人員評估企業級PDF解決方案時,Foxit SDK憑藉其可靠的文件處理功能脫穎而出。 然而,其複雜的授權系統、手動安裝要求以及冗長的API模式讓許多團隊考慮其他替代方案。 IronPDF提供了現代化的方法,簡單的NuGet安裝,內建HTML到PDF轉換,專為.NET開發人員設計的API模式。

本比較檢視這些程式庫在技術相關維度上的表現,以幫助專業開發者和架構師為他們的 .NET PDF 需求做出明智的決定。

了解Foxit SDK

Foxit SDK是一個企業級PDF程式庫,設計用於完整的C#文件處理。 該程式庫提供了強大的PDF建立、編輯和管理功能,適合需要詳細自訂和高級操作的大規模應用。

Foxit SDK使用HTML2PDFSettingData進行HTML轉換,需要明確配置頁面尺寸、頁面模式和其他設置。 浮水印使用獨立的WatermarkSettings類別,帶有字體定義和定位參數。

該程式庫需要手動的DLL引用或私人NuGet源,沒有簡單的公共NuGet包可用。 HTML到PDF轉換需要單獨購買附加組件,API模式反映了C++的起源,在現代C#開發中感覺不太自然。

了解IronPDF

IronPDF是一個.NET PDF程式庫,使用Chromium渲染引擎進行HTML到PDF轉換,提供對現代網頁標準的內建支持。 該程式庫提供了簡單的NuGet安裝和專為.NET開發人員設計的API模式。

IronPDF使用RenderUrlAsPdf()等直觀的方法。 浮水印使用TextStamper,具有簡單明瞭的屬性來控制文字、字體大小、不透明度、旋轉和對齊。 該程式庫支持標準.NET模式,包括IDisposable進行自動資源清理和基於例外的錯誤處理。

架構和 API 設計比較

這些.NET PDF程式庫之間的根本區別在於它們的API理念和安裝方法。

方面Foxit SDKIronPDF
安裝手動DLLs/私人來源簡單的 NuGet 套件
授權複雜,重點面向企業透明,所有尺寸
初始化Library.Initialize(sn, key) + Library.Release()僅需一次設置授權金鑰
錯誤處理ErrorCode枚舉標準.NET例外
HTML到PDF單獨附加組件內建Chromium
API風格C++遺產,冗長現代.NET模式
資源清理手動Release()IDisposable/自動
文件企業文件公共教程

Foxit SDK的複雜授權系統包含多個產品、SKU和多種型別的授權(每開發人員、每伺服器、OEM等),使得選擇合適的選項困難。 企業導向的定價對於較小的團隊來說可能是禁止的。 IronPDF提供透明的授權,適合各種規模的企業。

程式碼比較:常見的 PDF 操作

HTML 到 PDF 轉換

最基本的操作顯示出API的複雜性差異。

Foxit SDK:

// NuGet: Install-Package Foxit.SDK
using Foxit.SDK;
using Foxit.SDK.Common;
using Foxit.SDK.PDFConversion;
using System;

class Program
{
    static void Main()
    {
        Library.Initialize("sn", "key");

        HTML2PDFSettingData settingData = new HTML2PDFSettingData();
        settingData.page_width = 612.0f;
        settingData.page_height = 792.0f;
        settingData.page_mode = HTML2PDFPageMode.e_HTML2PDFPageModeSinglePage;

        using (HTML2PDF html2pdf = new HTML2PDF(settingData))
        {
            html2pdf.Convert("<html><body><h1>Hello World</h1></body></html>", "output.pdf");
        }

        Library.Release();
    }
}
// NuGet: Install-Package Foxit.SDK
using Foxit.SDK;
using Foxit.SDK.Common;
using Foxit.SDK.PDFConversion;
using System;

class Program
{
    static void Main()
    {
        Library.Initialize("sn", "key");

        HTML2PDFSettingData settingData = new HTML2PDFSettingData();
        settingData.page_width = 612.0f;
        settingData.page_height = 792.0f;
        settingData.page_mode = HTML2PDFPageMode.e_HTML2PDFPageModeSinglePage;

        using (HTML2PDF html2pdf = new HTML2PDF(settingData))
        {
            html2pdf.Convert("<html><body><h1>Hello World</h1></body></html>", "output.pdf");
        }

        Library.Release();
    }
}
Imports Foxit.SDK
Imports Foxit.SDK.Common
Imports Foxit.SDK.PDFConversion
Imports System

Class Program
    Shared Sub Main()
        Library.Initialize("sn", "key")

        Dim settingData As New HTML2PDFSettingData()
        settingData.page_width = 612.0F
        settingData.page_height = 792.0F
        settingData.page_mode = HTML2PDFPageMode.e_HTML2PDFPageModeSinglePage

        Using html2pdf As New HTML2PDF(settingData)
            html2pdf.Convert("<html><body><h1>Hello World</h1></body></html>", "output.pdf")
        End Using

        Library.Release()
    End Sub
End Class
$vbLabelText   $csharpLabel

IronPDF:

// NuGet: Install-Package IronPdf
using IronPdf;
using System;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf("<html><body><h1>Hello World</h1></body></html>");
        pdf.SaveAs("output.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf("<html><body><h1>Hello World</h1></body></html>");
        pdf.SaveAs("output.pdf");
    }
}
Imports IronPdf
Imports System

Class Program
    Shared Sub Main()
        Dim renderer = New ChromePdfRenderer()
        Dim pdf = renderer.RenderHtmlAsPdf("<html><body><h1>Hello World</h1></body></html>")
        pdf.SaveAs("output.pdf")
    End Sub
End Class
$vbLabelText   $csharpLabel

Foxit SDK需要Library.Release()。 整個工作流程涉及多個配置物件和生命周期管理調用。

IronPDF建立一個SaveAs()保存,僅需三行程式碼且無需初始化或清理儀式。

想了解進階HTML渲染選項,請參閱HTML到PDF轉換指南

URL到PDF轉換

轉換網頁為PDF也遵循類似的模式。

Foxit SDK:

// NuGet: Install-Package Foxit.SDK
using Foxit.SDK;
using Foxit.SDK.Common;
using Foxit.SDK.PDFConversion;
using System;

class Program
{
    static void Main()
    {
        Library.Initialize("sn", "key");

        HTML2PDFSettingData settingData = new HTML2PDFSettingData();
        settingData.page_width = 612.0f;
        settingData.page_height = 792.0f;
        settingData.page_mode = HTML2PDFPageMode.e_HTML2PDFPageModeSinglePage;

        using (HTML2PDF html2pdf = new HTML2PDF(settingData))
        {
            html2pdf.ConvertFromURL("https://www.example.com", "output.pdf");
        }

        Library.Release();
    }
}
// NuGet: Install-Package Foxit.SDK
using Foxit.SDK;
using Foxit.SDK.Common;
using Foxit.SDK.PDFConversion;
using System;

class Program
{
    static void Main()
    {
        Library.Initialize("sn", "key");

        HTML2PDFSettingData settingData = new HTML2PDFSettingData();
        settingData.page_width = 612.0f;
        settingData.page_height = 792.0f;
        settingData.page_mode = HTML2PDFPageMode.e_HTML2PDFPageModeSinglePage;

        using (HTML2PDF html2pdf = new HTML2PDF(settingData))
        {
            html2pdf.ConvertFromURL("https://www.example.com", "output.pdf");
        }

        Library.Release();
    }
}
Imports Foxit.SDK
Imports Foxit.SDK.Common
Imports Foxit.SDK.PDFConversion
Imports System

Class Program
    Shared Sub Main()
        Library.Initialize("sn", "key")

        Dim settingData As New HTML2PDFSettingData()
        settingData.page_width = 612.0F
        settingData.page_height = 792.0F
        settingData.page_mode = HTML2PDFPageMode.e_HTML2PDFPageModeSinglePage

        Using html2pdf As New HTML2PDF(settingData)
            html2pdf.ConvertFromURL("https://www.example.com", "output.pdf")
        End Using

        Library.Release()
    End Sub
End Class
$vbLabelText   $csharpLabel

IronPDF:

// NuGet: Install-Package IronPdf
using IronPdf;
using System;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderUrlAsPdf("https://www.example.com");
        pdf.SaveAs("output.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderUrlAsPdf("https://www.example.com");
        pdf.SaveAs("output.pdf");
    }
}
Imports IronPdf
Imports System

Class Program
    Shared Sub Main()
        Dim renderer = New ChromePdfRenderer()
        Dim pdf = renderer.RenderUrlAsPdf("https://www.example.com")
        pdf.SaveAs("output.pdf")
    End Sub
End Class
$vbLabelText   $csharpLabel

Foxit SDK在ConvertFromURL()類別中使用相同的初始化/配置/清理模式。 IronPDF使用RenderUrlAsPdf()直接輸出文件保存。

了解更多關於URL渲染的資訊,請參閱URL到PDF文件

新增浮水印

浮水印演示了物件模型的複雜性差異。

Foxit SDK:

// NuGet: Install-Package Foxit.SDK
using Foxit.SDK;
using Foxit.SDK.Common;
using Foxit.SDK.PDFDoc;
using System;

class Program
{
    static void Main()
    {
        Library.Initialize("sn", "key");

        using (PDFDoc doc = new PDFDoc("input.pdf"))
        {
            doc.Load("");

            Watermark watermark = new Watermark(doc, "Confidential", 
                new Font(Font.StandardID.e_StdIDHelvetica), 48.0f, 0xFF0000FF);

            WatermarkSettings settings = new WatermarkSettings();
            settings.flags = Watermark.e_WatermarkFlagASPageContents;
            settings.position = Watermark.Position.e_PosCenter;
            settings.rotation = -45.0f;
            settings.opacity = 0.5f;

            watermark.SetSettings(settings);
            watermark.InsertToAllPages();

            doc.SaveAs("output.pdf", PDFDoc.SaveFlags.e_SaveFlagNoOriginal);
        }

        Library.Release();
    }
}
// NuGet: Install-Package Foxit.SDK
using Foxit.SDK;
using Foxit.SDK.Common;
using Foxit.SDK.PDFDoc;
using System;

class Program
{
    static void Main()
    {
        Library.Initialize("sn", "key");

        using (PDFDoc doc = new PDFDoc("input.pdf"))
        {
            doc.Load("");

            Watermark watermark = new Watermark(doc, "Confidential", 
                new Font(Font.StandardID.e_StdIDHelvetica), 48.0f, 0xFF0000FF);

            WatermarkSettings settings = new WatermarkSettings();
            settings.flags = Watermark.e_WatermarkFlagASPageContents;
            settings.position = Watermark.Position.e_PosCenter;
            settings.rotation = -45.0f;
            settings.opacity = 0.5f;

            watermark.SetSettings(settings);
            watermark.InsertToAllPages();

            doc.SaveAs("output.pdf", PDFDoc.SaveFlags.e_SaveFlagNoOriginal);
        }

        Library.Release();
    }
}
Imports Foxit.SDK
Imports Foxit.SDK.Common
Imports Foxit.SDK.PDFDoc
Imports System

Class Program
    Shared Sub Main()
        Library.Initialize("sn", "key")

        Using doc As New PDFDoc("input.pdf")
            doc.Load("")

            Dim watermark As New Watermark(doc, "Confidential", 
                                           New Font(Font.StandardID.e_StdIDHelvetica), 48.0F, &HFF0000FF)

            Dim settings As New WatermarkSettings()
            settings.flags = Watermark.e_WatermarkFlagASPageContents
            settings.position = Watermark.Position.e_PosCenter
            settings.rotation = -45.0F
            settings.opacity = 0.5F

            watermark.SetSettings(settings)
            watermark.InsertToAllPages()

            doc.SaveAs("output.pdf", PDFDoc.SaveFlags.e_SaveFlagNoOriginal)
        End Using

        Library.Release()
    End Sub
End Class
$vbLabelText   $csharpLabel

IronPDF:

// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Editing;
using System;

class Program
{
    static void Main()
    {
        var pdf = PdfDocument.FromFile("input.pdf");
        pdf.ApplyWatermark(new TextStamper()
        {
            Text = "Confidential",
            FontSize = 48,
            Opacity = 50,
            Rotation = -45,
            VerticalAlignment = VerticalAlignment.Middle,
            HorizontalAlignment = HorizontalAlignment.Center
        });
        pdf.SaveAs("output.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Editing;
using System;

class Program
{
    static void Main()
    {
        var pdf = PdfDocument.FromFile("input.pdf");
        pdf.ApplyWatermark(new TextStamper()
        {
            Text = "Confidential",
            FontSize = 48,
            Opacity = 50,
            Rotation = -45,
            VerticalAlignment = VerticalAlignment.Middle,
            HorizontalAlignment = HorizontalAlignment.Center
        });
        pdf.SaveAs("output.pdf");
    }
}
Imports IronPdf
Imports IronPdf.Editing
Imports System

Class Program
    Shared Sub Main()
        Dim pdf = PdfDocument.FromFile("input.pdf")
        pdf.ApplyWatermark(New TextStamper() With {
            .Text = "Confidential",
            .FontSize = 48,
            .Opacity = 50,
            .Rotation = -45,
            .VerticalAlignment = VerticalAlignment.Middle,
            .HorizontalAlignment = HorizontalAlignment.Center
        })
        pdf.SaveAs("output.pdf")
    End Sub
End Class
$vbLabelText   $csharpLabel

Foxit SDK要求: 1.用憑證Library.Initialize()

  1. 建立doc.Load("")
  2. 建立一個Font.StandardID.e_StdIDHelvetica)、大小和顏色
  3. 建立opacity
  4. 呼叫watermark.InsertToAllPages()
  5. 使用PDFDoc.SaveFlags.e_SaveFlagNoOriginal
  6. 使用Library.Release()進行清理

IronPDF使用HorizontalAlignment。 枚舉值(Watermark.Position.e_PosCenter語法具有自解釋性。

API映射參考

對於評估Foxit SDK遷移或比較能力的開發人員,這張對應圖展示了等效操作:

核心類映射

Foxit SDKIronPDF
Library.Initialize(sn, key)IronPdf.License.LicenseKey = "key"
Library.Release()不適用
PDFDocPdfDocument
PDFDoc.Load("")自動
doc.SaveAs(path, flags)pdf.SaveAs(path)
doc.Close()pdf.Dispose()或使用
HTML2PDFChromePdfRenderer
HTML2PDFSettingDataRenderingOptions
html2pdf.Convert(html, path)renderer.RenderHtmlAsPdf(html)
html2pdf.ConvertFromURL(url, path)renderer.RenderUrlAsPdf(url)
[Watermark + WatermarkSettings]TextStamper
Font(Font.StandardID.e_StdIDHelvetica)戳記上的屬性

配置映射

Foxit SDKIronPDF
settingData.page_width = 612.0fRenderingOptions.PaperSize
settingData.page_height = 792.0fRenderingOptions.SetCustomPaperSize()
settingData.page_mode預設為多頁
點(72每英寸)毫米

浮水印設置對應

Foxit SDKIronPDF
Watermark.Position.e_PosCenterVerticalAlignment.Middle + HorizontalAlignment.Center
settings.rotation = -45.0fRotation = -45
settings.opacity = 0.5fOpacity = 50
settings.flags不適用
watermark.InsertToAllPages()自動

功能比較總結

功能Foxit SDKIronPDF
HTML到PDF是 (單獨加購)是(內建)
URL到PDF
浮水印
簡單的NuGet安裝是(大型包)
需要初始化是(Library.Initialize否(僅設置一次金鑰)
需要清理是(Library.Release否(自動)
ErrorCode處理否(使用例外)
IDisposable模式部分支持
點數單位系統否(使用毫米)

當團隊考慮從Foxit SDK轉移到IronPDF

開發團隊評估從Foxit SDK轉移到IronPDF的原因有很多:

複雜的授權系統:Foxit SDK提供多個產品、SKU和各種型別的授權(每開發人員、每伺服器、OEM等),使得選擇合適的選擇變得困難。 企業導向的定價對於較小的團隊來說可能是禁止的。

手動安裝要求:Foxit SDK需要手動DLL引用或私人NuGet源,沒有簡單的公共NuGet包。 這增加了初始設置和持續依賴管理的摩擦。

冗長的API模式:需要Library.Release()清理,增加了每個PDF操作的樣板。 ErrorCode枚舉檢查而非標準例外進一步增加了程式碼的複雜性。

單獨的HTML附加:HTML到PDF轉換需要Foxit SDK的額外附加組件購買。 IronPDF包含完整的HTML/CSS/JavaScript支援,內建于其Chromium引擎中,無需額外費用。

C++遺產:Foxit SDK的API模式反映了C++的起源,帶有PDFDoc.SaveFlags.e_SaveFlagNoOriginal等冗長的枚舉名。 這些模式在現代C#開發中感覺不太自然。

配置複雜性:設置需要詳細的物件配置(例如,RenderingOptions進行比較。

優勢和考量

Foxit SDK的優勢

  • 企業功能:廣泛的功能集適合大型企業需求
  • 詳細的自訂:對PDF操作的精細控制
  • 成熟的平台:PDF技術中的悠久存在

Foxit SDK的考量

  • 複雜的授權:多個產品和授權型別需要導航
  • 企業定價:專為大型組織量身定制,可能對較小的團隊來說是禁止的
  • 手動安裝:沒有簡單的公共NuGet包
  • 冗長的API:C++遺產導致更多樣板程式碼
  • 單獨的HTML附加包:HTML轉換需要額外購買
  • 初始化儀式:需要Library.Release()

IronPDF的優勢

  • 簡便安裝:標準NuGet包——dotnet add package IronPdf
  • 現代.NET模式:IDisposable,例外,直觀的屬性名
  • 內建HTML轉換:包含Chromium引擎,無需附加組件
  • 透明授權:適合各種規模的企業
  • 減少樣板:無需初始化/清理儀式
  • 全面的資源: 豐富的教程文件

IronPDF考量

  • 不同的單位系統:使用毫米而非點(轉換:點×0.353=毫米)
  • 商業許可證:生產使用需要許可

單位轉換參考

從Foxit SDK基於點的測量轉移到IronPDF的毫米系統時:

毫米通用用法
7225.41英寸
612216信紙寬
792279信紙高

公式:millimeters = points × 0.353

Foxit SDK和IronPDF都為.NET開發人員提供全面的PDF功能,但它們代表著不同的API設計和開發者體驗。 Foxit SDK提供廣泛的企業功能與詳細的自訂,但其複雜的授權、手動安裝、冗長的API模式和C++遺產增加了開發工作流程的摩擦。

IronPDF提供了一個現代的替代方案,簡單的NuGet安裝,通過Chromium進行的內建HTML到PDF轉換,標準.NET模式(IDisposable,例外)和透明的授權。 減少的樣板——無需Library.Release()調用——加速了開發並簡化了維護。

隨著組織計劃.NET 10、C# 14,並持續到2026年的應用開發,API設計和開發者體驗愈加重要。 尋求減少複雜性、更快開發和現代.NET模式的團隊會發現IronPDF能有效解決這些首要問題。

免費試用 開始評估 IronPDF,並探索全面的文件以評估特定需求的適用性。

請注意Foxit SDK是其各自擁有者的註冊商標。 本網站與Foxit Software無關,未經其認可或贊助。 所有產品名稱、標誌和品牌均為其各自所有者的財產。 比較僅供資訊參考,並反映了撰寫時公開的資訊。)}