比較

PDFreactor vs IronPDF:技術比較指南

當 .NET 開發人員需要將 HTML 轉換為 PDF 時,他們會遇到架構截然不同的程式庫。PDFreactor作為一個基於 Java 的轉換伺服器,擁有優異的CSS 分頁媒體支援,而IronPDF則提供一個內嵌 Chromium 引擎的原生 .NET 函式庫。本比較將研究這兩種解決方案,分析其架構差異、整合複雜度,以及是否適合不同的應用程式需求。

什麼是 PDFreactor?

PDFreactor 是一款功能強大的 HTML 轉 PDF 轉換伺服器,它採用專有技術將 HTML 和 CSS 內容轉換為高品質的 PDF 文件。 該庫支援許多 CSS 屬性,包括高級 CSS 分頁媒體規範,因此對於需要最高保真度的複雜佈局渲染來說,它是一個不錯的選擇。

PDFreactor 以基於 Java 的獨立服務方式執行,.NET 應用程式則透過 REST API 呼叫或套接字連線與PDFreactor進行通訊。 該函式庫使用設定物件模式,其中設定與 HTML 內容被捆綁在一起並傳送至伺服器進行處理。

PDFreactor 的主要特性包括

-基於 Java 的伺服器:作為獨立服務運行,需要 Java 執行環境。

  • CSS 分頁媒體支援:對 CSS3 和 CSS 分頁媒體規範提供卓越的支持 -伺服器架構:需要 .NET 應用程式使用 REST API 或套接字通信 -配置物件模式:使用Configuration物件來捆綁設定和內容 -高保真渲染:針對複雜的、印刷品質的文件佈局進行了最佳化 -跨平台,透過 Java 實作:可在任何安裝了 Java 的系統上運行

什麼是 IronPDF?

IronPDF是一個完整的 .NET 原生程式庫,提供完整的 PDF 生命週期管理。 ChromePdfRenderer 類使用內嵌的 Chromium 渲染引擎進行 HTML 至IronPDF的轉換,提供完整的 CSS3 和 JavaScript 支援,無需外部依賴。

與PDFreactor的伺服器架構不同,IronPDF 可在您的 .NET 應用程式內執行。 這消除了 Java 的依賴性、伺服器基礎架構和網路延遲 - 將 HTML 轉換為 PDF 成為一個簡單的方法呼叫,而非 HTTP 請求。

架構比較

PDFreactor 與IronPDF的根本差異在於其架構:外部 Java 伺服器與原生 .NET 函式庫。

範疇PDFreactorIronPDF
運行時間Java (外部伺服器)原生 .NET (處理中)
架構REST API 服務NuGet 程式庫
部署Java + 伺服器組態單一 NuGet 套件
依賴性JRE + HTTP 客戶端自成一格
交稿時間網路往返直接方法呼叫
CSS 支援CSS 分頁媒體Chromium 引擎
PDF 操作僅限轉換完整的生命週期
原生 .NET 函式庫無(基於 Java)
跨平台能力是(依賴 Java)是(捆綁 Chromium)
部署複雜性由於 Java 較為複雜簡單,直接與 .NET 整合

對於在 .NET 環境中工作的團隊而言,PDFreactor 的 Java 依賴性造成了極大的部署複雜性--在 CI/CD 管道中需要管理兩個執行時、需要監控和維護獨立的基礎架構,以及每次轉換時的網路延遲。

HTML 至 PDF 轉換

將 HTML 內容轉換為 PDF 展示了這些函式庫之間的不同模式。

PDFreactor HTML-to-PDF 方法:

// NuGet: Install-Package PDFreactor.Native.Windows.x64
using RealObjects.PDFreactor;
using System.IO;

class Program
{
    static void Main()
    {
       PDFreactorpdfReactor = new PDFreactor();

        string html = "<html><body><h1>Hello World</h1></body></html>";

        Configuration config = new Configuration();
        config.Document = html;

        Result result = pdfReactor.Convert(config);

        File.WriteAllBytes("output.pdf", result.Document);
    }
}
// NuGet: Install-Package PDFreactor.Native.Windows.x64
using RealObjects.PDFreactor;
using System.IO;

