Ниже код пытался вызвать шаблоны, тело - повторяющаяся таблица может охватывать несколько страниц. Если я попытаюсь сделать 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>
Разрыв страницы в FO - это автоматический процесс, или вы можете использовать разрывы страниц. Мне кажется, что у вашей таблицы есть дюжина номеров или столбцов, которые не могут соответствовать вашему предоставленному формату формата бумаги. Вы можете уменьшить длину столбца, обернуть текст или изменить размер бумаги, чтобы получить желаемый результат. –
Изменение длины не помогает, она должна автоматически перетекать на следующую страницу, но это не так. Вот что меня тошнило. – user2760266
Пожалуйста, измените свою последовательность страниц, которую вы создаете, с элементом. Это не обязательно. FO будет заботиться об этом автоматически. Используйте их только для каждого потока тела. Посмотрите http://www.learn-xsl-fo-tutorial.com/Page-Layout.cfm#h1.3. –