2013-09-09 5 views
0

Ниже код пытался вызвать шаблоны, тело - повторяющаяся таблица может охватывать несколько страниц. Если я попытаюсь сделать PDF из этого, он даст только одну страницу, которая переполнена и не войдет в следующую страницу. Любые идеи относительно того, что я делаю неправильно здесь?xsl: fo не создает многостраничный PDF-файл, отличающийся от разрыва страницы

<xsl:template match="/"> 
    <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format"> 
     <!-- ================================= OVERALL LAYOUT======================= --> 
     <fo:layout-master-set> 
      <!-- ========= LAYOUT ========= --> 
      <fo:simple-page-master master-name="any-page" page-width="210mm" page-height="296mm" margin-left="0mm" margin-top="0mm"> 
       <fo:region-body margin-bottom="2.1cm" margin-top="5.40cm" margin-left="0cm" margin-right="0cm" padding="0cm"/> 
       <fo:region-before region-name="header" extent="85mm"/> 
       <fo:region-after region-name="footer" extent="81mm"/> 
      </fo:simple-page-master> 
      <!-- ========= OVERALL LAYOUT ========= --> 
      <fo:page-sequence-master master-name="A4"> 
       <fo:repeatable-page-master-alternatives> 
        <fo:conditional-page-master-reference master-reference="any-page" page-position="any"/> 
       </fo:repeatable-page-master-alternatives> 
      </fo:page-sequence-master> 
     </fo:layout-master-set> 
     <!-- =================================CONTENT TEMPLATE CALL================================= --> 
     <xsl:for-each select="//XY"> 
      <fo:page-sequence master-reference="A4"> 
       <!-- ========= HEADER ========= --> 
       <fo:static-content flow-name="header"> 
        <fo:block break-before="page"/> 
        <xsl:choose> 
         <xsl:when test="XY = 'XY "> 
          <xsl:call-template name="XY_HEADER"/> 
         </xsl:when> 
         <xsl:otherwise> 
          <xsl:call-template name="YY_HEADER"/> 
         </xsl:otherwise> 
        </xsl:choose> 
       </fo:static-content> 
       <!-- ========= FOOTER ========= --> 
       <fo:static-content flow-name="footer"> 
        <xsl:choose> 
         <xsl:when test="XY = 'XY' "> 
          <xsl:call-template name="XY_FOOTER"/> 
         </xsl:when> 
         <xsl:otherwise> 
          <xsl:call-template name="YY_FOOTER"/> 
         </xsl:otherwise> 
        </xsl:choose> 
       </fo:static-content> 
       <!-- ========= BODY ========= --> 
       <fo:flow flow-name="xsl-region-body"> 
        <xsl:choose> 
         <xsl:when test="XY = 'XY' "> 
          <xsl:call-template name="XY_BOD"/> 
         </xsl:when> 
         <xsl:otherwise> 
          <xsl:call-template name="YY_BOD"/> 
         </xsl:otherwise> 
        </xsl:choose> 
        <xsl:if test="position()=last()"> 
         <fo:block id="last-page"/> 
        </xsl:if> 
       </fo:flow> 
      </fo:page-sequence> 
     </xsl:for-each> 
    </fo:root> 
</xsl:template> 
    <xsl:template name="XY_BODY" xmlns:fo="http://www.w3.org/1999/XSL/Format"> 
    <fo:block-container position="absolute" left="5mm" top="95mm" height="200mm" width="200mm"> 
     <fo:block text-align="left" font-size="3mm" page-break-before="always"> 
      <fo:table table-layout="fixed" height="10.4cm" width="27cm" top="0.7cm" left="0cm" padding="0mm" position="absolute" font-size="10"> 
       <fo:table-body> 
       .. 
       ... 
       </fo:table-body> 
      </fo:table> 
     </fo:block> 
    </fo:block-container> 
    <fo:block-container position="absolute" left="5mm" top="286mm" height="5mm" width="200mm"> 
     <fo:block padding-left="1mm" text-align="right"> 
      <fo:page-number/> of <fo:page-number-citation ref-id="last-page"/> 
     </fo:block> 
    </fo:block-container> 
</xsl:template> 
+0

Разрыв страницы в FO - это автоматический процесс, или вы можете использовать разрывы страниц. Мне кажется, что у вашей таблицы есть дюжина номеров или столбцов, которые не могут соответствовать вашему предоставленному формату формата бумаги. Вы можете уменьшить длину столбца, обернуть текст или изменить размер бумаги, чтобы получить желаемый результат. –

+0

Изменение длины не помогает, она должна автоматически перетекать на следующую страницу, но это не так. Вот что меня тошнило. – user2760266

+0

Пожалуйста, измените свою последовательность страниц, которую вы создаете, с элементом . Это не обязательно. FO будет заботиться об этом автоматически. Используйте их только для каждого потока тела. Посмотрите http://www.learn-xsl-fo-tutorial.com/Page-Layout.cfm#h1.3. –

ответ

1

Ваша проблема заключается в том, что вы используете абсолютно позиционированием блок контейнера: он инкапсулирует таблицу на одной странице, и поэтому ваша таблица не порывая на новую страницу. Если вы не использовали контейнер с абсолютно позиционированным блоком, тогда ваша таблица будет бесплатной для включения разрыва страницы и регулярного потока страниц.

 Смежные вопросы

  • Нет связанных вопросов^_^