class Program
{
    static void Main()
    {
       PDFreactorpdfReactor = new PDFreactor();

        string html = "<html><body><h1>Hello World</h1></body></html>";

        Configuration config = new Configuration();
        config.Document = html;

        Result result = pdfReactor.Convert(config);

        File.WriteAllBytes("output.pdf", result.Document);
    }
}
Imports RealObjects.PDFreactor
Imports System.IO

Module Program
    Sub Main()
        Dim pdfReactor As New PDFreactor()

        Dim html As String = "<html><body><h1>Hello World</h1></body></html>"

        Dim config As New Configuration()
        config.Document = html

        Dim result As Result = pdfReactor.Convert(config)

        File.WriteAllBytes("output.pdf", result.Document)
    End Sub
End Module
$vbLabelText   $csharpLabel

IronPDF HTML-to-PDF 方法:

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

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();

        string html = "<html><body><h1>Hello World</h1></body></html>";

        var pdf = renderer.RenderHtmlAsPdf(html);

        pdf.SaveAs("output.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();

        string html = "<html><body><h1>Hello World</h1></body></html>";

        var pdf = renderer.RenderHtmlAsPdf(html);

        pdf.SaveAs("output.pdf");
    }
}
Imports IronPdf
Imports System

Class Program
    Shared Sub Main()
        Dim renderer = New ChromePdfRenderer()

        Dim html As String = "<html><body><h1>Hello World</h1></body></html>"

        Dim pdf = renderer.RenderHtmlAsPdf(html)

        pdf.SaveAs("output.pdf")
    End Sub
End Class
$vbLabelText   $csharpLabel

PDFreactor 使用一個設定物件,HTML 內容被指定給 Document 屬性,然後傳給 Convert() 方法,該方法會傳回一個結果物件。 PDF 位元組透過 result.Document 存取,並必須使用 File.WriteAllBytes() 寫入磁碟。

IronPDF 的ChromePdfRenderer使用 RenderHtmlAsPdf() 直接接受 HTML 並返回一個具有 SaveAs() 方法的PDF 文件物件。 此模式消除了配置物件儀式,並提供更直覺的 API。 如需 HTML 至IronPDF轉換的詳細指引,請參閱 HTML 至 PDF 教學

URL 至 PDF 轉換

將網頁轉換為 PDF 顯示出類似的模式差異。

PDFreactor URL-to-PDF 方法:

// NuGet: Install-Package PDFreactor.Native.Windows.x64
using RealObjects.PDFreactor;
using System.IO;

class Program
{
    static void Main()
    {
       PDFreactorpdfReactor = new PDFreactor();

        Configuration config = new Configuration();
        config.Document = "https://www.example.com";

        Result result = pdfReactor.Convert(config);

        File.WriteAllBytes("webpage.pdf", result.Document);
    }
}
// NuGet: Install-Package PDFreactor.Native.Windows.x64
using RealObjects.PDFreactor;
using System.IO;

class Program
{
    static void Main()
    {
       PDFreactorpdfReactor = new PDFreactor();

        Configuration config = new Configuration();
        config.Document = "https://www.example.com";

        Result result = pdfReactor.Convert(config);

        File.WriteAllBytes("webpage.pdf", result.Document);
    }
}
Imports RealObjects.PDFreactor
Imports System.IO

Class Program
    Shared Sub Main()
        Dim pdfReactor As New PDFreactor()

        Dim config As New Configuration()
        config.Document = "https://www.example.com"

        Dim result As Result = pdfReactor.Convert(config)

        File.WriteAllBytes("webpage.pdf", result.Document)
    End Sub
End Class
$vbLabelText   $csharpLabel

IronPDF URL-to-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("webpage.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("webpage.pdf");
    }
}
Imports IronPdf
Imports System

Class Program
    Shared Sub Main()
        Dim renderer = New ChromePdfRenderer()

        Dim pdf = renderer.RenderUrlAsPdf("https://www.example.com")

        pdf.SaveAs("webpage.pdf")
    End Sub
End Class
$vbLabelText   $csharpLabel

