RE: [xsl] Multi page pdf using fop-one page for each person tag

Subject: RE: [xsl] Multi page pdf using fop-one page for each person tag
From: "Khan, Atique \(IT\)" <Atiqur.Khan@xxxxxxxxxxxxxxxxx>
Date: Fri, 4 Apr 2008 11:56:59 +0100
Hi Ken,
I was able to proceed with this and got stuck as its overwriting on the
first page only. Each of the employee tags need to go into a separate
page in the pdf. When I am creating the pdf its writing on the first
page only without advancing to the next page. Can you please point out
the mistake in my xsl template. A sample xml & xsl is below:

<resultset>
  <employee>
    <row>
      <data_description>Payment Company</data_description>
      <data_value>ABC UK Ltd</data_value>
      <data_display_type>1</data_display_type>
      <display_order>10</display_order>
    </row>
    <row>
      <data_description>Employee Name</data_description>
      <data_value>Mr A Lastname</data_value>
      <data_display_type>2</data_display_type>
      <display_order>10</display_order>
    </row>
    ...
    </employee>
    <employee>
    ...
    </employee>
    .
    .
</resultset>

My xsl template is as follows:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:fo="http://www.w3.org/1999/XSL/Format";
xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
    <xsl:template match="resultset">
        <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format";>
            <!-- defines page layout -->
            <fo:layout-master-set>
                <!-- layout for the first page -->
                <fo:simple-page-master margin-bottom="0cm"
margin-left="0cm" margin-right="0cm" margin-top="0cm" master-name="ukA4"
page-height="29.704cm" page-width="20.990cm">
                    <fo:region-body background-repeat="no-repeat"
margin-bottom="0cm" margin-left="0cm" margin-right="0cm"
margin-top="0cm"/>
                    <fo:region-before extent="2cm" precedence="true"/>
                    <fo:region-after extent="0cm" precedence="true"/>
                    <fo:region-start extent="0cm"/>
                    <fo:region-end extent="0cm"/>
                </fo:simple-page-master>
                <fo:page-sequence-master master-name="simpleDoc" >
                    <fo:repeatable-page-master-alternatives>
                        <fo:conditional-page-master-reference
master-reference="ukA4"/>
                    </fo:repeatable-page-master-alternatives>
                </fo:page-sequence-master>
            </fo:layout-master-set>
            <!-- end: defines page layout -->
            <!-- actual layout -->
            <!-- <fo:page-sequence master-reference="simpleDoc">-->

            <fo:page-sequence master-reference="simpleDoc"
initial-page-number="1" force-page-count="odd">
                <!-- usage of page layout -->
                <!-- header -->
                <fo:static-content flow-name="xsl-region-start"/>
                <!-- Body -->
                <fo:flow flow-name="xsl-region-body">
                    <xsl:apply-templates/>
                </fo:flow>
            </fo:page-sequence>

        </fo:root>
    </xsl:template>

    <!-- <xsl:template match="resultset">
        <xsl:for-each select="employee">
            <xsl:flow flow-name="xsl-region-body">
                <xsl:apply-templates />
            </xsl:flow>
        </xsl:for-each>
    </xsl:template>-->

    <xsl:template match="employee">
        <fo:block-container height="29.704cm" left="0cm"
position="absolute" top="0cm" width="0.404cm">
            <fo:block/>
        </fo:block-container>
        <fo:block-container height="1.97cm" left="0cm"
position="absolute" top="0cm" width="29.704cm">
            <fo:block/>
        </fo:block-container>
        <fo:block-container height="29.704cm" left="20.65cm"
position="absolute" top="0cm" width="0.404cm">
            <fo:block/>
        </fo:block-container>

        <!-- Payslip footer -->
        <fo:block-container height="1.834cm" left="0.515cm"
position="absolute" top="27.8342cm" width="5.5cm"
background-color="#FFFFFF" padding-left="0cm">
            <fo:block>
                <fo:external-graphic
src="url(file:///webapp/images/Logo_Black.jpg)" height="1.24cm"
width="5.29cm"/>
            </fo:block>
        </fo:block-container>
        <fo:block-container height="1.834cm" left="15.145cm"
position="absolute" top="28.4242cm" width="5.5cm"
background-color="#FFFFFF" padding-left="0cm">
            <fo:block font-family="Arial" font-weight="normal"
font-size="10.00pt" color="#000000" text-align="end"> PRIVATE AND
CONFIDENTIAL
            </fo:block>
        </fo:block-container>

        <!-- Payslip main header -->
        <fo:block-container height="0.53cm" left="0.7cm"
position="absolute" top="1.2cm" width="13.33cm" border-width="0.5pt"
border-style="solid" border-color="#000000" padding-top="0.11cm"
padding-bottom="0.07cm" padding-left="0.125cm">
            <fo:block font-family="Arial" font-weight="normal"
