比較

HiQPdf vs IronPDF:技術比較指南

HiQPdfvs IronPDF:渲染引擎、API 設計與現代 .NET 相容性。

當 .NET 開發人員評估 HTML-to-PDF 解決方案時,HiQPdf 成為基於 WebKit 渲染的商業函式庫。 雖然HiQPdf提供 HTML5/CSS3 支援,但其較舊的 WebKit 引擎在處理現代 JavaScript 架構時可能會有困難,而且免費版本強加了 3 頁的限制與侵入性的水印。IronPDF提供了一種與眾不同的方法:基於 Chromium 的現代化渲染引擎,具有完整的 JavaScript 支援,以及跨越所有 .NET 平台的統一套件。

本比較針對技術上相關的層面檢視這兩個函式庫,以協助專業開發人員和架構人員針對他們的 .NET PDF 需求做出明智的決定。

瞭解 HiQPdf

HiQPdf 是一個商用 HTML-to-PDF 函式庫,使用基於 WebKit 的渲染引擎。該函式庫使用<編碼>HtmlToPdf</編碼作為其主要的轉換器類別,其方法如 ConvertHtmlToMemory()ConvertUrlToMemory() 皆會傳回原始的 byte[] 資料。 配置是透過 Document 物件上的屬性鏈來處理,包括 Document.Header, Document.Footer, 和 Document.PageSize.

HiQPdf 的免費版本有一個很大的限制 - PDF 輸出最多只能輸出 3 頁,而且還會有侵入性的水印。 這使得在評估過程中很難對較大的文件進行徹底的測試。 該函式庫針對不同平台使用多個 NuGet 套件變體 (HiQPdf、HiQPdf.Free、HiQPdf.NetCore、HiQPdf.NetCore.x64、HiQPdf.Client),且文件未明確闡明對 .NET Core 或 .NET 5+ 的支援。

對於頁首和頁尾,HiQPdf 使用<編碼>HtmlToPdfVariableElement</編碼物件加入 Document.HeaderDocument.Footer 集合。 頁數占位符使用語法<編碼>{CrtPage}</編碼表示目前頁面,{PageCount} 表示總頁數。

了解 IronPDF

IronPDF 是一個 .NET PDF 函式庫,使用現代化的 Chromium 渲染引擎,提供對 HTML5、CSS3 和 JavaScript 框架(包括 React、Angular 和 Vue)的完整支援。 該函式庫使用<代碼>ChromePdfRenderer</代碼作為其主要的渲染類別,其方法如 RenderHtmlAsPdf()RenderUrlAsPdf() 會返回<編碼>PDF 文件</編碼物件。

IronPDF 為所有平台提供單一統一的 NuGet 套件,並記錄了 .NET 6、7、8、9 和 10 的相容性。配置直接在渲染器上使用渲染選項屬性。 頁首和頁尾可以使用 TextHeaderFooterCenterTextFontSize 等屬性。 頁數占位符使用{page}{總頁數}語法。

渲染引擎與相容性比較

這些函式庫的基本差異在於它們的呈現引擎和平台支援。

範疇HiQPdfIronPDF
渲染引擎基於 WebKit (較舊)現代 Chromium
免費層級3 頁限制 + 水印30 天完整試用
現代 JS 支援限額完整 (React、Angular、Vue)
.NET Core/5+ 支援需要多個套件單一統一套件
API 設計複雜的屬性鏈乾淨流暢的 API
CSS3 支援部分的全面支援
說明文件零碎全面性
NuGet套件多種變體單一套件

HiQPdf 基於 WebKit 的引擎是較舊的技術,在使用現代 JavaScript 框架和複雜 HTML 結構時可能會遇到挑戰。 IronPdf 的 Chrome 引擎可提供與 Google Chrome 相同的渲染品質,確保現代網頁內容的精確轉換。

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

HTML 和 URL 到 PDF 的轉換

最基本的操作展示了 API 設計上的差異。

HiQPdf:

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

class Program
{
    static void Main()
    {
        HtmlToPdf htmlToPdfConverter = new HtmlToPdf();
        byte[] pdfBuffer = htmlToPdfConverter.ConvertUrlToMemory("https://example.com");
        System.IO.File.WriteAllBytes("output.pdf", pdfBuffer);

        // Convert HTML string
        string html = "<h1>Hello World</h1><p>This is a PDF document.</p>";
        byte[] pdfFromHtml = htmlToPdfConverter.ConvertHtmlToMemory(html, "");
        System.IO.File.WriteAllBytes("fromhtml.pdf", pdfFromHtml);
    }
}
// NuGet: Install-Package HiQPdf
using HiQPdf;
using System;