PDFreactor 對於 HTML 字串和 URL 都使用相同的 Configuration.Document 屬性 - 函式庫會自動決定內容類型。IronPDF提供了一個專用的 RenderUrlAsPdf() 方法,可明確指出正在執行的作業,讓程式碼更具自我文件化的特性。 瞭解更多關於 URL 轉換為 PDF 的資訊,請參閱IronPDF文件。

頁首與頁尾。

新增的頁首和頁尾揭示了兩個函式庫之間根本不同的方法。

PDFreactor 頁首和頁尾 (CSS 分頁媒體):

// NuGet: Install-Package PDFreactor.Native.Windows.x64
using RealObjects.PDFreactor;
using System.IO;

class Program
{
    static void Main()
    {
       PDFreactorpdfReactor = new PDFreactor();

        string html = "<html><body><h1>Document with Headers</h1><p>Content here</p></body></html>";

        Configuration config = new Configuration();
        config.Document = html;
        config.AddUserStyleSheet("@page { @top-center { content: 'Header Text'; } @bottom-center { content: 'Page ' counter(page); } }");

        Result result = pdfReactor.Convert(config);

        File.WriteAllBytes("document.pdf", result.Document);
    }
}
// NuGet: Install-Package PDFreactor.Native.Windows.x64
using RealObjects.PDFreactor;
using System.IO;

class Program
{
    static void Main()
    {
       PDFreactorpdfReactor = new PDFreactor();

        string html = "<html><body><h1>Document with Headers</h1><p>Content here</p></body></html>";

        Configuration config = new Configuration();
        config.Document = html;
        config.AddUserStyleSheet("@page { @top-center { content: 'Header Text'; } @bottom-center { content: 'Page ' counter(page); } }");

        Result result = pdfReactor.Convert(config);

        File.WriteAllBytes("document.pdf", result.Document);
    }
}
Imports RealObjects.PDFreactor
Imports System.IO

Module Program
    Sub Main()
        Dim pdfReactor As New PDFreactor()

        Dim html As String = "<html><body><h1>Document with Headers</h1><p>Content here</p></body></html>"

        Dim config As New Configuration()
        config.Document = html
        config.AddUserStyleSheet("@page { @top-center { content: 'Header Text'; } @bottom-center { content: 'Page ' counter(page); } }")

        Dim result As Result = pdfReactor.Convert(config)

        File.WriteAllBytes("document.pdf", result.Document)
    End Sub
End Module
$vbLabelText   $csharpLabel

IronPDF 標頭和頁腳(基於 API):

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

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();

        renderer.RenderingOptions.TextHeader = new TextHeaderFooter()
        {
            CenterText = "Header Text"
        };

        renderer.RenderingOptions.TextFooter = new TextHeaderFooter()
        {
            CenterText = "Page {page}"
        };

        string html = "<html><body><h1>Document with Headers</h1><p>Content here</p></body></html>";

        var pdf = renderer.RenderHtmlAsPdf(html);

        pdf.SaveAs("document.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;
using System;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();

        renderer.RenderingOptions.TextHeader = new TextHeaderFooter()
        {
            CenterText = "Header Text"
        };

        renderer.RenderingOptions.TextFooter = new TextHeaderFooter()
        {
            CenterText = "Page {page}"
        };

        string html = "<html><body><h1>Document with Headers</h1><p>Content here</p></body></html>";

        var pdf = renderer.RenderHtmlAsPdf(html);

        pdf.SaveAs("document.pdf");
    }
}
Imports IronPdf
Imports IronPdf.Rendering
Imports System

Module Program
    Sub Main()
        Dim renderer As New ChromePdfRenderer()

        renderer.RenderingOptions.TextHeader = New TextHeaderFooter() With {
            .CenterText = "Header Text"
        }

        renderer.RenderingOptions.TextFooter = New TextHeaderFooter() With {
            .CenterText = "Page {page}"
        }

        Dim html As String = "<html><body><h1>Document with Headers</h1><p>Content here</p></body></html>"

        Dim pdf = renderer.RenderHtmlAsPdf(html)

        pdf.SaveAs("document.pdf")
    End Sub