font-size="9pt" line-height="0.5pt" text-align="start" color="#000000"
padding="0.25cm">
                <xsl:for-each select="row">
                    <xsl:choose>
                        <xsl:when test="data_display_type=1">
                            <xsl:value-of select="data_value"/>
                        </xsl:when>
                    </xsl:choose>
                </xsl:for-each>
            </fo:block>
        </fo:block-container>

        <!-- Paydate -->
        <fo:block-container height="0.53cm" left="14.6087cm"
position="absolute" top="1.2cm" width="5.875cm" border-width="0.5pt"
border-style="solid" border-color="#000000" padding-top="0.11cm"
padding-bottom="0.07cm" padding-left="0.125cm">
            <fo:block font-size="11pt" text-align="left">
                <fo:table table-layout="fixed" height="0.4808cm">
                    <fo:table-column column-width="2.2cm"/>
                    <fo:table-column column-width="0.750cm"/>
                    <fo:table-column column-width="2.75cm"/>
                    <fo:table-body font-size="11pt" color="#000000">
                        <fo:table-row color="#000000" height="0.4808cm">
                            <fo:table-cell font-family="ArialBold"
font-weight="bold" font-size="10pt" color="#000000"
vertical-align="middle">
                                <fo:block text-align="left"
vertical-align="middle"> Paydate </fo:block>
                            </fo:table-cell>
                            <fo:table-cell>
                                <fo:block/>
                            </fo:table-cell>
                            <fo:table-cell font-family="Arial"
font-weight="normal" font-size="9pt" color="#000000">
                                <fo:block text-align="start"
vertical-align="middle">
                                    <xsl:for-each select="row">
                                        <xsl:choose>
                                            <xsl:when
test="data_display_type=3">
                                                <xsl:value-of
select="data_value"/>
                                            </xsl:when>
                                        </xsl:choose>
                                    </xsl:for-each>
                                </fo:block>
                            </fo:table-cell>
                        </fo:table-row>
                    </fo:table-body>
                </fo:table>
            </fo:block>
        </fo:block-container>

        <!-- Employee details on payslip -->
        <fo:block-container height="1.7974cm" left="0.7cm"
position="absolute" top="2.46955cm" width="13.30cm" border-width="0.5pt"
border-style="solid" border-color="#000000" padding-top="0.13cm"
padding-left="0.125cm">
            <fo:block font-family="ArialBold" font-weight="bold"
font-size="11.00pt" line-height="11.00pt" text-align="center">
                <fo:table table-layout="fixed" border-width="2pt"
border-color="#000000" height="1.7724cm">
                    <fo:table-column column-width="3.2cm"/>
                    <fo:table-column column-width="0.750cm"/>
                    <fo:table-column column-width="7.6cm"/>
                    <fo:table-body font-size="11pt" color="#000000">
                        <fo:table-row color="#000000" line-height="11pt"
height="0.5908cm">
                            <fo:table-cell font-family="ArialBold"
font-weight="bold" font-size="10pt" color="#000000"
vertical-align="bottom">
                                <fo:block text-align="left"
vertical-align="middle"> Employee Name </fo:block>
                            </fo:table-cell>
                            <fo:table-cell>
                                <fo:block/>
                            </fo:table-cell>
                            <fo:table-cell font-family="Arial"
font-weight="normal" font-size="9pt" color="#000000">
                                <fo:block text-align="start"
vertical-align="middle">
                                    <xsl:for-each select="row">
                                        <xsl:choose>
                                            <xsl:when
test="data_display_type=2 and display_order=10">
                                                <xsl:value-of
select="data_value"/>
                                            </xsl:when>
                                        </xsl:choose>
                                    </xsl:for-each>
                                </fo:block>
                            </fo:table-cell>
                        </fo:table-row>
                        <fo:table-row color="#000000" line-height="11pt"
height="0.5908cm">
                            <fo:table-cell font-family="ArialBold"
font-weight="bold" font-size="10pt" color="#000000"
vertical-align="bottom">
                                <fo:block text-align="left"
vertical-align="middle"> Employee Number </fo:block>
                            </fo:table-cell>
                            <fo:table-cell>
                                <fo:block/>
                            </fo:table-cell>
                            <fo:table-cell font-family="Arial"
font-weight="normal" font-size="9pt" color="#000000">
                                <fo:block text-align="start"
vertical-align="middle">
                                    <xsl:for-each select="row">
                                        <xsl:choose>
                                            <xsl:when
test="data_display_type=2 and display_order=20">
                                                <xsl:value-of
select="data_value"/>
                                            </xsl:when>
                                        </xsl:choose>
                                    </xsl:for-each>
                                </fo:block>
                            </fo:table-cell>
                        </fo:table-row>
                        <fo:table-row color="#000000" line-height="11pt"
height="0.5908cm">
                            <fo:table-cell font-family="ArialBold"
font-weight="bold" font-size="10pt" color="#000000"
vertical-align="middle">
                                <fo:block text-align="left"
vertical-align="middle"> Payment Method </fo:block>
                            </fo:table-cell>
                            <fo:table-cell>
                                <fo:block/>
                            </fo:table-cell>
                            <fo:table-cell font-family="Arial"
font-weight="normal" font-size="9pt" color="#000000">
                                <fo:block text-align="start"
