比较

XFINIUM.PDF 与 IronPDF:技术比较指南

XFINIUM.PDF 与 IronPDF:.NET PDF 生成的技术比较

当.NET 开发人员评估用于文档生成和处理的 PDF 库时,XFINIUM.PDF 将作为一个跨平台选项出现,并提供全面的底层 PDF 工具。 然而,其基于坐标的图形编程模型与以 HTML 为中心的方法存在显著差异。 本技术比较将对 XFINIUM.PDF 和IronPDF进行研究,以帮助架构师和开发人员了解 PDF 生成理念、API 设计和现代网络内容支持方面的根本区别。

了解 XFINIUM.PDF.

XFINIUM.PDF 是完全使用 C# 开发的商用跨平台 PDF 库,旨在为 PDF 开发初学者和专家提供服务。 该库提供广泛的功能,包括 PDF 生成、表格填写、PDF 作品集构建、内容编辑和多页 TIFF 转换。

XFINIUM.PDF 有两个版本:用于创建和编辑 PDF 的生成器版本,以及增加了渲染和显示功能的查看器版本。 该库提供跨平台的综合 PDF 操作工具。

然而,XFINIUM.PDF 的运行模式与以网络为中心的 PDF 库根本不同:

  • 基于坐标的 API:需要使用像素坐标进行手动定位,如 DrawString("text", font, brush, 50, 100)
  • 无本地 HTML 支持:无法将 HTML/CSS 转换为 PDF--依赖于低级绘图原语
  • 手动字体管理:必须明确创建和管理字体对象
  • 无 CSS 样式:不支持现代网络样式--颜色、字体和布局必须手动处理
  • 无JavaScript渲染:仅限静态内容--无法渲染动态网页内容
  • 复杂文本布局:需要手动进行文本测量和换行计算

图形编程模型

XFINIUM.PDF 迫使开发人员像图形程序员而非文档设计师那样思考:

// XFINIUM.PDF: Position every element manually
page.Graphics.DrawString("Invoice", titleFont, titleBrush, new XPoint(50, 50));
page.Graphics.DrawString("Customer:", labelFont, brush, new XPoint(50, 80));
page.Graphics.DrawString(customer.Name, valueFont, brush, new XPoint(120, 80));
page.Graphics.DrawLine(pen, 50, 100, 550, 100);
// ... hundreds of lines for a simple document
// XFINIUM.PDF: Position every element manually
page.Graphics.DrawString("Invoice", titleFont, titleBrush, new XPoint(50, 50));
page.Graphics.DrawString("Customer:", labelFont, brush, new XPoint(50, 80));
page.Graphics.DrawString(customer.Name, valueFont, brush, new XPoint(120, 80));
page.Graphics.DrawLine(pen, 50, 100, 550, 100);
// ... hundreds of lines for a simple document
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

当需求发生变化时,这种方法就会成为维护方面的挑战,因为当内容发生变化时,每个元素的位置都必须重新计算。

了解IronPDF

IronPDF 采用以网络为中心的方式生成 PDF,使用 Chromium 渲染引擎将 HTML、CSS 和JavaScript直接转换为 PDF 文档。 IronPDF不是基于坐标的绘图,而是让开发人员能够使用熟悉的网络技术来创建文档。

主要特点包括

  • 基于 HTML/CSS 的设计:使用标准网络技术进行文档布局
  • Chromium 渲染引擎:通过现代浏览器技术全面支持 CSS3 和 JavaScript
  • 自动布局:无需手动坐标计算--内容自然流畅
  • 现代网络标准:CSS 网格、Flexbox、网络字体和 ES2024 JavaScript
  • URL 至 PDF 转换:将实时网页直接渲染为 PDF
  • 大型社区:广泛的文档、教程和支持资源

功能对比

下表强调了 XFINIUM.PDF 和IronPDF的基本差异:

特征XFINIUM.PDFIronPDF
HTML 到 PDF有限的 HTML 支持,侧重于程序化 PDF 创建全面支持 HTML 到 PDF 的转换
社区与支持社区规模较小,可用在线资源较少拥有大量文档和教程的大型社区
许可基于开发人员的商业许可商业翻译
跨平台支持强大的跨平台能力同时支持跨平台操作
专业特色全面的 PDF 编辑工具高级 HTML 渲染和 PDF 功能

