我是XSL-FO的新手想知道如何为资产负债表生成PDF。那么我应该如何在XSL-FO中创建一个模板作为no。资产负债表中的行数将根据特定持续时间内的用户记录而有所不同。资产负债表的记录来自Java中的API调用。我只需要一个指导如何在XSL-FO中根据用户记录创建具有可变行数的模板。
简单示例是为在任何银行拥有帐户的用户生成PDF。 PDF将以表格格式包含前几个月的该用户的交易历史记录。所以没有。表中的记录可能会根据编号而有所不同。由不同用户完成的交易。
事务列表是通过JAVA API调用来实现的,该调用包含需要填充到TEMPLATE中的记录,该记录将在XSl-FO中创建。那么如何用变量no填充动态数据。 XSL-FO中的行数??????一个例子可以帮助
提前致谢
答案 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>