vertical-align="middle">
                                    <xsl:for-each select="row">
                                        <xsl:choose>
                                            <xsl:when
test="data_display_type=2 and display_order=30">
                                                <xsl:value-of
select="data_value"/>
                                            </xsl:when>
                                        </xsl:choose>
                                    </xsl:for-each>
                                </fo:block>
                            </fo:table-cell>
                        </fo:table-row>
                    </fo:table-body>
                </fo:table>
            </fo:block>
        </fo:block-container>
        .
        .
        .
    </xsl:template>
</xsl:stylesheet>

Thanks
Atique

-----Original Message-----
From: G. Ken Holman [mailto:gkholman@xxxxxxxxxxxxxxxxxxxx]
Sent: 04 April 2008 11:50
To: Khan, Atique (IT)
Cc: Ogievetsky, Nikita (APPLICATION SERVICES)
Subject: Re: [xsl] Multi page pdf using fop-one page for each person tag

Atique,

You have a colleague in New York who knows all about this ... I have
copied Nikita Ogievetsky on this email.

. . . . . . . . . . . . Ken

At 2008-04-04 12:46 +0200, I wrote:
>At 2008-04-04 11:01 +0100, Khan, Atique \(IT\) wrote:
>>I need to convert my xml data using xsl-fo template into pdf using
fop.
>>My XML data looks like
>>
>><resultset>
>>     <person>
>>     ...
>>     </person>
>>     <person>
>>     ...
>>     </person>
>>     <person>
>>     ...
>>     </person>
>>     .
>>     .
>></resultset>
>>
>>Each of the person tags need to go into a separate page in the pdf.
>>Can somebody please guide me with a sample xsl-fo template.
>
>I hope this helps.
>
>. . . . . . . . . Ken
>
>T:\ftemp>type khan.xml
><resultset>
>     <person>
>     ...
>     </person>
>     <person>
>     ...
>     </person>
>     <person>
>     ...
>     </person>
></resultset>
>
>T:\ftemp>type khan.xsl
><?xml version="1.0" encoding="US-ASCII"?> <xsl:stylesheet
>xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
>                 xmlns="http://www.w3.org/1999/XSL/Format";
>                 version="2.0">
>
><xsl:output indent="yes"/>
>
><xsl:template match="/">
><root font-family="Times" font-size="20pt">
>
>   <layout-master-set>
>     <simple-page-master master-name="frame"
>                         page-height="297mm" page-width="210mm"
>                         margin-top="15mm" margin-bottom="15mm"
>                         margin-left="15mm" margin-right="15mm">
>       <region-body region-name="frame-body"/>
>     </simple-page-master>
>   </layout-master-set>
>   <xsl:apply-templates/>
></root>
></xsl:template>
>
><xsl:template match="person">
>   <page-sequence master-reference="frame">
>     <flow flow-name="frame-body">
>       <block>This is a person</block>
>     </flow>
>   </page-sequence>
></xsl:template>
>
></xsl:stylesheet>
>T:\ftemp>xslt2 khan.xml khan.xsl khan.fo
>
>T:\ftemp>type khan.fo
><?xml version="1.0" encoding="UTF-8"?>
><root xmlns="http://www.w3.org/1999/XSL/Format"; font-family="Times"
>font-size="2
>0pt">
>    <layout-master-set>
>       <simple-page-master master-name="frame" page-height="297mm"
> page-width="21
>0mm" margin-top="15mm"
>                           margin-bottom="15mm"
>                           margin-left="15mm"
>                           margin-right="15mm">
>          <region-body region-name="frame-body"/>
>       </simple-page-master>
>    </layout-master-set>
>     <page-sequence master-reference="frame">
>       <flow flow-name="frame-body">
>          <block>This is a person</block>
>       </flow>
>    </page-sequence>
>     <page-sequence master-reference="frame">
>       <flow flow-name="frame-body">
>          <block>This is a person</block>
>       </flow>
>    </page-sequence>
>     <page-sequence master-reference="frame">
>       <flow flow-name="frame-body">
>          <block>This is a person</block>
>       </flow>
>    </page-sequence>
></root>
>T:\ftemp>


--
Upcoming:  UBL Apr.22,24; genericode code lists Apr.23; Rome,Italy
World-wide corporate, govt. & user group XML, XSL and UBL training
RSS feeds:     publicly-available developer resources and training
G. Ken Holman                 mailto:gkholman@xxxxxxxxxxxxxxxxxxxx
Crane Softwrights Ltd.          http://www.CraneSoftwrights.com/m/
Box 266, Kars, Ontario CANADA K0A-2E0    +1(613)489-0999 (F:-0995)
Male Cancer Awareness Nov'07  http://www.CraneSoftwrights.com/m/bc
Legal business disclaimers:  http://www.CraneSoftwrights.com/legal
--------------------------------------------------------

NOTICE: If received in error, please destroy and notify sender. Sender does
not intend to waive confidentiality or privilege. Use of this email is
prohibited when received in error.

Current Thread