IRONSOFTWAREHOME
影片

如何使用 C# 導出 PDF UA 格式文件

Curtis Chau
Curtis Chau
Updated: 2026年7月19日

HiQPdf 是由HiQPdfSoftware 發佈的商業 HTML-to-PDF 程式庫(目前 HiQPdf 版本 18.0.2,發佈於 nuget.org,2026年2月)。 開發者評估替代方案的常見原因:

  1. 限制性的免費版本: HiQPdf.Free 將輸出限制在每個文件3頁——這對於評估有用,但對於需要完整文件生成的生產工作負載來說不適合。

  2. 經典迴圈中的 WebKit: 經典的 HiQPdf 套件使用較舊的基於 WebKit 的引擎,可能在處理現代 JavaScript 框架時遇到困難。HiQPdf確實提供一個基於 Chromium 的變體 (HiQPdf.NG / HiQPdf.Chromium.Windows, 以及一個 Linux 構建),但大多數現有程式碼針對經典引擎。

  3. .NET 支援分布在不同的套件中: .NET Framework, .NET Core 和 .NET Standard 2.0 都受到支援,但必須在不同的 NuGet ID (HiQPdf, HiQPdf_NetCore, HiQPdf.NG, HiQPdf.Chromium.Windows, HiQPdf_x64) 中選擇。

  4. 分散化的套件: 針對不同平台的多個 NuGet ID (HiQPdf, HiQPdf.Free, HiQPdf_NetCore, HiQPdf.NG, HiQPdf.Chromium.Windows) 增加了依賴管理的複雜性。

  5. 冗長的配置: 需要通過 Document, Header, Footer 屬性鏈進行設置,而不是流暢的渲染選項 API。

  6. 每位開發者的授權成本累計: $245 Startup / $495 Developer / $795 Team / $1,095 Enterprise(永久授權,第一年包含更新)。

###HiQPdf對比 IronPDF

方面HiQPdfIronPDF
渲染引擎WebKit (經典 HiQPdf) 或 Chromium (HiQPdf.NG / HiQPdf.Chromium.Windows)現代 Chromium
免費層級HiQPdf.Free 3頁限制30天完整試用
支持現代 JS經典有限; NG/Chromium 上現代完整(React、Angular、Vue)
.NET Core/5+ 支援支援,但分布在多個 NuGet 套件單一整合套件
API設計屬性鏈流暢的渲染選項
CSS3 支援經典部分支持; NG 上完全支持全面支持
文件產品線之間的分散全面
NuGet 套件多種變體單個包

IronPDF 文件支持當前 .NET 版本(.NET Framework 4.6.2+,.NET 6,7,8,9),使用現代 Chromium 渲染引擎。


遷移複雜性評估

功能的預估努力程度

功能遷移複雜性
HTML轉PDF非常低
URL到PDF非常低
合併PDF
頁眉/頁腳
頁面大小/邊距
觸發模式/延遲

範式轉變

這次HiQPdf遷移中的根本變化是從 屬性鏈配置流暢的渲染選項:

HiQPdf:   converter.Document.Header.Height = 50;
          converter.Document.Header.Add(new HtmlToPdfVariableElement(...));
          
IronPDF:  renderer.RenderingOptions.TextHeader = new TextHeaderFooter() { ... };
Text

開始之前

前提條件

  1. .NET版本: IronPDF支援 .NET Framework 4.6.2+ 和 .NET Core 3.1+ / .NET 5+
  2. **授權金鑰:**從ironpdf.com取得您的IronPDF授權金鑰
  3. 移除 HiQPdf: 計劃移除所有HiQPdfNuGet 套件變體

識別所有HiQPdf使用情形

# FindHiQPdfnamespace usage
grep -r "using HiQPdf\|HtmlToPdf\|PdfDocument" --include="*.cs" .

# Find header/footer usage
grep -r "\.Header\.\|\.Footer\.\|HtmlToPdfVariableElement" --include="*.cs" .

# Find placeholder syntax
grep -r "CrtPage\|PageCount" --include="*.cs" .

# Find NuGet references
grep -r "HiQPdf" --include="*.csproj" .
SHELL

NuGet包變更

# Remove allHiQPdfvariants
dotnet remove package HiQPdf
dotnet remove package HiQPdf.Free
dotnet remove package HiQPdf_NetCore
dotnet remove package HiQPdf_x64
dotnet remove package HiQPdf.NG
dotnet remove package HiQPdf.Chromium.Windows

