Question

I have problem with rendering my xsl and xml into pdf by using FOP. My table could have a lot of rows and I need just 15 on one page I've tried several solutions and alot of them doesn't work for me. I don't know if I'm doing something wrong or just I don't know how to handle this. I will be thankfull if someone could answer me how to change it to render it into more than one page in pdf. This is my first post so sorry if I've done some mistakes.

Code is updated again, it still can't break for-each. Now it can render into several pages but it's still rendering table in one page with cutting everything below

 <?xml version="1.0" encoding="UTF-8"?> 


<xsl:stylesheet version="1.0" 
            xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
            xmlns:fo="http://www.w3.org/1999/XSL/Format" >

<xsl:output method="xml" version="1.0" indent="yes" encoding="UTF-8"/>
<xsl:template match="mydata" >      
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format"> 

    <fo:layout-master-set>
      <fo:simple-page-master  master-name="summarypage"
                              page-height="11in"
                              page-width="8.5in"
                              margin-top="10mm"
                              margin-bottom="10mm"
                              margin-left="10mm"
                              margin-right="10mm">                             
      <fo:region-body /> 
    </fo:simple-page-master>
  </fo:layout-master-set>

    <fo:page-sequence master-reference="summarypage" >
      <fo:flow flow-name="xsl-region-body" >       
        <fo:block text-align="center"
                  font-size="18pt"
                  font-weight="bold">
           Number: <xsl:value-of select="title/number"/>                    
        </fo:block>



        <fo:block>
            <fo:block-container position="absolute" top="100pt" left="5pt" height="40pt" width="100%">
                <fo:block   text-align="left" 
                            font-size="13pt"
                            font-weight="bold">
                    Seller:
                </fo:block>     
            </fo:block-container>
            <fo:block-container position="absolute" top="100pt" left="400pt" height="40pt" width="100%">
                <fo:block   font-size="13pt"
                            font-weight="bold">
                    Buyer:
                </fo:block>     
            </fo:block-container>                   
        </fo:block>


        <fo:block   font-size="10pt">
                    <fo:block-container position="absolute"  top="130pt" left="5pt"
                    height="40pt" width="100%">
                        <fo:block>
                            <xsl:value-of select="person/seller/name"/> </fo:block>
                    </fo:block-container>
                    <fo:block-container position="absolute"  top="130pt" left="400pt"
                    height="40pt" width="100%">
                        <fo:block>
                            <xsl:value-of select="person/buyer/name"/> </fo:block>
                    </fo:block-container>       
        </fo:block>

        <fo:block   font-size="10pt">
                    <fo:block-container position="absolute"  top="145pt" left="5pt"
                    height="40pt" width="100%">
                        <fo:block>
                            <xsl:value-of select="person/seller/address"/> </fo:block>
                    </fo:block-container>
                    <fo:block-container position="absolute"  top="145pt" left="400pt"
                    height="40pt" width="100%">
                        <fo:block>
                            <xsl:value-of select="person/buyer/address"/> </fo:block>
                    </fo:block-container>       
        </fo:block>

        <fo:block   font-size="10pt">
                    <fo:block-container position="absolute"  top="160pt" left="5pt"
                    height="40pt" width="100%">
                        <fo:block>
                            <xsl:value-of select="person/seller/land"/> </fo:block>
                    </fo:block-container>
                    <fo:block-container position="absolute"  top="160pt" left="400pt"
                    height="40pt" width="100%">
                        <fo:block>
                            <xsl:value-of select="person/buyer/land"/> </fo:block>
                    </fo:block-container>       
        </fo:block>

        <fo:block   font-size="10pt">
            <fo:block-container position="absolute"  top="175pt" left="5pt"
            height="40pt" width="100%">
                <fo:block>
                    tel. 
                    <xsl:value-of select="person/seller/tel"/> </fo:block>
            </fo:block-container>
            <fo:block-container position="absolute" top="175pt" left="400pt"
            height="40pt" width="100%">
                <fo:block>
                    tel. 
                    <xsl:value-of select="person/buyer/tel"/> </fo:block>
            </fo:block-container>       
        </fo:block>

        <fo:block   font-size="10pt">
            <fo:block-container position="absolute"  top="190pt" left="5pt"
            height="40pt" width="100%">
                <fo:block>
                    mail: 
                    <xsl:value-of select="person/seller/email"/> </fo:block>
            </fo:block-container>
            <fo:block-container position="absolute"  top="190pt" left="400pt"
            height="40pt" width="100%">
                <fo:block>
                    mail: 
                    <xsl:value-of select="person/buyer/email"/> </fo:block>
            </fo:block-container>       
        </fo:block>

        <fo:block-container top="100pt"  left="0pt" height="40pt" width="100%" text-align="center" table-layout="fixed" margin-top="200pt" margin-bottom="100pt">   

        <fo:table   border-collapse="collapse" font-size="12pt" font-family="Arial">
                    <fo:table-column column-width="7mm"  column-number="1"/>  
                    <fo:table-column column-width="60mm" column-number="2"/>  
                    <fo:table-column column-width="15mm" column-number="3"/>  
                    <fo:table-column column-width="10mm" column-number="4"/>  
                    <fo:table-column column-width="19mm" column-number="5"/>  
                    <fo:table-column column-width="30mm" column-number="6"/>  
                    <fo:table-column column-width="16mm" column-number="7"/>  
                    <fo:table-column column-width="22mm" column-number="8"/>               
                    <fo:table-column column-width="16mm" column-number="9"/>  

                    <fo:table-header font-weight="bold">

                            <fo:table-row>

                                <fo:table-cell padding="2pt" border="1pt solid black">
                                    <fo:block> Nr. </fo:block>
                                </fo:table-cell>

                                <fo:table-cell padding="2pt" border="1pt solid black">
                                    <fo:block>Service</fo:block>
                                </fo:table-cell>

                                <fo:table-cell padding="2pt" border="1pt solid black">
                                    <fo:block>j.m </fo:block>
                                </fo:table-cell>

                                <fo:table-cell padding="2pt" border="1pt solid black">
                                    <fo:block>Amount </fo:block>
                                </fo:table-cell>

                                <fo:table-cell padding="2pt" border="1pt solid black">
                                    <fo:block>netto_price_per_amount</fo:block>
                                </fo:table-cell>

                                <fo:table-cell padding="2pt" border="1pt solid black">
                                    <fo:block>netto_value"</fo:block>
                                </fo:table-cell>

                                <fo:table-cell padding="2pt" border="1pt solid black">
                                    <fo:block>VAT_Percent</fo:block>                                                                              
                                </fo:table-cell>

                                <fo:table-cell padding="2pt" border="1pt solid black">
                                  <fo:block>VAT_tax</fo:block>                                                                              
                               </fo:table-cell>

                                <fo:table-cell padding="2pt" border="1pt solid black">
                                    <fo:block>brutto_value</fo:block>
                                </fo:table-cell>

                            </fo:table-row>

                    </fo:table-header>

                    <fo:table-body  >

                        <xsl:for-each select="items/item" >

                            <fo:table-row >

                              <xsl:if test="position() > 15 and position() mod 15 = 1">
                                <xsl:attribute name="break-before">page</xsl:attribute>
                              </xsl:if> 

                                    <fo:table-cell padding="2pt" border="1pt solid black"> 
                                            <fo:block><xsl:number/>.</fo:block>
                                    </fo:table-cell>
                                    <fo:table-cell padding="2pt" border="1pt solid black"> 
                                            <fo:block><xsl:value-of select="service" /></fo:block>
                                    </fo:table-cell>
                                    <fo:table-cell padding="2pt" border="1pt solid black"> 
                                            <fo:block><xsl:value-of select="jm" /></fo:block>
                                    </fo:table-cell>
                                    <fo:table-cell padding="2pt" border="1pt solid black">
                                            <fo:block><xsl:value-of select="amount" /></fo:block>
                                    </fo:table-cell>
                                    <fo:table-cell padding="2pt" border="1pt solid black">
                                            <fo:block><xsl:value-of select="netto_price_per_amount" /></fo:block>
                                    </fo:table-cell>
                                    <fo:table-cell padding="2pt" border="1pt solid black">
                                            <fo:block><xsl:value-of select="netto_value" /></fo:block>
                                    </fo:table-cell>                 
                                    <fo:table-cell padding="2pt" border="1pt solid black">
                                        <fo:block><xsl:value-of select="VAT_Percent" /></fo:block>
                                    </fo:table-cell>                                       
                                    <fo:table-cell padding="2pt" border="1pt solid black">
                                        <fo:block><xsl:value-of select="VAT_tax" /></fo:block>
                                    </fo:table-cell>                          
                                    <fo:table-cell padding="2pt" border="1pt solid black">
                                            <fo:block ><xsl:value-of select="brutto_value" /></fo:block>   
                                    </fo:table-cell>  

                            </fo:table-row>                                                                                  
                        </xsl:for-each>                                                                           
                    </fo:table-body>
        </fo:table>       
        </fo:block-container>        
    </fo:flow>
  </fo:page-sequence>
</fo:root> 
</xsl:template>
</xsl:stylesheet>
Was it helpful?

Solution

Your table is placed inside of an absolute positioned block container:

<fo:block-container  position="absolute"  top="250pt" left="0"
                        height="40pt" width="100%" text-align="center" >
...

It will only always render on the page it is placed.

OTHER TIPS

Have you tried the following?

<xsl:if test="position() mod 15 = 1">
   <xsl:attribute name="break-before">page</xsl:attribute>
</xsl:if>

If the first row of your table is not already at the top of the page, then you'll need this instead:

<xsl:if test="position() > 15 and position() mod 15 = 1">
   <xsl:attribute name="break-before">page</xsl:attribute>
</xsl:if>

This would go after your <fo:table-row> start tag.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top