xsl-list
[Top] [All Lists]

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

2008-04-04 03:57:32
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(_at_)CraneSoftwrights(_dot_)com] 
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(_at_)CraneSoftwrights(_dot_)com
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.

--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--

<Prev in Thread] Current Thread [Next in Thread>