详细功能对比

特征XFINIUM.PDFIronPDF
内容创建
HTML 至 PDF有限(PdfHtmlTextElement)完整的 Chromium 渲染
URL 至 PDF
CSS 支持完整的 CSS3
JavaScript完整的 ES2024
Flexbox/Grid
网络字体
SVG 支持有限的满的
布局
自动排版
自动分页
手动定位要求可选项(CSS 定位)
表格手工绘图HTML <table>
PDF操作
合并 PDF
拆分 PDF
水印手工绘图内置
页眉/页脚手册每页自动翻译
开发
学习曲线高(坐标系)低级(HTML/CSS)
代码准确性极高
维护难点简易
跨平台

API 架构差异

XFINIUM.PDF 和IronPDF在架构上的差异代表了生成 PDF 的不同方法。

XFINIUM.PDF 流程文档模式

XFINIUM.PDF 使用 PdfFixedDocument, PdfFlowDocumentPdfFlowContent 对象的多步骤流程:

// NuGet: Install-Package Xfinium.Pdf
using Xfinium.Pdf;
using Xfinium.Pdf.Actions;
using Xfinium.Pdf.FlowDocument;
using System.IO;

class Program
{
    static void Main()
    {
        PdfFixedDocument document = new PdfFixedDocument();
        PdfFlowDocument flowDocument = new PdfFlowDocument();

        string html = "<html><body><h1>Hello World</h1><p>This is a PDF from HTML.</p></body></html>";

        PdfFlowContent content = new PdfFlowContent();
        content.AppendHtml(html);
        flowDocument.AddContent(content);

        flowDocument.RenderDocument(document);
        document.Save("output.pdf");
    }
}
// NuGet: Install-Package Xfinium.Pdf
using Xfinium.Pdf;
using Xfinium.Pdf.Actions;
using Xfinium.Pdf.FlowDocument;
using System.IO;

