2

FOP を使用して xsl と xml を pdf にレンダリングする際に問題があります。私のテーブルには多くの行がある可能性があり、1 ページに 15 行しか必要ありません。いくつかの解決策を試しましたが、その多くはうまくいきません。何か間違ったことをしているのか、それとも単にこれを処理する方法がわからないだけなのかわかりません。誰かがそれを変更してpdfで複数のページにレンダリングする方法に答えてくれたらありがたいです。初めての投稿なので間違っていたらすみません。

コードは再び更新されますが、それでも for-each を壊すことはできません。複数のページにレンダリングできるようになりましたが、下のすべてを切り取った 1 つのページでテーブルをレンダリングしています。

 <?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>
4

2 に答える 2

0

次のことを試しましたか?

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

テーブルの最初の行がまだページの一番上にない場合は、代わりにこれが必要になります。

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

これは<fo:table-row>開始タグの後に続きます。

于 2013-09-24T20:35:46.420 に答える