IRONSOFTWAREHOME
视频

如何在C#中导出PDF UA格式文档

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

HiQPdf是由HiQPdf Software发布的一个商业HTML到PDF库(目前在nuget.org上的HiQPdf版本为18.0.2,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/开发者$495/团队$795/企业$1,095(永久许可证,第一年包括更新)。

###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软件包中单一的统一软件包
应用程序接口设计属性链流畅的渲染选择
CSS3 支持在经典版上部分支持; 在NG上全面支持全面支持
文档在产品线之间分散综合性
NuGet 软件包多种变体单个软件包

IronPDF文档支持当前.NET版本(.NET Framework 4.6.2+,.NET 6,7,8,9)上的现代Chromium渲染引擎。


迁移复杂性评估

按功能估算的工作量

特征迁移复杂性
HTML 至 PDF极低
URL 至 PDF极低
合并 PDFlow
页眉/页脚语言
页面大小/页边距low
触发器模式/延迟low

范式转换

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";

After (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
HtmlToPdfVariableElementHtmlHeaderFooter

转换方法映射

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);
    }
}

After (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的方法需要创建一个ConvertHtmlToMemory()来获取字节数组,然后手动将字节写入文件。 IronPDF的PdfDocument对象,消除了手动文件写入步骤。现代的Chromium引擎也为复杂的HTML/CSS/JavaScript内容提供了更好的渲染。 有关其他渲染选项,请参阅 HTML to PDF 文档

示例 2:合并多个 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");
    }
}

After (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的方法需要使用WriteToFile()保存。 IronPDF提供了一个更简洁的静态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);
    }
}

After (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的方法需要设置Add()。 页码占位符使用{PageCount}语法。 IronPDF提供了一个更清晰的{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中每次转换可能创建新的ChromePdfRenderer应被重复使用:

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

故障排除

问题 1:HtmlToPdf 未找到

**问题:**IronPDF中不存在HtmlToPdf类。

**解决方案:**用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类不存在。

**解决方案:**使用HtmlHeaderFooter

// 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 包(所有变体)
  • 安装IronPDF NuGet包:dotnet add package IronPdf
  • 更新命名空间导入
  • ChromePdfRenderer
  • RenderHtmlAsPdf()
  • RenderUrlAsPdf()
  • 更新页眉/页脚占位符({CrtPage}{page}, {PageCount}{total-pages})
  • TextHeaderFooter
  • 更新合并操作(AddDocumentPdfDocument.Merge)
  • 添加启动时许可证密钥初始化功能

测试

  • 测试 HTML 到 PDF 的转换
  • 测试 URL 到 PDF 的转换
  • 验证页眉/页脚渲染效果
  • 核对页码占位符
  • 测试 PDF 合并
  • 测试大量使用 JavaScript 的页面(现在 Chromium 已支持)

后迁移

  • 从配置中移除HiQPdf序列号
  • 更新文档
  • 监控渲染差异

请注意: HiQPdf 是其各自所有者的注册商标。 本网站与HiQPdf Software没有关联、认可或赞助关系。 所有产品名称、徽标和品牌均为各自所有者的财产。 比较仅供参考,反映撰写时公开可用的信息。
Curtis Chau
技术作家

Curtis Chau 拥有卡尔顿大学的计算机科学学士学位,专注于前端开发,精通 Node.js、TypeScript、JavaScript 和 React。他热衷于打造直观且美观的用户界面,喜欢使用现代框架并创建结构良好、视觉吸引力强的手册。

...
阅读更多

相关文章

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 天试用密钥
无需信用卡或创建账户