End Module
$vbLabelText   $csharpLabel

PDFreactor 使用 CSS 分頁媒體語法,包含 @page 規則和 @top-center/@bottom-center 區域。 counter(page) 函式提供頁數。 此方法利用 CSS 標準,但需要 CSS 知識以及透過 AddUserStyleSheet() 進行以字串為基礎的設定。

IronPdf 使用專用的 API,其 TextHeaderFooter 物件指定給 RenderingOptions{page} 占位符提供頁數。 此方法可提供 IntelliSense 支援、編譯時檢查以及更易發現的 API。 有關全面的標頭/頁尾實作,請參閱 標頭與頁尾文件

API 對應參考。

對於評估PDFreactor移轉至IronPDF的團隊而言,瞭解 API 對應有助於估算開發工作。

核心類別

PDFreactorIronPDF
PDFreactorChromePdfRenderer
設定ChromePdfRenderOptions
結果PDF 文件
config.文件RenderHtmlAsPdf(html)
result.Document (byte[])pdf.BinaryData

設定屬性

PDFreactor 組態IronPdf RenderingOptions
config.Document = htmlrenderer.RenderHtmlAsPdf(html)
config.Document = urlrenderer.RenderUrlAsPdf(url)
config.PageFormat = PageFormat.A4RenderingOptions.PaperSize=PdfPaperSize.A4渲染選項。
config.PageOrientationRenderingOptions.PaperOrientation
config.PageMarginsRenderingOptions.MarginTop/Bottom/Left/Right渲染選項。
config.EnableJavaScript=trueRenderingOptions.EnableJavaScript=true
config.AddUserStyleSheet(css)在 HTML 中嵌入 CSS
config.Titlepdf.MetaData.Title
config.Encryptionpdf.SecuritySettings

PDFreactor無法提供的功能

IronPdf 特點說明
PdfDocument.Merge()結合多個 PDF
pdf.ApplyWatermark()加入水印
pdf.ExtractAllText()擷取文字內容
pdf.CopyPages(start, end)擷取特定頁面
pdf.SecuritySettings密碼保護與加密
pdf.Sign(證書)數位簽名
pdf.Form.GetFieldByName(name).Value表格填寫

PDFreactor 只專注於轉換,而IronPDF則提供完整的 PDF 生命週期管理。 有關 PDF 操作功能,請參閱 合併與分割 PDF 指南

Java 的依賴性問題

PDFreactor 基於 Java 的架構在 .NET 環境中產生了重大的挑戰:

-需要 Java 執行時間環境:必須在所有伺服器上安裝和維護 JRE/JDK -伺服器架構:以獨立服務運行,需要呼叫 REST API 服務 -複雜部署:需要在 CI/CD 管道中管理兩種執行時間環境(Java + .NET) -網路延遲:每次 PDF 轉換都需要與伺服器進行 HTTP 往返通訊。 -獨立基礎設施:額外的伺服器用於監控、擴展和維護 -許可證複雜性:每個伺服器的許可證都與 Java 服務實例綁定。 -營運開銷:需要維護、監控和更新兩個運行時環境

IronPDF 透過以原生 .NET 函式庫的方式在程序中執行,消除了這些挑戰。 無需安裝 Java、無需伺服器設定、無需網路延遲 - 只要參考 NuGet 套件即可。

功能比較摘要

功能/外觀PDFreactorIronPDF
原生 .NET 函式庫無(基於 Java)
跨平台能力是(依賴 Java)是(捆綁 Chromium)
CSS 支援進階支援 CSS3、CSS Paged Media透過 Chromium 全面掌握 HTML5/CSS3
部署複雜性由於 Java 較為複雜簡單,直接與 .NET 整合
PDF 操作功能基本 (僅限世代)廣泛(合併、分割、編輯、註解)
授權模式商業的商業的
主要使用個案高保真、複雜的文件在 .NET 應用程式中廣泛使用、易於使用
頁首/頁腳CSS 分頁媒體 (@page 規則)以 API 為基礎 (TextHeaderFooter 物件)
JavaScript 執行支援支援 (Chromium 引擎)