# InstallIronPDF(single package for all platforms)
dotnet add package IronPdf
SHELL

快速開始遷移

步驟1:更新授權配置

之前(HiQPdf):

HtmlToPdf converter = new HtmlToPdf();
converter.SerialNumber = "HIQPDF-SERIAL-NUMBER";

之後(IronPDF):

// Set globally at application startup
IronPdf.License.LicenseKey = "YOUR-IRONPDF-LICENSE-KEY";

步驟2:更新名稱空間的引入

// Before (HiQPdf)
using HiQPdf;

// After (IronPDF)
using IronPdf;
using IronPdf.Rendering;

完整API參考

主要類映射

HiQPdf 類IronPDF 類
HtmlToPdfChromePdfRenderer
PdfDocumentPdfDocument
HtmlToPdfVariableElementTextHeaderFooterHtmlHeaderFooter

轉換方法映射

HiQPdf 方法IronPDF方法
ConvertHtmlToMemory(html, baseUrl)RenderHtmlAsPdf(html)
ConvertUrlToMemory(url)RenderUrlAsPdf(url)
File.WriteAllBytes(path, bytes)pdf.SaveAs(path)

PDF 文件方法映射

HiQPdf 方法IronPDF方法
PdfDocument.FromFile(path)PdfDocument.FromFile(path)
document1.AddDocument(document2)PdfDocument.Merge(pdf1, pdf2)
document.WriteToFile(path)pdf.SaveAs(path)

頁眉/頁腳佔位符映射

HiQPdf 佔位符IronPDF 佔位符說明
{CrtPage}{page}當前頁碼
{PageCount}{total-pages}總頁數

程式碼遷移範例

範例1:HTML轉PDF轉換

之前(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);
    }
}

之後(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");
    }
}

HiQPdf 方法需要建立 HtmlToPdf 實例,調用 ConvertUrlToMemory()ConvertHtmlToMemory() 獲取字節陣列,然後手動將字節寫入文件。IronPDF 的 ChromePdfRenderer 返回直接具有 PdfDocument 方法的 SaveAs() 物件,省去了手動文件寫入步驟。現代 Chromium 引擎還為複雜的 HTML/CSS/JavaScript 內容提供了更好的渲染。 查看HTML到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");
    }
}

之後(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");
    }
}

HiQPdf 方法需要從文件中載入文件,使用 PdfDocument.FromFile() 調用第一個文件來追加第二個,然後使用 WriteToFile() 來保存。IronPDF提供了一個更乾淨的靜態 PdfDocument.Merge() 方法,直接接受多個 PdfDocument 物件——不需要中間文件操作。 了解更多合併和拆分PDF的資訊。

範例 3:具有頁碼的 PDF 頁眉和頁腳

之前(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);
    }
}

之後(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");
    }
}

HiQPdf 方法需要設置 Document.Header.Height,建立 HtmlToPdfVariableElement 物件,並調用頁眉/頁腳部分的 Add()。 頁碼佔位符使用 {CrtPage}{PageCount} 語法。IronPDF提供了一個更乾淨的 TextHeaderFooter 配置,包括 CenterText 屬性和不同的佔位符語法:{page}{total-pages}。 請參閱 頁眉和頁腳文件 以了解更多選項,包括基於 HTML 的頁眉。


關鍵遷移注意事項

佔位符語法變更

對於有頁碼的文件,最重要的變更是佔位符語法:

//HiQPdfplaceholders
"Page {CrtPage} of {PageCount}"

//IronPDFplaceholders
"Page {page} of {total-pages}"

完全的佔位符映射:

  • {CrtPage}{page}
  • {PageCount}{total-pages}

合併方法差異

HiQPdf 直接在第一個文件中進行修改:

// HiQPdf: Modifies document1
document1.AddDocument(document2);
document1.WriteToFile("merged.pdf");

IronPDF 返回一個新的合併文件:

// IronPDF: Returns new document
var merged = PdfDocument.Merge(pdf1, pdf2);
merged.SaveAs("merged.pdf");

無 3 頁限制

HiQPdf 的免費版本將輸出限制在 3 頁並附加水印。IronPDF在試用期間生成完整文件,沒有人工限制。

重用ChromePdfRenderer

與HiQPdf可能需要為每次轉換建立新 HtmlToPdf 實例不同,IronPDF 的 ChromePdfRenderer 應該重複使用:

