Letter in XSL:FO

Here should go questions about transforming XML with XSLT and FOP.
kirashet
Posts: 4

Letter in XSL:FO

Mon Nov 21, 2005 6:40 pm

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

Return to “XSLT and FOP”

Who is online

Users browsing this forum: No registered users and 2 guests