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
(注意: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
何时不应使用此方法
对于简单的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转换吗?
可以。使用XsltArgumentList和AddParam传递货币、地区或草稿状态等值到样式表中,然后模板可以利用这些值进行条件输出。
这个流水线可以处理哪些电子发票标准?
XSLT流水线可以处理任何基于XML的发票标准,包括UBL(通用商务语言)、Factur-X和ZUGFeRD。这些将发票数据以结构化XML形式携带;相应的XSLT样式表将每种格式转换为人类可读的HTML布局,IronPDF再将其渲染为PDF。