僅靠PDFreactor無法實現需要新增浮水印、PDF 合併、文字擷取或表單填寫等功能的應用。

CSS 分頁媒體 vs 基於 API 的方法

PDFreactor 的強項在於 CSS 分頁媒體支援 - 使用標準 CSS 規則如 @page, @top-center, 和 counter(page) 來進行文件格式設定。 此方法可讓擁有強大 CSS 專業知識的團隊受惠。

IronPdf 使用基於 API 的方法,並提供專用物件,如 TextHeaderFooterHtmlHeaderFooter 等。 這提供了

  • 支援 IntelliSense 以提高發現能力
  • 編譯時間類型檢查
  • 無需維護以字串為基礎的 CSS
  • 更輕鬆的除錯與測試

團隊必須評估是否存在CSS 分頁媒體專業知識,或是基於 API 的配置是否更可取。

當團隊考慮從PDFreactor轉移到IronPDF時

有幾個因素驅使團隊評估 IronPdf 作為PDFreactor的替代品:

部署簡化:PDFreactor需要 Java 執行時間安裝、伺服器設定和 REST API 整合。IronPDF以單一 NuGet 套件的形式部署,無外部依賴。

基礎設施精簡:PDFreactor需要單獨的伺服器基礎架構來託管 Java 服務。IronPDF以進程內方式運行,無需額外的伺服器進行監控和維護。

原生 .NET 整合:PDFreactor的 Java 架構在 .NET 環境中造成了整合障礙。IronPDF以熟悉的模式提供了原生的 .NET API。

PDF 處理需求:PDFreactor專注於轉換。 需要進行文件操作(合併、分割、水印)的應用程式需要IronPDF的擴充功能。

CI/CD 簡化:在 .NET CI/CD 管道中管理 Java 依賴項會增加複雜性。IronPDF簡化了標準 NuGet 還原的管道。

降低延遲:PDFreactor的網路往返會為每次轉換增加延遲。IronPDF的流程內架構可消除網路開銷。

安裝比較

PDFreactor 安裝:

Install-Package PDFreactor.Native.Windows.x64
Install-Package PDFreactor.Native.Windows.x64
SHELL

Plus Java runtime 安裝與伺服器設定。

安裝 IronPdf:

Install-Package IronPdf
Install-Package IronPdf
SHELL

IronPdf 需要配置許可金鑰:

IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
$vbLabelText   $csharpLabel

IronPDF 的首次運行會下載 Chromium 演算引擎 (~150MB 一次性)。 對於 Linux 部署,需要額外的系統依賴。 本庫支援 .NET Framework、.NET Core、.NET 5+,並向前相容於 .NET 10 和 C# 14。

做出決定。

PDFreactor 和IronPDF之間的選擇取決於您的專案需求和現有的基礎架構:

如果滿足以下條件,請考慮使用 PDFreactor:您的專案需要高保真渲染和廣泛的 CSS 分頁媒體支持,您的團隊擁有強大的 CSS 專業知識,您可以處理 Java 依賴項,並且僅轉換功能就足夠了。

如果您符合以下條件,請考慮使用 IronPDF:您正在 .NET 環境中進行開發並希望實現無縫整合;您希望消除 Java 依賴項和伺服器基礎架構;您需要對 PDF 進行轉換以外的操作;您喜歡基於 API 的配置而不是 CSS 字串;或者您希望簡化部署和 CI/CD 管道。

對於大多數現代 .NET 應用程式而言,尤其是那些優先考量部署簡單性、本機整合以及擴充 PDF 功能的應用程式,IronPDF 比PDFreactor基於 Java 的伺服器方式提供了顯著的架構優勢。

開始使用 IronPdf

要評估IronPDF是否符合您的 PDF 生成需求:

1.透過 NuGet 安裝:Install-Package IronPdf。 2.檢閱 入門文件。 3.探索HTML轉PDF教學的轉換模式 4.檢查 API 參考,以取得完整的方法說明文件

IronPDF教學提供全面的範例,涵蓋從基本轉換到進階 PDF 操作的常見情境。