在C#中使用XML XSLT创建PDF的最佳方法

时间:2013-07-11 08:59:21

标签: c# xml xslt pdf-generation xsl-fo

我需要打包XML记录的PDF。我认为没有办法直接从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?

我知道有很多类似的问题,但大多数已经过时了。任何帮助真的很感激。

3 个答案:

答案 0 :(得分:5)

在过去,我使用了一个名为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);

我希望这会有所帮助。

答案 1 :(得分:1)

我在这样的方法中使用了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); 
    }

答案 2 :(得分:-1)

您可以使用Aspose.PDF for .NET API从xml创建pdf文件。我可以在Aspose文档页面上找到pdf的 transforming xml to pdf in C#/.NET 的代码示例。