[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

Table Proportional Column Width

Subject: Table Proportional Column Width
From: siarom egrub <egrubs@xxxxxxxxx>
Date: Sun, 22 Oct 2006 23:14:23 -0700 (PDT)
proportional column width
Hi all,

I am trying to get proportional column widths to work
in XSL for table PDF output. The table cells are
displaying with equal dimensions, even though the
colwidth are not equal values and the text isn't
wrapping. This causes text overflow into other cells.
How can I get the colwidth attribute values in colspec
convert/output as proportional-column-width in
fo:table-column? Please see my sample XML and XSL
below.

I certainly hope my question is comprehensible. I will
try to provide more details if needed. I really
appreciate your help. Thanks in advance!

Regards
S. Egrub

<table colsep="1" frame="all" rowsep="1">
     <title>References</title>
     <tgroup cols="4" colsep="1" rowsep="1">
         <colspec align="center" colname="col1"
colnum="1" colwidth="1.5*"/>
         <colspec align="center" colname="col2"
colnum="2" colwidth="3*"/>
         <colspec align="center" colname="col3"
colnum="3" colwidth="4*"/>
         <colspec align="center" colname="col4"
colnum="4" colwidth="3*"/>
         <thead>
             <row>
	             <entry align="center">
	                 <para>INTERVAL</para>
	             </entry>
	             <entry align="center">
	                 <para>SAMPLE</para>
	             </entry>
	             <entry align="center">
	                 <para>CONVENTIONAL</para>
	             </entry>
	             <entry align="center">
	                 <para>UNITS</para>
	             </entry>
             </row>
         </thead>
         <tbody>
             <row>
                 <entry morerows="5" valign="middle">
                     <para>Literature</para> 	
    	         </entry>
                 <entry>
                     <para>Serum</para>
                 </entry>
                 <entry>
                     <para>10 to 25</para>
                 </entry>
                 <entry>
                     <para>17.5 to 44.8</para> 						 
                 </entry>
             </row>
         </tbody>
     </tgroup>
</table>

<xsl:template match="table">
         <fo:block text-align="center"
space-before="3mm" space-after="2.25mm"
font-size="8pt" keep-together="always">
			 <fo:block text-align="left" space-after="1mm"
font-weight="bold">
			 	 <xsl:apply-templates select="title"/>
			 </fo:block>
             <xsl:apply-templates select="tgroup"/>
         </fo:block>
         <!--Display footnotes which are referenced in
tables-->
         <fo:block space-before.optimum="0.75pt"
space-after.optimum="6pt" font-size="6.5pt">
             <xsl:if
test="descendant::entry/para/footnote">
                 <xsl:value-of
select="descendant::entry/para/footnote/@label"/>&#160;&#160;
                 <xsl:value-of
select="descendant::entry/para/footnote"/>            

             </xsl:if>
         </fo:block>
     </xsl:template>
      
     <xsl:template match="tgroup">
         <xsl:choose>
			 <xsl:when test="ancestor::table/@frame='all'">
                 <fo:table  border="1pt solid black">
                     <fo:table-header>
                         <fo:table-row
line-height="12pt" font-size="8pt" font-weight="bold">
                         <fo:table-cell
border-right-style="solid" border-bottom-style="solid"
border-width="1pt" padding-start="4pt"
padding-top="3pt"
			     padding-bottom="3pt" display-align="before">
                             <xsl:apply-templates
select="colspec"/></fo:table-cell>
                         </fo:table-row>
                     </fo:table-header>
                     <xsl:apply-templates
select="thead"/>
                     <xsl:apply-templates
select="tbody"/>
                 </fo:table>
             </xsl:when>
             <xsl:when
test="ancestor::table/@frame='none'">
                 <fo:table>
                     <fo:table-header>
                         <fo:table-row
line-height="12pt" font-size="8pt" font-weight="bold">
                             <xsl:apply-templates
select="colspec"/>
                         </fo:table-row>
                     </fo:table-header>
                     <xsl:apply-templates
select="thead"/>
                     <xsl:apply-templates
select="tbody"/>
                 </fo:table>
             </xsl:when> 
		 </xsl:choose>
     </xsl:template>
        
     <xsl:template match="colspec">
         <fo:table-column><!--
             <fo:table-cell border-right-style="solid"
border-bottom-style="solid" border-width="1pt"
padding-start="4pt" padding-top="3pt"
			     padding-bottom="3pt"
display-align="before"></fo:table-cell>-->
                 <xsl:attribute name="column-number">
                     <xsl:number count="colspec"/>
                 </xsl:attribute>
                 <xsl:attribute name="column-width">
                     <xsl:call-template
name="calc.column.width">
                         <xsl:with-param
name="colwidth">
                             <xsl:value-of
select="@colwidth"/>
                         </xsl:with-param>
                     </xsl:call-template>
                 </xsl:attribute>
         </fo:table-column> 
     </xsl:template>
     
     <xsl:template match="thead">
         <fo:table-body font-weight="bold">
             <xsl:apply-templates select="row"/>
         </fo:table-body>
     </xsl:template>
     
     <xsl:template match="tbody">
         <fo:table-body>
             <xsl:apply-templates select="row"/>
         </fo:table-body>
     </xsl:template>
     
     <xsl:template match="row">
         <fo:table-row line-height="8pt">
             <xsl:apply-templates select="entry"/>
         </fo:table-row>
     </xsl:template>     
     
     <xsl:template match="entry">
         <fo:table-cell>
             <xsl:call-template name="cell-span"/>
         </fo:table-cell>
     </xsl:template>     
     
     <xsl:template name="calc.column.width">
         <xsl:param name="colwidth">1*</xsl:param>
         <xsl:if test="contains($colwidth, '*')">
            
<xsl:text>proportional-column-width(</xsl:text>
             <xsl:value-of
select="substring-before($colwidth, '*')"/>
             <xsl:text>)</xsl:text>
         </xsl:if>
         <!-- Now get the non-proportional part of the
specification -->
         <xsl:variable name="width-units">
             <xsl:choose>
                 <xsl:when test="contains($colwidth,
'*')">
                     <xsl:value-of
select="normalize-space(substring-after($colwidth,
'*'))"/>
                 </xsl:when>
                 <xsl:otherwise>
                     <xsl:value-of
select="normalize-space($colwidth)"/>
                 </xsl:otherwise>
             </xsl:choose>
         </xsl:variable>
     </xsl:template>

__________________________________________________
Do You Yahoo!?
Tired of spam?  Yahoo! Mail has the best spam protection around 
http://mail.yahoo.com 

Current Thread

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.