用C#从XML XSLT创建PDF的最佳方式
本文关键字:PDF 最佳 方式 创建 XSLT XML | 更新日期: 2023-09-27 18:21:52
我有一个要求,那就是装箱一个PDF格式的XML记录。我认为没有办法直接从xml创建pdf,但使用XSLT或XSL-FO我相信这是可以做到的。我已经阅读了很多文章,寻找使用C#实现这一点的好方法。
-->在此期间,最好的方法是什么?任何一个例子都非常好。
我的场景:
我的XML看起来像:
<Products>
<Brand name="Test">
<Quantity value="2/>
<Price value="$20"/>
</Brand>
<Brand name="Test2">
<Quantity value="3/>
<Price value="$30"/>
</Brand>
<Brand name="Test3">
<Quantity value="4/>
<Price value="$40"/>
</Brand>
</Products>
我如何创建一个pdf文件,其中有一个显示所有这些信息的表格?
我知道有很多类似的问题,但大多数都已经过时了。非常感谢您的帮助。
过去,我曾使用一个名为Ibex PDF Creator的商业库,使用XSL-FO标准从XML数据生成PDF文档,效果非常好。
下面是我如何使用它的一个例子:
XML数据:
<DocumentRoot>
<!-- Some content -->
</DocumentRoot>
XSL-FO布局:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/DocumentRoot">
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:ibex="http://www.xmlpdf.com/2003/ibex/Format">
<ibex:properties
title="Some document"
subject=""
author=""
keywords=""
creator="" />
<fo:layout-master-set>
<fo:simple-page-master master-name="A4" page-width="210mm" page-height="297mm">
<fo:region-body margin-bottom="1cm" margin-top="3cm"/>
<fo:region-before extent="20mm"/>
<fo:region-after extent="8mm"/>
<fo:region-start extent="1mm"/>
<fo:region-end extent="1mm"/>
</fo:simple-page-master>
</fo:layout-master-set>
</<fo:root>
</xsl:template>
</xsl:stylesheet>
在.NET中生成PDF文档:
var data = new MemoryStream(dataBytes);
var layout = new MemoryStream(layoutBytes);
var pdf = new MemoryStream();
// Using the Ibex PDF Creator .NET API
var doc = new FODocument();
doc.generate(data, layout, pdf);
我希望这能有所帮助。
我在这样的方法中使用了Apache Fop.bat。(使用System.Diagnostics)
private void XML_TO_PDF_VIA_FOP(String xmlName, String xsltName, String pdfName)
{
String batchFile = "XSLT''FOPv1''fop.bat";
String xmlFile = xmlName;
String xsltFile = "XSLT''" + xsltName;
String pdfFile = pdfName;
Process.Start(batchFile, " -xml " + xmlFile + " -xsl " + xsltFile + " -pdf " + pdfFile);
}
您可以使用Aspose.pdf for.NET API从xml创建pdf文件。我可以在Aspose文档页面上找到在C#/.NET中将xml转换为pdf的代码示例。