Page 1 of 1

Letter in XSL:FO

Posted: Mon Nov 21, 2005 6:40 pm
by kirashet
Hi there,

I have some problems creating a certain XSL:FO file.
I'd like to create series letters respective account statements for n-customers.

The XML-Data is managed like followed:

Code: Select all


<data>
<page>
<name>
Mr. X
</name>
<street>
X-Street 1
</street>
<city>
Ownedtown
</city>
<header>
Accountstatement
</header>
<maintext>
Foo Bar
</maintext>
<column0>
Documentnumber
</column0>
<column1>
Documenttext
</column1>
<column2>
Debit/Credit
</column2>
<body>
<voucher>
<docnumber>
1
</docnumber>
<doctext>
Invoice
</doctext>
<amount>
100
</amount>
</voucher>
.
n-vouchers
.
<voucher>
<docnumber>
100
</docnumber>
<doctext>
Invoice
</doctext>
<amount>
120
</amount>
</voucher>
</body>
</page>
<page>
same as obove
</page>
</data>
One 'page' is one customer with its n-Vouchers. The first page should contain receipient address, subject,
columnnames, text etc and the list of vouchers.
That works fine but when there are many vouchers, a second page ist printed, but with the receipient adress, subject etc.

How to handle this?`

The XSL-File:

Code: Select all


<xsl:template match ="/">
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
<fo:layout-master-set>
<fo:simple-page-master master-reference="main"
page-height="29.7cm"
page-width="21cm"
margin-top="6.0cm"
margin-bottom="1.5cm"
margin-left="1.5cm"
margin-right="1.5cm">
<fo:region-before extent="8.0cm"/>
<fo:region-after extent="2.0cm"/>
<fo:region-body margin-top="7.0cm" margin-bottom="0.5cm"/>
</fo:simple-page-master>
</fo:layout-master-set>
<xsl:for-each select="data/page">
<fo:page-sequence master-name="main" initial-page-number="1">
<fo:static-content flow-name="xsl-region-before">
<fo:table table-layout="fixed" padding="3pt">
<fo:table-column column-width="10cm"/>
<fo:table-column column-width="8cm"/>
<fo:table-header>
<fo:table-row>
<fo:table-cell>
<fo:block text-align="left"
font-size="10pt"
font-family="Courier"
line-height="14pt">
<xsl:apply-templates select="title"/>
<fo:block></fo:block>
<xsl:apply-templates select="name1"/>
<fo:block></fo:block>
<xsl:apply-templates select="name2"/>
<fo:block></fo:block>
<xsl:apply-templates select="street"/>
<fo:block></fo:block>
<xsl:apply-templates select="postalcode"/><xsl:apply-templates select="city"/>
</fo:block>
</fo:table-cell>
</fo:table-row>
<fo:table-row>
<fo:table-cell number-columns-spanned="2">
<fo:block font-family="Courier" font-size="10pt" text-align="left">
<xsl:apply-templates select="header"/>
</fo:block>
</fo:table-cell>
</fo:table-row>
<fo:table-row>
<fo:table-cell number-columns-spanned="2">
<fo:block font-family="Courier" font-size="10pt" text-align="left">
<xsl:apply-templates select="maintext"/>
</fo:block>
</fo:table-cell>
</fo:table-row>
</fo:table-body>
</fo:table>
<fo:table table-layout="fixed" padding="1pt">
<fo:table-column column-width="2.6cm"/>
<fo:table-column column-width="2.0cm"/>
<fo:table-column column-width="2.3cm"/>
<fo:table-header>
<fo:table-row>
<fo:table-cell >
<fo:block font-family="Courier" font-size="10pt" text-align="left">
<xsl:apply-templates select="column0"/>
</fo:block>
</fo:table-cell>
<fo:table-cell>
<fo:block font-family="Courier" font-size="10pt" text-align="left" > <!-- white-space-collapse="false">-->
<xsl:apply-templates select="column1"/>
</fo:block>
</fo:table-cell>
<fo:table-cell>
<fo:block font-family="Courier" font-size="10pt" text-align="left" > <!-- white-space-collapse="false">-->
<xsl:apply-templates select="column2"/>
</fo:block>
</fo:table-cell>
</fo:table-row>
</fo:table-header>
<fo:table-body>
</fo:table-body>
</fo:table>
</fo:static-content>
<fo:flow flow-name="xsl-region-body">
<xsl:apply-templates/>
</fo:flow>
</fo:page-sequence>
</xsl:for-each>
</fo:root>
</xsl:template>
<xsl:template match="data/page/body/voucher" >
<fo:table table-layout="fixed" padding="1pt">
<fo:table-column column-width="2.6cm"/>
<fo:table-column column-width="2.0cm"/>
<fo:table-column column-width="2.3cm"/>
<fo:table-header>
<fo:table-row>
<fo:table-cell >
<fo:block font-family="Courier" font-size="10pt" text-align="left">
<xsl:apply-templates select="docnumber"/>
</fo:block>
</fo:table-cell>
<fo:table-cell >
<fo:block font-family="Courier" font-size="10pt" text-align="left">
<xsl:apply-templates select="doctext"/>
</fo:block>
</fo:table-cell>
<fo:table-cell >
<fo:block font-family="Courier" font-size="10pt" text-align="right" border-width="1mm"> <!-- white-space-collapse="false">-->
<xsl:apply-templates select="amount"/>
</fo:block>
</fo:table-cell>
</fo:table-row>
</fo:table-header>
<fo:table-body>
</fo:table-body>
</fo:table>
</xsl:template>
Can sb give me a hint?

Greets
kirashet