Генерирую PDF из XML, все идет хорошо, как и ожидалось, проблема в том, что он генерирует одну дополнительную страницу.
Я подробно объяснил проблему ниже.
Номер страницы идет неправильно. Если у меня есть 20 строк в таблице, и я показываю 5 строк на странице (с верхним и нижним колонтитулами). Таким образом, он должен сгенерировать 4 страницы, а не 5 страниц PDF, а последняя страница имеет только заголовок и нижний колонтитул, что неверно.
Пожалуйста, найдите мой код таблицы стилей XSL ниже
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:js="urn:extra-functions">
<xsl:output method="html" indent="yes"/>
<xsl:template match="Data">
<html>
<head>
<title>Invoice</title>
</head>
<body>
<xsl:call-template name="Filler">
<xsl:with-param name="fillercount" select="1" />
</xsl:call-template>
<xsl:copy-of select="$OrderHeader"/>
<xsl:copy-of select="$OrderRowsHeader"/>
<xsl:for-each select="Order/OrderRows/OrderRow">
<table class="tabledetails" cellspacing="0" style="table-layout:fixed">
<tr>
<td class="tdmargin" />
<td style="width:70px" align="right" class="blueline">
<xsl:value-of select="ProductID" />
<xsl:value-of select="translate(' ', ' ', ' ')"/>
</td>
<td class="tdmargin" />
</tr>
</table>
<xsl:if test="(position() mod 40) = 0 ">
<!--40 rows per page-->
<xsl:call-template name="Filler">
<xsl:with-param name="fillercount" select="1" />
</xsl:call-template>
<br class="pagebreak" /> <br />
<xsl:copy-of select="$ReportHeader" />
<xsl:copy-of select="$OrderRecipient"/>
<xsl:call-template name="Filler">
<xsl:with-param name="fillercount" select="1" />
</xsl:call-template>
<xsl:copy-of select="$OrderHeader"/>
<xsl:copy-of select="$OrderRowsHeader"/>
</xsl:if>
</xsl:for-each>
<!--Filler -->
<xsl:choose>
<!-- case of only one page-->
<xsl:when test="count(delivery_receipt/order_items) <= 5">
<xsl:call-template name="Filler">
<xsl:with-param name="fillercount" select="5 - (count(delivery_receipt/order_items))"/>
</xsl:call-template>
</xsl:when>
<!-- case of more than one page-->
<xsl:otherwise>
<xsl:call-template name="Filler">
<!--(Rows per page = 5) - (Rows in current page) - (Total section rows = 1 ) + (Filler Row = 1)-->
<xsl:with-param name="fillercount" select="5 - ( ( count(delivery_receipt/order_items)-5 ) mod 5 ) - 3 + 1"/>
</xsl:call-template>
</xsl:otherwise>
</xsl:choose>
<!--End Filler -->
</body>
</html>
</xsl:template>
<!-- variable OrderHeader-->
<xsl:variable name="OrderHeader">
<table class="tabledetails" cellspacing="0" >
<tr>
<td class="tdmargin" />
<th>
Order ID:
</th>
<td class="tdmargin" />
</tr>
<tr>
<td class="tdmargin" />
<td class="tdorderHeader">
<xsl:value-of select="/Data/Order/OrderID" />
<xsl:value-of select="translate(' ', ' ', ' ')"/>
</td>
<td class="tdmargin" />
</tr>
</table>
</xsl:variable>
<!--variable OrderRowsHeader-->
<xsl:variable name="OrderRowsHeader">
<table class="tabledetails" cellspacing="0" style="table-layout:fixed">
<tr>
<td class="tdmargin" />
<th style="width:70px">
Product ID:
</th>
</tr>
</table>
</xsl:variable>
<!-- Template Filler-->
<xsl:template name="Filler">
<xsl:param name="fillercount" select="1"/>
<xsl:if test="$fillercount > 0">
<table class="tabledetails">
<tr>
<td>
<xsl:value-of select="translate(' ', ' ', ' ')"/>
</td>
</tr>
</table>
<xsl:call-template name="Filler">
<xsl:with-param name="fillercount" select="$fillercount - 1"/>
</xsl:call-template>
</xsl:if>
</xsl:template>
<!-- Template Filler End-->
</xsl:stylesheet>