// IronPDF: Create once, reuse
var renderer = new ChromePdfRenderer();
var pdf1 = renderer.RenderHtmlAsPdf(html1);
var pdf2 = renderer.RenderHtmlAsPdf(html2);

故障排除

問題 1:找不到 HtmlToPdf

問題: HtmlToPdf 類在IronPDF中不存在。

解決方案: 替換為 ChromePdfRenderer

// HiQPdf
HtmlToPdf htmlToPdfConverter = new HtmlToPdf();

// IronPDF
var renderer = new ChromePdfRenderer();

問題 2:找不到 ConvertHtmlToMemory

問題: ConvertHtmlToMemory() 方法不存在。

解決方案: 使用 RenderHtmlAsPdf()

// HiQPdf
byte[] pdfBytes = converter.ConvertHtmlToMemory(html, "");

// IronPDF
var pdf = renderer.RenderHtmlAsPdf(html);
byte[] pdfBytes = pdf.BinaryData;

問題 3:頁碼佔位符無法正常運作

問題: {CrtPage}{PageCount} 以字面形式出現在輸出中。

解決方案: 更新為IronPDF佔位符語法:

//HiQPdfsyntax (won't work)
"Page {CrtPage} of {PageCount}"

//IronPDFsyntax
"Page {page} of {total-pages}"

問題 4:找不到 HtmlToPdfVariableElement

問題: HtmlToPdfVariableElement 類不存在。

解決方案: 使用 TextHeaderFooterHtmlHeaderFooter

// HiQPdf
HtmlToPdfVariableElement headerHtml = new HtmlToPdfVariableElement("<div>Header</div>", "");
converter.Document.Header.Add(headerHtml);

// IronPDF
renderer.RenderingOptions.TextHeader = new TextHeaderFooter()
{
    CenterText = "Header",
    FontSize = 12
};

遷移檢查表

遷移前

  • 清點程式碼庫中所有HiQPdfAPI 調用
  • 記錄當前頁面尺寸、邊距和設置
  • 確認頁眉/頁腳配置和佔位符
  • 獲得IronPDF授權金鑰
  • 在開發環境中測試 IronPDF

程式碼遷移

  • 移除所有HiQPdfNuGet 套件(所有變體)
  • 安裝IronPDFNuGet 套件:dotnet add package IronPdf
  • 更新命名空間導入
  • 替換 HtmlToPdfChromePdfRenderer
  • 轉換 ConvertHtmlToMemory()RenderHtmlAsPdf()
  • 轉換 ConvertUrlToMemory()RenderUrlAsPdf()
  • 更新頁眉/頁腳佔位符 ({CrtPage}{page}, {PageCount}{total-pages})
  • 替換 HtmlToPdfVariableElementTextHeaderFooter
  • 更新合併操作 (AddDocumentPdfDocument.Merge)
  • 在啟動時新增授權金鑰初始化

測試

  • 測試 HTML 到 PDF 的轉換
  • 測試 URL 到 PDF 的轉換
  • 驗證頁眉/頁腳的渲染
  • 驗證頁碼佔位符
  • 測試PDF合併
  • 測試 JavaScript 重度頁面(現在支持 Chromium)

遷移後

  • 從配置中移除HiQPdf序列號
  • 更新文件
  • 監控任何渲染差異

請注意: HiQPdf 是其各自所有者的註冊商標。 本網站與HiQPdfSoftware 無關,未受到其贊助或支持。 所有產品名稱、標誌和品牌均為其各自所有者的財產。 比較僅供參考,反映撰寫時公開可用的資訊。
Curtis Chau
技術作家

Curtis Chau擁有Carleton大學的電腦科學學士學位,專精於前端開發,擁有Node.js、TypeScript、JavaScript和React的專業知識。Curtis熱衷於建立直觀且美觀的使用者介面,喜愛使用現代框架並建立結構良好、視覺吸引力的手冊。

...
閱讀更多

相關文章

Key in blue circle

立即免費取得 30 天試用金鑰

Your trial license will be sent to your email address

無任何限制。100% 解鎖。無需信用卡。

bullet_checked無需信用卡或建立帳號無任何限制。100% 解鎖。無需信用卡。
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
預訂您的免費現場演示
Booking Badge

受到全球數百萬工程師的信任

Iron Software的客戶標誌
獲取您的無義務諮詢
填寫以下表格或電子郵件sales@ironsoftware.com
您的詳細資訊將始終保密
受到全球數百萬工程師的信任
Iron Software的客戶標誌
立即獲取您的30天試用金鑰
無需信用卡或帳戶建立