class Program
{
    static void Main()
    {
        HtmlToPdf htmlToPdfConverter = new HtmlToPdf();
        byte[] pdfBuffer = htmlToPdfConverter.ConvertUrlToMemory("https://example.com");
        System.IO.File.WriteAllBytes("output.pdf", pdfBuffer);

        // Convert HTML string
        string html = "<h1>Hello World</h1><p>This is a PDF document.</p>";
        byte[] pdfFromHtml = htmlToPdfConverter.ConvertHtmlToMemory(html, "");
        System.IO.File.WriteAllBytes("fromhtml.pdf", pdfFromHtml);
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$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://example.com");
        pdf.SaveAs("output.pdf");

        // Convert HTML string
        string html = "<h1>Hello World</h1><p>This is a PDF document.</p>";
        var pdfFromHtml = renderer.RenderHtmlAsPdf(html);
        pdfFromHtml.SaveAs("fromhtml.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;

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

        // Convert HTML string
        string html = "<h1>Hello World</h1><p>This is a PDF document.</p>";
        var pdfFromHtml = renderer.RenderHtmlAsPdf(html);
        pdfFromHtml.SaveAs("fromhtml.pdf");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

HiQPdf 建立一個<編碼>HtmlToPdf</編碼轉換器,呼叫 ConvertUrlToMemory()ConvertHtmlToMemory() 來取得原始的 byte[] 資料,然後使用 File.WriteAllBytes() 來手動寫入磁碟。 ConvertHtmlToMemory() 方法需要基本 URL 的第二個參數(如果不需要,則為空字串)。

IronPDF 建立一個<代碼>ChromePdfRenderer</代碼,呼叫 RenderUrlAsPdf()RenderHtmlAsPdf() 得到一個<編碼>PDF 文件</編碼物件,然後用 SaveAs() 直接儲存。 API 在物件導向的文件處理上更為簡潔。

如需進階的 HTML 呈現選項,請探索 HTML 至 PDF 轉換指南

合併多個 PDF 文件

PDF 合併展示了不同的文件操作方法。

HiQPdf:

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

class Program
{
    static void Main()
    {
        // Create first PDF
        HtmlToPdf converter1 = new HtmlToPdf();
        byte[] pdf1 = converter1.ConvertHtmlToMemory("<h1>First Document</h1>", "");
        System.IO.File.WriteAllBytes("doc1.pdf", pdf1);

        // Create second PDF
        HtmlToPdf converter2 = new HtmlToPdf();
        byte[] pdf2 = converter2.ConvertHtmlToMemory("<h1>Second Document</h1>", "");
        System.IO.File.WriteAllBytes("doc2.pdf", pdf2);

        // Merge PDFs
        PdfDocument document1 = PdfDocument.FromFile("doc1.pdf");
        PdfDocument document2 = PdfDocument.FromFile("doc2.pdf");
        document1.AddDocument(document2);
        document1.WriteToFile("merged.pdf");
    }
}
// NuGet: Install-Package HiQPdf
using HiQPdf;
using System;

class Program
{
    static void Main()
    {
        // Create first PDF
        HtmlToPdf converter1 = new HtmlToPdf();
        byte[] pdf1 = converter1.ConvertHtmlToMemory("<h1>First Document</h1>", "");
        System.IO.File.WriteAllBytes("doc1.pdf", pdf1);

        // Create second PDF
        HtmlToPdf converter2 = new HtmlToPdf();
        byte[] pdf2 = converter2.ConvertHtmlToMemory("<h1>Second Document</h1>", "");
        System.IO.File.WriteAllBytes("doc2.pdf", pdf2);

        // Merge PDFs
        PdfDocument document1 = PdfDocument.FromFile("doc1.pdf");
        PdfDocument document2 = PdfDocument.FromFile("doc2.pdf");
        document1.AddDocument(document2);
        document1.WriteToFile("merged.pdf");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

IronPDF:

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

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

        // Create first PDF
        var pdf1 = renderer.RenderHtmlAsPdf("<h1>First Document</h1>");
        pdf1.SaveAs("doc1.pdf");

        // Create second PDF
        var pdf2 = renderer.RenderHtmlAsPdf("<h1>Second Document</h1>");
        pdf2.SaveAs("doc2.pdf");

        // Merge PDFs
        var merged = PdfDocument.Merge(pdf1, pdf2);
        merged.SaveAs("merged.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;

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

        // Create first PDF
        var pdf1 = renderer.RenderHtmlAsPdf("<h1>First Document</h1>");
        pdf1.SaveAs("doc1.pdf");

        // Create second PDF
        var pdf2 = renderer.RenderHtmlAsPdf("<h1>Second Document</h1>");
        pdf2.SaveAs("doc2.pdf");

        // Merge PDFs
        var merged = PdfDocument.Merge(pdf1, pdf2);
        merged.SaveAs("merged.pdf");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

HiQPdf 需要先將 PDF 儲存到磁碟,使用 PdfDocument.FromFile() 載入它們,然後再使用 AddDocument() 將一個附加到另一個,最後再使用 WriteToFile() 儲存結果。 此處修改第一份文件。

IronPDF 可以使用靜態 PdfDocument.Merge() 方法直接在記憶體中合併文件,該方法會返回一個新的合併文件。 此方法較為乾淨,不需要中間檔案 I/O。

帶有頁碼的頁首和頁尾

頁首和頁尾配置顯示動態內容的不同方法。

HiQPdf:

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

class Program
{
    static void Main()
    {
        HtmlToPdf htmlToPdfConverter = new HtmlToPdf();

        // Add header
        htmlToPdfConverter.Document.Header.Height = 50;
        HtmlToPdfVariableElement headerHtml = new HtmlToPdfVariableElement("<div style='text-align:center'>Page Header</div>", "");
        htmlToPdfConverter.Document.Header.Add(headerHtml);

        // Add footer with page number
        htmlToPdfConverter.Document.Footer.Height = 50;
        HtmlToPdfVariableElement footerHtml = new HtmlToPdfVariableElement("<div style='text-align:center'>Page {CrtPage} of {PageCount}</div>", "");
        htmlToPdfConverter.Document.Footer.Add(footerHtml);

        byte[] pdfBuffer = htmlToPdfConverter.ConvertHtmlToMemory("<h1>Document with Headers and Footers</h1>", "");
        System.IO.File.WriteAllBytes("header-footer.pdf", pdfBuffer);
    }
}
// NuGet: Install-Package HiQPdf
using HiQPdf;
using System;

class Program
{
    static void Main()
    {
        HtmlToPdf htmlToPdfConverter = new HtmlToPdf();

        // Add header
        htmlToPdfConverter.Document.Header.Height = 50;
        HtmlToPdfVariableElement headerHtml = new HtmlToPdfVariableElement("<div style='text-align:center'>Page Header</div>", "");
        htmlToPdfConverter.Document.Header.Add(headerHtml);

        // Add footer with page number
        htmlToPdfConverter.Document.Footer.Height = 50;
        HtmlToPdfVariableElement footerHtml = new HtmlToPdfVariableElement("<div style='text-align:center'>Page {CrtPage} of {PageCount}</div>", "");
        htmlToPdfConverter.Document.Footer.Add(footerHtml);

        byte[] pdfBuffer = htmlToPdfConverter.ConvertHtmlToMemory("<h1>Document with Headers and Footers</h1>", "");
        System.IO.File.WriteAllBytes("header-footer.pdf", pdfBuffer);
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

IronPDF:

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

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

        // Configure header and footer
        renderer.RenderingOptions.TextHeader = new TextHeaderFooter()
        {
            CenterText = "Page Header",
            FontSize = 12
        };

        renderer.RenderingOptions.TextFooter = new TextHeaderFooter()
        {
            CenterText = "Page {page} of {total-pages}",
            FontSize = 10
        };

        var pdf = renderer.RenderHtmlAsPdf("<h1>Document with Headers and Footers</h1>");
        pdf.SaveAs("header-footer.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;
using System;

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

        // Configure header and footer
        renderer.RenderingOptions.TextHeader = new TextHeaderFooter()
        {
            CenterText = "Page Header",
            FontSize = 12
        };

        renderer.RenderingOptions.TextFooter = new TextHeaderFooter()
        {
            CenterText = "Page {page} of {total-pages}",
            FontSize = 10
        };

        var pdf = renderer.RenderHtmlAsPdf("<h1>Document with Headers and Footers</h1>");
        pdf.SaveAs("header-footer.pdf");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

HiQPdf 透過 Document.HeaderDocument.Footer 屬性來設定頁首及頁尾,設定 Height 及新增<編碼>HtmlToPdfVariableElement</編碼物件。 頁數占位符使用<編碼>{CrtPage}</編碼表示目前頁面,使用<編碼>{頁數}</編碼表示總頁數。

IronPdf 使用 RenderingOptions.TextHeaderRenderingOptions.TextFooterTextHeaderFooter 物件。 CenterTextFontSize 等屬性提供了直接的設定。 頁數占位符使用{page}{總頁數}

IronPDF 教程中了解更多關於頁首和頁尾配置的資訊。

API 對應參考。

對於評估HiQPdf遷移或比較功能的開發人員而言,此對應顯示等效的操作:

主類映射

HiQPdf 類別IronPdf 類別筆記
<編碼>HtmlToPdf</編碼<代碼>ChromePdfRenderer</代碼主要轉換器類別
<編碼>PDF 文件</編碼<編碼>PDF 文件</編碼相同的名稱,不同的命名空間
PdfPage<代碼>pdf.Pages[i]</代碼透過索引器存取
<代碼>PdfDocumentControl</代碼渲染選項配置
PdfHeader / PdfDocumentHeader<編碼>HtmlHeaderFooter</編碼標頭配置
PdfFooter / PdfDocumentFooter<編碼>HtmlHeaderFooter</編碼頁尾設定
<編碼>HtmlToPdfVariableElement</編碼<編碼>HtmlHeaderFooter.HtmlFragment</編碼標題/頁尾的 HTML

轉換方法映射

HiQPdf 方法IronPdf 方法筆記
ConvertHtmlToMemory(html,baseUrl)RenderHtmlAsPdf(html,baseUrl)返回 PdfDocument
<編碼>ConvertUrlToMemory(url)</編碼<代碼>RenderUrlAsPdf(url)</代碼返回 PdfDocument
ConvertHtmlToFile(html,baseUrl,path)RenderHtmlAsPdf(html).SaveAs(path)鏈接方法
ConvertUrlToFile(url,路徑)<代碼>RenderUrlAsPdf(url).SaveAs(path)</代碼鏈接方法

屬性對應

HiQPdf 特性IronPdf 特性筆記
瀏覽器寬度RenderingOptions.ViewPortWidth像素
瀏覽器高度RenderingOptions.ViewPortHeight像素
<編碼>Document.PageSize</編碼RenderingOptions.PaperSize使用枚舉
Document.PageOrientation<編碼>RenderingOptions.PaperOrientation</編碼肖像/風景
<編碼>Document.Margins.Top</編碼RenderingOptions.MarginTop以毫米為單位(不是點數)
Document.Margins.BottomRenderingOptions.MarginBottom在 mm
Document.Margins.LeftRenderingOptions.MarginLeft在 mm
Document.Margins.Right<編碼>RenderingOptions.MarginRight</編碼在 mm
Document.Header.Height<編碼>HtmlHeader.MaxHeight</編碼標題高度
Document.Footer.HeightHtmlFooter.MaxHeight頁尾高度
序列號IronPDF.License.LicenseKey全球設置

占位符語法對應

不同函式庫的頁首和頁尾占位符有所不同:

HiQPdfIronPDF
<編碼>{CrtPage}</編碼{page}
<編碼>{頁數}</編碼{總頁數}
<編碼>{CrtPageUri}</編碼<編碼>{url}</編碼
<編碼>{CrtPageTitle}</編碼<編碼>{html-title}</編碼

功能比較摘要

特點HiQPdfIronPDF
Chromium 渲染❌ (WebKit)
現代 JavaScript(React、Angular、Vue)⚠️ 有限公司
完全支援 CSS3⚠️ 部分
.NET 6/7/8/9/10 支援⚠️ 不清晰的文件
單一 NuGet 套件❌(多變體)
免費完整試用❌(3 頁限制 + 水印)✅(30 天)
HTML 至 PDF
URL 至 PDF
PDF 合併✅ (AddDocument)✅ (Merge)
頁首/頁尾✅ (HtmlToPdfVariableElement)✅ (TextHeaderFooter)

當團隊考慮從HiQPdf轉移到IronPDF時。

開發團隊評估從HiQPdf過渡到IronPDF有幾個原因:

限制性的免費版本:HiQPdf 的免費版本有 3 頁的限制,且有侵入性的水印,因此基本上無法用於生產,也很難進行全面評估。IronPDF提供 30 天的全功能試用版,無頁數限制。

較舊的 WebKit 引擎:HiQPdf 基於 WebKit 的渲染引擎在與 React、Angular 和 Vue 等現代 JavaScript 框架的溝通上有困難。 IronPdf 的 Chrome 引擎可提供與 Google Chrome 相同的渲染品質,確保複雜的現代網路內容能準確轉換。

未明確說明 .NET Core 支援:HiQPdf 文件並未明確說明 .NET Core 或 .NET 5+ 支援,且該函式庫需要針對不同平台使用獨立的 NuGet 套件。IronPDF提供單一統一的套件,以文件形式支援 .NET 6、7、8、9 和 10。

Fragmented NuGet Packages:HiQPdf 需要不同的套件變體 (HiQPdf、HiQPdf.Free、HiQPdf.NetCore、HiQPdf.NetCore.x64、HiQPdf.Client),以適用於不同的情境。 IronPdf 在所有平台上使用單一套件。

複雜的 API 設計:HiQPdf 需要透過Document.Header.HeightDocument.Footer.Add() 等屬性鏈進行冗長的設定。IronPDF流暢的 API 搭配渲染選項屬性,提供更簡潔的設定。

不同的占位符語法:HiQPdf 使用<編碼>{CrtPage}</編碼和<編碼>{頁數}</編碼占位符,而 IronPdf 使用{page}{總頁數}占位符。 遷移需要更新所有標題/頁腳模板。

優勢和考慮因素

HiQPdf的優勢

  • HTML5/CSS3 支援:提供 HTML5 和 CSS3 渲染功能
  • 已建立的圖書館:具有現有使用者基礎的商業函式庫

HiQPdf注意事項

  • WebKit 引擎:較舊的渲染技術,對現代 JavaScript 的支援有限
  • 3 頁限制:免費版受到極大限制
  • Fragmented Packages:適用於不同平台的多個 NuGet 套件
  • 不清楚的 .NET 支援:文件沒有明確說明現代 .NET 的相容性
  • 複雜的屬性鏈:透過巢狀屬性進行詳盡的配置
  • 以點為單位:使用點(每英吋 72 點)進行測量

IronPDF的優勢

  • Chromium 引擎:支援完整 JavaScript 的現代化呈現
  • 統一套件:適用於所有平台的單一 NuGet 套件
  • 完整試用版:30 天完整功能試用版
  • Modern .NET 支援:為 .NET 6、7、8、9、10 編寫文件
  • Clean API:流暢的渲染選項設定
  • 全面的資源:廣泛的教學文件

IronPDF注意事項

  • 商業授權:必須用於生產用途
  • 毫米單位:使用毫米而非點來表示邊距

結論

HiQPdf 和IronPDF代表了 .NET 應用程式中不同世代的 HTML-to-PDF 技術。HiQPdf基於 WebKit 的引擎提供基本的 HTML5/CSS3 支援,但在現代 JavaScript Framework 方面卻舉步維艱,而且提供的 .NET Core 相容性不清晰,有多個零散的套件。 免費版的 3 頁限制會大大限制評估。

IronPdf 提供了基於 Chromium 的現代化替代方案,對 React、Angular 和 Vue 應用程式提供完整的 JavaScript 支援。 單一統一的 NuGet 套件與文件化的 .NET 6/7/8/9/10 支援簡化了部署,簡潔的 API 設計降低了配置的複雜性。

由於組織要規劃 .NET 10、C# 14 以及到 2026 年的應用程式開發,因此在使用分散套件的舊式 WebKit 渲染與使用統一支援的現代 Chromium 渲染之間做出選擇,會對開發速度與輸出品質造成重大影響。 需要現代 JavaScript Framework 支援、清晰的 .NET 兼容性或簡化套件管理的團隊會發現IronPDFfor .NET 能有效滿足這些需求。

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