W3C home > Mailing lists > Public > www-xsl-fo@w3.org > September 2003

Re: Newby help with <fo:flow>

From: Colin Savage <sav912@hotmail.com>
Date: Tue, 9 Sep 2003 09:01:07 +0200
To: "W3C XSL-FO Mailing list" <www-xsl-fo@w3.org>
Message-ID: <BAY7-DAV41RsUdigM4o00044e1e@hotmail.com>

To solve one part of your problem you can use the "column-count" attribute
on the region body to create the 3 columns, and the "span" attribute on the
heading fo:block to get the heading to span across all 3 columns.

As for getting the columns to start filling in the first column after the
filling the third column...dunno, the only thing i can think of is to break
onto the next page.

Colin

----- Original Message ----- 
From: "Robin Harvey" <rh@harrogatesoftware.com>
To: "W3C XSL-FO Mailing list" <www-xsl-fo@w3.org>
Sent: Monday, September 08, 2003 5:51 PM
Subject: Newby help with <fo:flow>


>
> Hi.
>
> I'm new to xsl-fo, and was getting on just fine before i ran in to this
> brick wall.  I have a long list of data in XML that i want to format into
a
> book.  The data needs to flow in 3 columns, and all 3 colunms need to be
> broken by headings, like so:
>
> heading 1
>
> 1   4   7
> 2   5   8
> 3   6
>
> heading 2
>
> 1   6   11
> 2   7   12
> 3   8   13
> 4   9   14
> 5   10
>
> etc.
>
>
> I've found a way of flowing in 3 columns, but the headings appear in the
> columns, like this:
>
> heading1     5       1
>    1         6       2
>    3         7       3
>    4         8       4
>    4      heading2
>
> I've tried using separate tables for the headings and the data, with a
> number-columns-spanned="3" in the table holding the heading, but it made
no
> difference.  I also tried using separate rows for the header and the data,
> but again it made no difference.
> I think what i need to do is have a nested flow within the main
> "xsl-region-body" flow, to hold the heading and stop it flowing with the
> rest of the data, but i can't find how to do this.  Can someone help me
> please?  Is it possible to nest flows within the same document, or am i
> missing a trick??  Here is a listing of the xsl stylesheet i am using.  I
am
> using Sablotron XSLT parser and FOP XSL-FO PDF generator.
>
> <?xml version="1.0"?>
> <xsl:stylesheet version="1.0"
> xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
>
> <xsl:template match="/">
>   <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
>
>   <fo:layout-master-set>
>     <fo:simple-page-master master-name="data_main"
>       page-width="21cm"
>       page-height="29.7cm">
>       <fo:region-body column-count="3" column-gap="0.3in" margin="1in"/>
>       <fo:region-before extent="0.9in"/>
>     </fo:simple-page-master>
>   </fo:layout-master-set>
>
>   <fo:page-sequence master-reference="data_main">
>
>     <fo:static-content flow-name="xsl-region-before">
>       <fo:block text-align="center" font-family="Times" font-size="10">
>         <fo:page-number/>
>       </fo:block>
>     </fo:static-content>
>     <fo:static-content flow-name="xsl-footnote-separator">
>       <fo:block>
>         <fo:leader leader-pattern="rule" leader-length="100%"
>           rule-thickness="0.5pt" color="#007044"/>
>       </fo:block>
>     </fo:static-content>
>
>     <fo:flow flow-name="xsl-region-body">
>       <xsl:for-each select="/root/specialty">
>         <!-- THIS TABLE FOR THE HEADER - DOESNT SPAN 3 COLUMNS -->
>         <fo:table table-layout="fixed">
>           <fo:table-column column-width="136px"/>
>           <fo:table-body>
>             <fo:table-row>
>               <fo:table-cell number-columns-spanned="3"
>                 border-style="solid">
>                 <fo:block space-before="18pt"
>                   font-family="sans-serif"
>                   font-size="16pt"
>                   line-height="18pt"
>                   text-align="center">
>                     <xsl:value-of select="@name"/>
>                 </fo:block>
>               </fo:table-cell>
>             </fo:table-row>
>           </fo:table-body>
>         </fo:table>
>
>         <fo:wrapper text-align="start">
>         <fo:table table-layout="fixed">
>           <!-- THIS TABLE FOR THE DATA - FLOWS IN 3 COLUMNS OK -->
>           <fo:table-column column-width="136px"/>
>             <fo:table-body>
>               <fo:table-row>
>                 <fo:table-cell border-style="solid">
>                   <xsl:for-each select="consultant">
>                     <fo:block space-before="9pt"
>                       font-family="sans-serif"
>                       font-size="12pt"
>                       line-height="16pt"
>                       background-color="blue"
>                       color="white"
>                       text-align="center">
>                       <xsl:value-of select="title"/>
>                         <xsl:text> </xsl:text>
>                       <xsl:if test="fnames != ''">
>                         <xsl:value-of select="fnames"/>
>                           <xsl:text> </xsl:text>
>                       </xsl:if>
>                       <xsl:value-of select="snames"/>
>                     </fo:block>
>                     <fo:block space-before="4pt"
>                       font-family="sans-serif"
>                       font-size="8pt">
>                       Consultant in <xsl:value-of select="spec_desc"/>
>                     </fo:block>
>                     <xsl:if test= "spec_int != ''">
>                       <fo:block space-before="4pt"
>                         font-family="sans-serif"
>                           font-size="8pt"
>                           keep-together.within-column="always">
>                         <fo:inline font-style="italic">Special Interests:
>                         </fo:inline>
>                         <xsl:value-of select="spec_int"/>
>                       </fo:block>
>                     </xsl:if>
>                   </xsl:for-each>
>                 </fo:table-cell>
>               </fo:table-row>
>             </fo:table-body>
>           </fo:table>
>           </fo:wrapper>
>       </xsl:for-each>
>     </fo:flow>
>   </fo:page-sequence>
> </fo:root>
> </xsl:template>
> </xsl:stylesheet>
>
> Thanks in advance for any assistance.
>
> Robin Harvey
>
> p.s. - i've had to make extensive use of <xsl:for-each> because when i
used
> 'external' templates i got name space errors popping up (in sablotron).
Is
> there any way of transfering the fo namespace into a second (or third)
> template??
>
>
Received on Tuesday, 9 September 2003 08:43:15 GMT

This archive was generated by hypermail 2.2.0+W3C-0.50 : Wednesday, 3 October 2007 16:06:11 GMT