使用XSL-FO从DB而不是XML源生成PDF

时间:2014-04-10 14:17:25

标签: .net pdf xsl-fo

我只有XSL-FO文档没有客户端提供的源XML文件,我应该通过从我的数据库为这个XSL-fo文件赋值来生成PDF。

我的问题是, 1.在没有源XML文件的情况下仅使用XSL-FO是否考虑了正常开发,或者我应该问他们用来转换和制作此XSL-FO的源XML的XML模式?

在下面的文章中,作者说: "典型的XSLFO生成将使用XSLT样式表来自我们的XML,尽管根本不需要这样。我们的应用程序可能需要以分页形式表达信息,这些应用程序可以直接生成XSLFO词汇表的实例,以便为输出介质进行解释。" 资料来源:http://www.xml.com/lpt/a/939

2.如何有效地为以@符号开头的属性赋值,例如@agencyType等。

3您建议哪个库使用XSL-Fo生成PDF?

以下是我拥有的XSL文件的示例:

xsl:when test="@paymentType=5 or @paymentType=8"/>
        <xsl:when test="parent::node()/@isCopy='true' "/>
            <xsl:when test="@agencyType='3' "/>
            <xsl:when test="@separateAgencyCommissionInvoiceNumber!='' "/>
            <xsl:when test="@differentShipmentAddress='true' ">
                <fo:page-sequence master-reference="Rechnung">
                    <fo:static-content flow-name="xsl-region-before" font-family="Verdana" font-size="8.5pt" line-height="10pt">
                        <fo:block-container width="17cm" height="2cm" top="-3mm" left="0cm" position="absolute">
                            <fo:block font-family="CourierNew" font-size="1pt" line-height="6pt">
                                <xsl:variable name="headerLine1">
                                    <xsl:value-of select="translate(../InserterHeaderLine/@headerLine1,'A1U','A1 ')"/>
                                </xsl:variable>
                                <xsl:value-of select="translate($headerLine1,' ','~')"/>
                            </fo:block>
                            <fo:block font-family="CourierNew" font-size="1pt" line-height="6pt">
                                <xsl:value-of select="translate(../InserterHeaderLine/@headerLine2,' ','~')"/>
                            </fo:block>
                            <fo:block font-family="CourierNew" font-size="1pt" line-height="6pt">
                                <xsl:value-of select="translate(../InserterHeaderLine/@headerLine3,' ','~')"/>
                            </fo:block>
                        </fo:block-container>
                    </fo:static-content>
                    <fo:flow flow-name="xsl-region-body" font-size="9pt" font-family="Verdana">
                        <!--    abweichende Rechnungsanschrift -->
                        <fo:block-container width="9cm" height="4cm" top="2.4cm" left="0cm" position="absolute">
                            <fo:block>
                                <xsl:value-of select="@shipmentName1Line"/>
                            </fo:block>
                            <fo:block>
                            <xsl:value-of select="@shipmentName2Line"/>
                        </fo:block>
                        <fo:block>
                            <xsl:value-of select="@shipmentName3Line"/>
                        </fo:block>
                        <fo:block>
                            <xsl:value-of select="@shipmentAddress1Line"/>
                        </fo:block>
                        <fo:block>&#160;</fo:block>
                        <fo:block>
                            <xsl:value-of select="@shipmentAddress2Line"/>
                        </fo:block>
                        <fo:block>
                            <xsl:value-of select="@shipmentAddress3Line"/>
                        </fo:block>
                    </fo:block-container>
                </fo:flow>
            </fo:page-sequence>

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

根据您上面显示的示例,您有一个&#34; XSL&#34;文件(不是&#34; XSL FO&#34;文件)。您可以(a)检查XSL并确定适合它的XML文件,或者(b)我很惊讶给你XSL的人没有样本XML文件,从中获取它。

然后从匹配它的数据库生成XML。这可以通过许多工具完成,RenderX有一个名为DB2XML的免费工具,或者您可以查看来自Altova或其他供应商的工具。