如何在XSL-FO中为更改为no的表创建模板。行生成PDF?

时间:2017-03-28 06:47:45

标签: xsl-fo

我是XSL-FO的新手想知道如何为资产负债表生成PDF。那么我应该如何在XSL-FO中创建一个模板作为no。资产负债表中的行数将根据特定持续时间内的用户记录而有所不同。资产负债表的记录来自Java中的API调用。我只需要一个指导如何在XSL-FO中根据用户记录创建具有可变行数的模板。

简单示例是为在任何银行拥有帐户的用户生成PDF。 PDF将以表格格式包含前几个月的该用户的交易历史记录。所以没有。表中的记录可能会根据编号而有所不同。由不同用户完成的交易。

事务列表是通过JAVA API调用来实现的,该调用包含需要填充到TEMPLATE中的记录,该记录将在XSl-FO中创建。那么如何用变量no填充动态数据。 XSL-FO中的行数??????一个例子可以帮助

提前致谢

1 个答案:

答案 0 :(得分:-1)

首先,您必须生成包含PDF中所需数据的xml文档。例如:

<userData>
   <id>1234</id>
   <firstName>John</firstName>
   <lastName>Doe</lastName>
   ...
   <balance>3526.35</balance>
   <scripture>
       <date>2017-02-20<date>
       <label>Online payment to Amazon.com</label>
       <amount>-92.25</amount>
   </scripture>
   <scripture>
       <date>2017-01-27<date>
       <label>Salary</label>
       <amount>12000</label>
   </scripture>
   ...
</userData>

然后你必须编写一个XSL-FO模板,它将采用这样的结构作为输入。例如:

<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0"
        xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
        xmlns:fo="http://www.w3.org/1999/XSL/Format"
        xmlns:xlink="http://www.w3.org/1999/xlink"
        xmlns:svg="http://www.w3.org/2000/svg">
    <xsl:output method="xml" encoding="UTF-8"/>
    <xsl:template match="userData">
        <fo:root>
            <fo:layout-master-set>
                <fo:simple-page-master master-name="only"
                        page-width="21cm" page-height="29.7cm"
                        margin-top="2.5cm" margin-bottom="1.5cm"
                        margin-left="4.5cm" margin-right="2.5cm">
                    <fo:region-body/>
                    <fo:region-after extent="1cm"/>
                </fo:simple-page-master>
            </fo:layout-master-set>
            <fo:page-sequence master-reference="only">
                <fo:flow flow-name="xsl-region-body">
                    <fo:wrapper font-size="12pt" 
                            font-family="Arial, Geneva, Helvetica, sans-serif">
                        <fo:block font-weight="bold" space-before="1.5cm">
                            ID: <xsl:value-of select="id/text()"/>
                        </fo:block>
                        <fo:block font-weight="bold">
                            User: <xsl:value-of select="lastName/text()"/>, <xsl:value-of select="firstName/text()"/>
                        </fo:block>
                        <fo:block font-weight="bold">
                            Balance: <xsl:value-of select="balance/text()"/>
                        </fo:block>
                        <fo:table table-layout="fixed"
                                space-before="1.5cm"
                                space-after="1.5cm">
                            <fo:table-column column-width="2cm"/>
                            <fo:table-column column-width="5.5cm"/>
                            <fo:table-column column-width="5cm"/>
                            <fo:table-body>
                                <fo:table-row>
                                    <fo:table-cell>
                                        <fo:block font-weight="bold">
                                            Date
                                        </fo:block>
                                    </fo:table-cell>
                                    <fo:table-cell>
                                        <fo:block font-weight="bold">
                                            Label
                                        </fo:block>
                                    </fo:table-cell>
                                    <fo:table-cell>
                                        <fo:block font-weight="bold">
                                            Amount
                                        </fo:block>
                                    </fo:table-cell>
                                </fo:table-row>
                                <xsl:for-each select="scripture">
                                    <fo:table-row>
                                        <fo:table-cell>
                                            <fo:block>
                                                <xsl:value-of select="date/text()"/>
                                            </fo:block>
                                        </fo:table-cell>
                                        <fo:table-cell>
                                            <fo:block>
                                                <xsl:value-of select="label/text()"/>
                                            </fo:block>
                                        </fo:table-cell>
                                        <fo:table-cell>
                                            <fo:block>
                                                <xsl:value-of select="amount/text()"/>
                                            </fo:block>
                                        </fo:table-cell>
                                    </fo:table-row>
                                </xsl:for-each>
                            </fo:table-body>
                        </fo:table>
                    </fo:wrapper>
                </fo:flow>
            </fo:page-sequence>
        </fo:root>
    </xsl:template>
</xsl:stylesheet>