2014-09-24 3 views
1

Я использую xsl fo и apache fop для создания PDF-документов. У меня есть разные fo-последовательности страниц (обложка, toc, отпечаток и «основное содержание»).Запретить пустую страницу на последней стороне в xsl fo

В основном содержании я обрабатываю данные из XML-файла, это нормально.

В начале основного содержимого я начал подсчитывать страницы и показывать это внизу/справа. С этим у меня возникла проблема, заключавшаяся в том, что она покажет пустую страницу перед «основным контентом», я могу решить эту проблему, добавив «force-page-count =« no-force »в предыдущей странице.

Но у меня есть пустой страницы после последовательности основного контента, любая идея, как я могу решить эту проблему

последовательности страниц перед основным содержанием:

<fo:page-sequence master-reference="imprint" force-page-count="no-force"> 
... 
</fo:page-sequence> 

основного содержания:

<fo:page-sequence master-reference="per-Gruppe" initial-page-number="1"> 
       <fo:static-content flow-name="header"> 
        <xsl:call-template name="doc-header" match=""/> 
        <fo:block/> 
       </fo:static-content> 
       <fo:static-content flow-name="footer"> 
        <xsl:call-template name="doc-footer"/> 
        <fo:block/> 
       </fo:static-content> 
       <fo:flow flow-name="xsl-region-body"> 
        <xsl:for-each select="//lb"> 
         <xsl:call-template name="Kapitel" select="name"/> 
         <xsl:for-each select="per-group/pe"> 
          <xsl:call-template name="st.Table" select="."/> 
         </xsl:for-each> 
         <xsl:for-each select="cu-group/cu"> 
          <xsl:call-template name="st.Table" select="."/> 
         </xsl:for-each> 
         <xsl:if test="position()=last()"> 
          <fo:block id="lastpage"/> 
         </xsl:if> 
        </xsl:for-each> 
       </fo:flow> 
      </fo:page-sequence> 

Любое предложение нс?

Спасибо.

ответ

2

ОК, я решаю его. Я делаю следующие шаги.

  1. Я поместил для каждого цикла за пределы последовательности страниц.
  2. тогда я прилагаю последовательность с XSL: выбрать, в XSL: выберите я проверить позицию
  3. с результатом я называю шаблон последовательности страниц и -> «st.table» шаблон
  4. в template (st.table) Я проверяю результат, и если это последняя позиция, я устанавливаю последнюю страницу, и я не могу установить свойство «перерыв страницы» (вот почему я получаю пустую страницу в конце)

страница последовательности:

<xsl:for-each select="//lb"> 
       <xsl:choose> 
        <xsl:when test="position() = 1"> 
         <fo:page-sequence master-reference="per-Gruppe" initial-page-number="1"> 
          ... 
         </fo:page-sequence> 
        </xsl:when> 
        <xsl:otherwise> 
         <fo:page-sequence master-reference="per-Gruppe"> 
          ... 
          <fo:flow flow-name="xsl-region-body"> 
           ... 
           <xsl:for-each select="cu-group/cu"> 
            <xsl:call-template name="st.Table" select="."> 
             <xsl:with-param name="last_pos" select="$last_pos" /> 
            </xsl:call-template> 
           </xsl:for-each> 
          </fo:flow> 
         </fo:page-sequence> 
        </xsl:otherwise> 
       </xsl:choose> 
      </xsl:for-each> 

template:

<xsl:template name="st.Table" match="."> 
     <xsl:param name="last_pos" select="false()" /> 
     ... 
     <xsl:if test="$last_pos"> 
      <fo:block id="lastpage"/>  
     </xsl:if> 
     <xsl:if test="$last_pos=false()"> 
      <fo:block page-break-after="always" /> 
     </xsl:if> 
    </xsl:template>