class Program
{
    static void Main()
    {
        PdfFixedDocument document = new PdfFixedDocument();
        PdfFlowDocument flowDocument = new PdfFlowDocument();

        string html = "<html><body><h1>Hello World</h1><p>This is a PDF from HTML.</p></body></html>";

        PdfFlowContent content = new PdfFlowContent();
        content.AppendHtml(html);
        flowDocument.AddContent(content);

        flowDocument.RenderDocument(document);
        document.Save("output.pdf");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

这种模式需要创建多个文档对象,将内容添加到 flow 容器中,渲染到固定文档中,然后保存。 与完整的浏览器渲染相比,通过 AppendHtml 提供的 HTML 支持是有限的。

IronPDF简化模式

IronPDF 通过<代码>ChromePdfRenderer</代码类提供 HTML 到 PDF 的直接转换:

// NuGet: Install-Package IronPdf
using IronPdf;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        string html = "<html><body><h1>Hello World</h1><p>This is a PDF from HTML.</p></body></html>";

        var pdf = renderer.RenderHtmlAsPdf(html);
        pdf.SaveAs("output.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        string html = "<html><body><h1>Hello World</h1><p>This is a PDF from HTML.</p></body></html>";

        var pdf = renderer.RenderHtmlAsPdf(html);
        pdf.SaveAs("output.pdf");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

ChromePdfRenderer 类使用 Chromium 渲染引擎处理 HTML,完全支持 CSS3 和 JavaScript。 有关全面的 HTML 转换指导,请参阅 HTML 转 PDF 教程

PDF 合并操作

结合多个 PDF 文档,可以发现不同库之间的 API 复杂性存在显著差异。

XFINIUM.PDF 手册循环页

XFINIUM.PDF 需要打开文件流、迭代页面并手动将每一页添加到输出文档中:

// NuGet: Install-Package Xfinium.Pdf
using Xfinium.Pdf;
using System.IO;

class Program
{
    static void Main()
    {
        PdfFixedDocument output = new PdfFixedDocument();

        FileStream file1 = File.OpenRead("document1.pdf");
        PdfFixedDocument pdf1 = new PdfFixedDocument(file1);

        FileStream file2 = File.OpenRead("document2.pdf");
        PdfFixedDocument pdf2 = new PdfFixedDocument(file2);

        for (int i = 0; i < pdf1.Pages.Count; i++)
        {
            output.Pages.Add(pdf1.Pages[i]);
        }

        for (int i = 0; i < pdf2.Pages.Count; i++)
        {
            output.Pages.Add(pdf2.Pages[i]);
        }

        output.Save("merged.pdf");

        file1.Close();
        file2.Close();
    }
}
// NuGet: Install-Package Xfinium.Pdf
using Xfinium.Pdf;
using System.IO;

class Program
{
    static void Main()
    {
        PdfFixedDocument output = new PdfFixedDocument();

        FileStream file1 = File.OpenRead("document1.pdf");
        PdfFixedDocument pdf1 = new PdfFixedDocument(file1);

        FileStream file2 = File.OpenRead("document2.pdf");
        PdfFixedDocument pdf2 = new PdfFixedDocument(file2);

        for (int i = 0; i < pdf1.Pages.Count; i++)
        {
            output.Pages.Add(pdf1.Pages[i]);
        }

        for (int i = 0; i < pdf2.Pages.Count; i++)
        {
            output.Pages.Add(pdf2.Pages[i]);
        }

        output.Save("merged.pdf");

        file1.Close();
        file2.Close();
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

这种方法需要明确的流管理、手动迭代每个文档的页面以及仔细清理文件句柄。

IronPDF静态合并方法

IronPDF 提供了一个静态 Merge 方法,可在内部处理所有复杂问题:

// NuGet: Install-Package IronPdf
using IronPdf;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        var pdf1 = PdfDocument.FromFile("document1.pdf");
        var pdf2 = PdfDocument.FromFile("document2.pdf");

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

class Program
{
    static void Main()
    {
        var pdf1 = PdfDocument.FromFile("document1.pdf");
        var pdf2 = PdfDocument.FromFile("document2.pdf");

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

PdfDocument.Merge 方法消除了手动页面迭代和流管理,大大降低了代码的复杂性。

使用文本和图像创建文档

使用混合内容构建文档展示了基于坐标的图形和基于 HTML 的设计之间的范式差异。

XFINIUM.PDF 图形方法

XFINIUM.PDF 要求创建字体对象、画笔对象、将图像加载到特定的图像类中,并以精确的坐标绘制每个元素:

// NuGet: Install-Package Xfinium.Pdf
using Xfinium.Pdf;
using Xfinium.Pdf.Graphics;
using Xfinium.Pdf.Core;
using System.IO;

class Program
{
    static void Main()
    {
        PdfFixedDocument document = new PdfFixedDocument();
        PdfPage page = document.Pages.Add();

        PdfStandardFont font = new PdfStandardFont(PdfStandardFontFace.Helvetica, 24);
        PdfBrush brush = new PdfBrush(PdfRgbColor.Black);

        page.Graphics.DrawString("Sample PDF Document", font, brush, 50, 50);

        FileStream imageStream = File.OpenRead("image.jpg");
        PdfJpegImage image = new PdfJpegImage(imageStream);
        page.Graphics.DrawImage(image, 50, 100, 200, 150);
        imageStream.Close();

        document.Save("output.pdf");
    }
}
// NuGet: Install-Package Xfinium.Pdf
using Xfinium.Pdf;
using Xfinium.Pdf.Graphics;
using Xfinium.Pdf.Core;
using System.IO;

class Program
{
    static void Main()
    {
        PdfFixedDocument document = new PdfFixedDocument();
        PdfPage page = document.Pages.Add();

        PdfStandardFont font = new PdfStandardFont(PdfStandardFontFace.Helvetica, 24);
        PdfBrush brush = new PdfBrush(PdfRgbColor.Black);

        page.Graphics.DrawString("Sample PDF Document", font, brush, 50, 50);

        FileStream imageStream = File.OpenRead("image.jpg");
        PdfJpegImage image = new PdfJpegImage(imageStream);
        page.Graphics.DrawImage(image, 50, 100, 200, 150);
        imageStream.Close();

        document.Save("output.pdf");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

这需要管理 PdfStandardFont, PdfBrush, PdfRgbColor, 和 PdfJpegImage 对象,并为文本和图像提供明确的坐标定位。

IronPDFHTML 方法

IronPdf 使用标准 HTML 并嵌入图片:

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

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

        string imageBase64 = Convert.ToBase64String(File.ReadAllBytes("image.jpg"));
        string html = $@"
            <html>
                <body>
                    <h1>Sample PDF Document</h1>
                    <img src='data:image/jpeg;base64,{imageBase64}' width='200' height='150' />
                </body>
            </html>";

        var pdf = renderer.RenderHtmlAsPdf(html);
        pdf.SaveAs("output.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System.IO;

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

        string imageBase64 = Convert.ToBase64String(File.ReadAllBytes("image.jpg"));
        string html = $@"
            <html>
                <body>
                    <h1>Sample PDF Document</h1>
                    <img src='data:image/jpeg;base64,{imageBase64}' width='200' height='150' />
                </body>
            </html>";

        var pdf = renderer.RenderHtmlAsPdf(html);
        pdf.SaveAs("output.pdf");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

HTML 可自动处理布局--无需坐标计算,无需字体对象管理,图片可使用标准 <img> 标记或 base64 编码自然嵌入。

API 映射参考

正在评估从 XFINIUM.PDF 向IronPDF过渡的团队将发现此映射有助于理解概念等同:

XFINIUM.PDFIronPDF备注
<代码>PDFFixedDocument</代码<代码>ChromePdfRenderer</代码创建呈现器,而不是文档
<代码>PDF 页</代码自动翻译根据 HTML 内容创建的页面
<代码>page.Graphics.DrawString()</代码HTML 文本元素<p><h1><span>等。
<代码>page.Graphics.DrawImage()</代码<img> 标记HTML 图像
<代码>page.Graphics.DrawLine()</代码CSS 边框<hr>HTML/CSS 行
<代码>page.Graphics.DrawRectangle()</代码<div> 上的 CSS 边框HTML 框
<代码>PdfUnicodeTrueTypeFont</代码CSS font-family无需字体对象
<代码>PdfRgbColor</代码CSS <代码>颜色</代码标准 CSS 颜色
<代码>PdfBrush</代码CSS 属性背景、颜色等
<代码>PdfPen</代码CSS <代码>边框</代码行文风格
<代码>PdfHtmlTextElement</代码<代码>RenderHtmlAsPdf()</代码完全支持 HTML
<代码>document.Save(流)</代码<代码>pdf.SaveAs()</代码>或<代码>pdf.BinaryData</代码多种输出选项
<代码>PdfStringAppearanceOptions</代码CSS 定型使用 CSS 制作外观
<代码>PdfStringLayoutOptions</代码CSS 布局Flexbox、Grid 等

团队何时考虑从 XFINIUM.PDF 迁移到 IronPDF?

有几种情况通常会促使开发团队将IronPDF作为 XFINIUM.PDF 的替代品进行评估:

现代网络内容要求

构建从基于 Web 的模板、仪表盘或报告生成 PDF 的应用程序的团队会发现 XFINIUM.PDF 基于坐标的方法很有局限性。 IronPdf 的 Chromium 引擎可渲染 XFINIUM.PDF 无法支持的现代 CSS 网格、Flexbox 和JavaScript驱动的内容。

维护和代码复杂性

XFINIUM.PDF 中基于坐标的应用程序接口会产生冗长的代码,随着文档布局的不断变化而难以维护。 一份简单的发票文档在 XFINIUM.PDF 中可能需要数百行定位代码,而在IronPDF中只需要几十行 HTML/CSS 代码。

URL转PDF功能

XFINIUM.PDF 无法将实时网页渲染为 PDF--该功能需要外部 HTML 解析库。IronPDF提供本地 URL 到 PDF 的转换,并支持完整的JavaScript执行和动态内容。

开发人员熟悉程度

具有较强网络开发技能的团队会发现基于坐标的 PDF 生成的学习曲线非常陡峭。HTML 和 CSS 是广为人知的技术,因此IronPDF的方法更容易被没有专业 PDF 知识的开发人员所接受。

自动布局和分页

XFINIUM.PDF 需要手动跟踪 Y 位置,并在内容超出页面边界时创建明确的页面。IronPDF可根据 CSS 规则和内容流自动处理分页符。

常见迁移注意事项

从 XFINIUM.PDF 过渡到IronPDF的团队应考虑这些技术差异:

基于坐标的流程布局

XFINIUM.PDF 要求每个元素都有精确的 X、Y 坐标。 IronPdf 默认使用 HTML 流式布局。 对于需要绝对定位的情况,CSS 可以提供这种功能:

.positioned-element {
    position: absolute;
    top: 100px;
    left: 50px;
}

字体对象到 CSS 字体家族

XFINIUM.PDF 明确创建<代码>PdfUnicodeTrueTypeFont</代码对象。IronPDF使用 CSS 字体,具有自动字体处理功能:

<style>
    body { font-family: Arial, sans-serif; }
    h1 { font-family: 'Times New Roman', serif; font-size: 24px; }
</style>
<style>
    body { font-family: Arial, sans-serif; }
    h1 { font-family: 'Times New Roman', serif; font-size: 24px; }
</style>
HTML

将颜色对象转换为 CSS 颜色

XFINIUM.PDF 需要<代码>PdfRgbColor</代码和<代码>PdfBrush</代码对象。 IronPdf 使用标准 CSS 颜色:

.header { color: navy; background-color: #f5f5f5; }
.warning { color: rgb(255, 0, 0); }
.info { color: rgba(0, 0, 255, 0.8); }

手动到自动分页

XFINIUM.PDF 需要跟踪 Y 位置并手动创建新页面。 IronPdf 通过 CSS 控制提供自动分页功能:

.section { page-break-after: always; }
.keep-together { page-break-inside: avoid; }

IronPDF的其他功能

除了核心比较点之外,IronPDF 还提供了文档操作功能,对其 HTML 渲染功能进行了补充:

.NET兼容性和未来准备情况

这两个库都支持跨平台 .NET 开发。IronPDFfor .NET 保持着定期更新的积极开发态势,确保与 .NET 8、.NET 9 以及包括预计于 2026 年发布的 .NET 10 在内的未来版本兼容。该库的 HTML/CSS 方法符合现代网络开发实践,充分利用了 .NET 开发人员已经掌握的技能。

结论

XFINIUM.PDF 和IronPDF代表了在 .NET 中生成 PDF 的根本不同方法。 XFINIUM.PDF 基于坐标的图形 API 可提供底层控制,但需要大量代码来进行文档布局--每个元素都需要明确的定位、字体对象和颜色管理。 随着文档复杂性的增加,这种方法越来越难以维持。

IronPdf 基于 HTML/CSS 的方法利用 Chromium 渲染引擎将 PDF 生成视为网页渲染。 开发人员使用熟悉的 HTML、CSS 和 JavaScript,而不是学习基于坐标的图形 API。自动布局、分页符和现代网络标准支持(CSS 网格、Flexbox、ES2024 JavaScript)大大降低了代码的复杂性。

对于构建生成基于网络的报告、仪表盘或动态文档的应用程序的团队来说,IronPDF 的方法与现代开发实践自然地保持一致。 对于需要对每个文档元素进行像素级完美控制并愿意投资于基于坐标的编程模型的团队,XFINIUM.PDF 的图形 API 可提供这种功能。

选择最终取决于您团队的要求:如果您的 PDF 源自网络内容,或者您更喜欢用 HTML/CSS 进行文档设计,那么IronPDF的方法将为您带来显著的生产力优势。 如果您正在构建具有精确定位要求的高度专业化 PDF 内容,而且您的团队拥有图形编程方面的专业知识,那么 XFINIUM.PDF 的底层 API 可以满足这些需求。

有关更多实施指导,请浏览 IronPDF 文档和涵盖特定用例和高级功能的 教程