xsl:fo retrieve-marker not valid child

匿名 (未验证) 提交于 2019-12-03 02:33:02

问题:

I need for my xsl:fo transformation an <fo:retrieve-marker> in an table but I don't know if this is possible because I use FOP Processor for my transformation.

If i use the <fo:retrieve-marker> in my table I always get an error message that the tag has to be in an static content.

Here is the table with the marker

                <xsl:call-template name="MMEL-Table-Header"/>                  <!-- Bottom table Line  -->                 <fo:table-footer>                     <fo:table-row>                         <fo:table-cell>                                                                                                          <fo:marker marker-class-name="footer-continued"> <fo:inline>(continued)</fo:inline></fo:marker>                         </fo:table-cell>                     </fo:table-row>                  </fo:table-footer>                  <fo:table-body >                                     <xsl:variable name="identification">                         <xsl:value-of select="ident/message"/>                                                      </xsl:variable>                                            <xsl:apply-templates select="ident"><xsl:with-param name="ident" select="$identification"/></xsl:apply-templates>                     <xsl:apply-templates select="provisos/proviso"><xsl:with-param name="ident" select="$identification"/></xsl:apply-templates>                  <fo:table-row>                     <fo:table-cell> <fo:retrieve-marker retrieve-position="first-starting-within-page" retrieve-class-name="footer-continued" retrieve-boundary="document" /> </fo:table-cell>                 </fo:table-row>                 </fo:table-body>                        </fo:table>           

回答1:

(disclosure: I'm a FOP developer)

This example has dynamic table header and table footer, so it should cover your requirements:

  • if the table fits in a single page, both table header and table footer are empty
  • if the table is split over several pages
    • the table header is empty for the first page, and in the following ones it says "(continued)"
    • the table footer is empty for the last page, and in the previous ones it says "(continues on the next page)"
  • tested with FOP 2.0 (older versions did not support table markers); due to FOP's current limitations, the non-breaking space &#x00A0; in the table header and table footer is a necessary "placeholder" (the header / footer dimensions are computed just once, without marker content)
  • no formatter-specific extensions, so this could work with other formatters too (XslFormatter supports table markers; XEP has alternative workarounds)

FO fragment:

  <fo:table table-layout="fixed" width="100%">     <fo:table-column column-width="100%"/>     <fo:table-header>       <fo:table-row>         <fo:table-cell>           <fo:block>             <fo:retrieve-table-marker retrieve-class-name="mc1"                  retrieve-position-within-table="first-starting"                  retrieve-boundary-within-table="table-fragment"/>             &#x00A0;           </fo:block>         </fo:table-cell>       </fo:table-row>     </fo:table-header>     <fo:table-footer>       <fo:table-row>         <fo:table-cell>           <fo:block>             <fo:retrieve-table-marker retrieve-class-name="mc2"                  retrieve-position-within-table="last-ending"                  retrieve-boundary-within-table="table-fragment"/>             &#x00A0;           </fo:block>         </fo:table-cell>       </fo:table-row>     </fo:table-footer>     <fo:table-body>       <!-- first row -->       <fo:table-row>         <fo:table-cell>           <fo:block>             <fo:marker marker-class-name="mc1"></fo:marker>             <fo:marker marker-class-name="mc2">(continues on the next page)</fo:marker>             cell1           </fo:block>         </fo:table-cell>       </fo:table-row>       <!-- middle row -->       <fo:table-row>         <fo:table-cell>           <fo:block>             <fo:marker marker-class-name="mc1">(continued)</fo:marker>             <fo:marker marker-class-name="mc2">(continues on the next page)</fo:marker>             cell2           </fo:block>         </fo:table-cell>       </fo:table-row>       <!-- ... other similar rows ... -->       <!-- last row -->       <fo:table-row>         <fo:table-cell>           <fo:block>             <fo:marker marker-class-name="mc1">(continued)</fo:marker>             <fo:marker marker-class-name="mc2"></fo:marker>             cell9           </fo:block>         </fo:table-cell>       </fo:table-row>     </fo:table-body>   </fo:table> 


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!