跳至页脚内容
产品比较

HTML到PDF转换器比较:.NET中的免费与付费库

XML无法直接转换为PDF,因此路径分为两个步骤:通过XSLT样式表将XML转换为HTML,然后IronPDF通过其Chrome引擎将该HTML转换为PDF。IronPDF仅负责最后一步; XSLT负责塑形。 这种分割保持了数据(XML)和呈现(样式表)的分离,下面的用例都基于这一点。

using IronPdf;
using System.IO;
using System.Xml;
using System.Xml.Xsl;

var transform = new XslCompiledTransform();
transform.Load("invoice.xslt");

using var writer = new StringWriter();
using (var reader = XmlReader.Create("invoice.xml"))
{
    transform.Transform(reader, null, writer);
}

new ChromePdfRenderer()
    .RenderHtmlAsPdf(writer.ToString())
    .SaveAs("invoice.pdf");
using IronPdf;
using System.IO;
using System.Xml;
using System.Xml.Xsl;

var transform = new XslCompiledTransform();
transform.Load("invoice.xslt");

using var writer = new StringWriter();
using (var reader = XmlReader.Create("invoice.xml"))
{
    transform.Transform(reader, null, writer);
}

new ChromePdfRenderer()
    .RenderHtmlAsPdf(writer.ToString())
    .SaveAs("invoice.pdf");
Imports IronPdf
Imports System.IO
Imports System.Xml
Imports System.Xml.Xsl

Dim transform As New XslCompiledTransform()
transform.Load("invoice.xslt")

Using writer As New StringWriter()
    Using reader As XmlReader = XmlReader.Create("invoice.xml")
        transform.Transform(reader, Nothing, writer)
    End Using

    Dim renderer As New ChromePdfRenderer()
    renderer.RenderHtmlAsPdf(writer.ToString()).SaveAs("invoice.pdf")
End Using
$vbLabelText   $csharpLabel

(注意:Transform 写入 StringWriter; 它不会返回HTML,因此您需要在调用后读取 writer.ToString()。)

电子发票和机器可读发票格式

在这里,管道最有效。像UBL、Factur-X和ZUGFeRD这样的标准将发票作为XML数据传输,而不是任何人都可以读取的文档。 样式表将该XML转化为格式化的发票,IronPDF生成一个人实际接收到的PDF。

金融、政府和医疗中的受监管数据馈送

这些行业交换结构化的XML:纳税申报、财务报表、临床文件、法规提交。 每个模式通过其自己的样式表映射到合规的打印布局,转换逻辑与您的C#隔离。

产品目录和价格清单

XML中的目录馈送通过样式表变成格式化的手册或表格,样式由熟悉的HTML和CSS处理而不是专有的PDF语言。

一个来源,多种文档变体

因为展示内容存在于模板中,一个XML源可以通过更换样式表生成多个输出(客户发票、内部副本、本地化版本)。 无需更改数据,无需重新编译。

参数化和有条件的文档

通过 XsltArgumentList 将运行时值传入转换中,因此一个模板可以在渲染之前根据货币、地区或草稿状态进行分支:

var args = new XsltArgumentList();
args.AddParam("currency", "", "AUD");

using var writer = new StringWriter();
using (var reader = XmlReader.Create("invoice.xml"))
{
    transform.Transform(reader, args, writer);
}
var args = new XsltArgumentList();
args.AddParam("currency", "", "AUD");

using var writer = new StringWriter();
using (var reader = XmlReader.Create("invoice.xml"))
{
    transform.Transform(reader, args, writer);
}
Imports System.Xml
Imports System.Xml.Xsl
Imports System.IO

Dim args As New XsltArgumentList()
args.AddParam("currency", "", "AUD")

Using writer As New StringWriter()
    Using reader As XmlReader = XmlReader.Create("invoice.xml")
        transform.Transform(reader, args, writer)
    End Using
End Using
$vbLabelText   $csharpLabel

何时不应使用此方法

对于简单的XML结构或一次性转换,XSLT层是多余的负担; 直接解析XML并构建HTML。 在处理多种模式或需要可维护、可重用转换逻辑的系统中,样式表方法证明了其价值。

为何分离是关键

管道的优势在于这种分离。 IronPDF在最后一步提供像素级的精确渲染,但灵活性、多个格式、条件布局、模式独立性,所有这些都来自于将转换保留在XSLT中而不是代码中。

常见问题解答

IronPDF可以直接将XML转换为PDF吗?

不能直接。流水线分为两步:首先,XSLT样式表将XML转换为HTML,然后IronPDF通过其Chrome引擎将该HTML渲染为PDF。IronPDF仅处理最终渲染步骤。

如何在C#中使用XSLT和IronPDF将XML转换为PDF?

使用XslCompiledTransform加载XSLT文件,使用StringWriter将XML转换为HTML字符串,然后将该字符串传递给ChromePdfRenderer.RenderHtmlAsPdf。请注意,Transform写入的是writer - 调用writer.ToString()以在转换完成后获取HTML。

在渲染为PDF之前使用XSLT转换XML的优势是什么?

将数据(XML)和呈现(XSLT样式表)分离,这意味着一个XML源可以通过更换样式表生成多个文档变体(客户发票、内部副本、本地化版本)。转换逻辑保持在C#代码之外,并可跨架构重用。

我可以在运行时将参数传递给XSLT转换吗?

可以。使用XsltArgumentListAddParam传递货币、地区或草稿状态等值到样式表中,然后模板可以利用这些值进行条件输出。

这个流水线可以处理哪些电子发票标准?

XSLT流水线可以处理任何基于XML的发票标准,包括UBL(通用商务语言)、Factur-X和ZUGFeRD。这些将发票数据以结构化XML形式携带;相应的XSLT样式表将每种格式转换为人类可读的HTML布局,IronPDF再将其渲染为PDF。

Curtis Chau
技术作家

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

除了开发之外,Curtis 对物联网 (IoT) 有浓厚的兴趣,探索将硬件和软件集成的新方法。在空闲时间,他喜欢玩游戏和构建 Discord 机器人,将他对技术的热爱与创造力相结合。

钢铁支援团队

我们每周 5 天,每天 24 小时在线。
聊天
电子邮件
打电话给我