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

XSL-FO: Creating Marginalias with Apache FOP

Subject: XSL-FO: Creating Marginalias with Apache FOP
From: "Gerhard Glatz" <Gerhard21@xxxxxxx>
Date: Mon, 01 Nov 2010 16:17:19 +0100
 XSL-FO: Creating Marginalias with Apache FOP
Hello,

I am trying to create a PDF with marginalias (side notes) with Apache FOP 1.0.
Since FOP does not support the "float" concept of FO, I am trying to use a table with two columns; the first one for the marginalia, the second one for the main text.
As the marginalia can consist of more lines than the following main text, I am trying to use a table inside of a table:

Here is the xml (the number and order of maintextX and marginaliaX varies):
<root>
  ...
  <body>
    <marginalia1>number</marginalia1>
    <title>title</title>
    <body_info>
      <maintext1>ipsum lorem</maintext1>
      <maintext2>consectetur</maintext2>

      <marginalia2>ut enim</marginalia2>  
      <maintext2>consequat r</maintext2>
      <maintext3>consequat r</maintext3>

      <marginalia2>ut enim</marginalia1>
      <maintext4>consequat r</maintext4>    
    <body_info>
  </body>
  ...
</root>

My PDF output should look like this:

-----------------------------------------------
| <marginalia1> | (Nested table:) <title>     |
|               |                             |
|               |-----------------------------|
|               | (Nested table:) <maintext1> |
|               |                             |
|               |-----------------------------|
|               | (Nested table:) <maintext2> |
|               |                             |
|---------------------------------------------|
| <marginalia2> | (Nested table:) <maintext2> |
|               |                             |
|               |-----------------------------|
|               | (Nested table:) <maintext3> |
|               |                             |
|---------------------------------------------|
| <marginalia3> | (Nested table:) <maintext4> |
|               |                             |
-----------------------------------------------

But with my stylesheet below the table looks like this, of course:

-----------------------------------------------
| <marginalia1> | (Nested table:) <title>     |
|               |                             |
|               |-----------------------------|
|               | (Nested table:) <maintext1> |
|               |                             |
|               |-----------------------------|
|               | (Nested table:) <maintext2> |
|               |                             |
|               |-----------------------------|
|               | (Nested table:) <maintext2> |
|               |                             |
|               |-----------------------------|
|               | (Nested table:) <maintext3> |
|               |                             |
|               |-----------------------------|
|               | (Nested table:) <maintext4> |
|               |                             |
|---------------------------------------------|
| <marginalia2> | (Nested table:) <maintext1> |
|               |                             |
|               |-----------------------------|
|               | (Nested table:) <maintext2> |
|               |                             |
|               |-----------------------------|
|               | (Nested table:) <maintext2> |
|               |                             |
|               |-----------------------------|
|               | (Nested table:) <maintext3> |
|               |                             |
|               |-----------------------------|
|               | (Nested table:) <maintext4> |
|               |                             |
|---------------------------------------------|
| <marginalia3> | [etc]                       |
|               |                             |
-----------------------------------------------

Here is my xslt:

...
<xsl:template match="body">
  <fo:table table-layout="fixed" width="100%">
    <fo:table-column column-width="51mm"/> 
  <fo:table-column column-width="109mm"/>
    <fo:table-body>
      <xsl:call-template name="marginalia"/>
    </fo:table-body>
  </fo:table>
</xsl:template>


<xsl:template name="marginalia">
  <xsl:for-each select="marginalia1">
    <fo:table-row>
      <fo:table-cell  border-width="0.1mm" border-style="solid"> 
        <fo:block>
          <xsl:value-of select="."/>
        </fo:block>
      </fo:table-cell>
      <fo:table-cell  border-width="0.1mm" border-style="solid"> 
        <fo:table table-layout="fixed" width="100%">
          <fo:table-column column-width="109mm"/> 
          <fo:table-body>
            <xsl:apply-templates select="parent::body/title"/>
            <xsl:apply-templates select="parent::body/body_info" />
          </fo:table-body>
        </fo:table>  
      </fo:table-cell>
    </fo:table-row>
  </xsl:for-each>

  <xsl:for-each select="body_info/marginalia2">
    <fo:table-row>
      <fo:table-cell  border-width="0.1mm" border-style="solid">
        <fo:block>
          <fo:inline>
            <xsl:value-of select="."/> 
          </fo:inline>
        </fo:block>
      </fo:table-cell>
      <fo:table-cell  border-width="0.1mm" border-style="solid"> 
        <fo:table table-layout="fixed" width="100%">
          <fo:table-column column-width="109mm"/>
          <fo:table-body>
            <xsl:apply-templates select="ancestor::body/body_info" />
          </fo:table-body>
        </fo:table>  
      </fo:table-cell>
    </fo:table-row>
  </xsl:for-each>
</xsl:template>  

<xsl:template match="maintext2"> <!-- and maintext3 and 4 -->
  <fo:table-row>
    <fo:table-cell  border-width="0.1mm" border-style="solid"> 
      <fo:block>
        <fo:inline xsl:use-attribute-sets="text">
          <xsl:value-of select="."/>
        </fo:inline>
      </fo:block>
    </fo:table-cell>
  </fo:table-row>
</xsl:template>


I don't know how to arrange the template to get the desired way.
Has anybody a helpful hint? Or maybe it is not possible at all?

Thank you very much.
Gerhard
-- 
Gerhard Glatz
SophienstraCe 93
76135 Karlsruhe

Fon: 0721/691650
Mobil: 0163/9041413

Neu: GMX De-Mail - Einfach wie E-Mail, sicher wie ein Brief!  
Jetzt De-Mail-Adresse reservieren: http://portal.gmx.net/de/go/demail

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.