生成PDF时,我试图在页面开头显示页码Page 1 / 3
Page 2 / 3
Page 3 / 3
。
请找到下面尝试显示它的代码行。
`<td >Seite/Page <xsl:value-of select="$CurrentPageCount" /> / <xsl:value-of select="count(delivery_receipt/order_items) div 5"/>
</td>`
和CurrentPageCount
变量值并从下面获得代码<xsl:variable name="CurrentPageCount" select="position()" />
但它对我不起作用,它给出了以下错误
`line 156: Variable or parameter 'CurrentPageCount' is undefined.'`
请在下面找到我的完整 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:variable name="CurrentPageCount" select="position()" />
<xsl:copy-of select="$ReportHeader"/>
<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="blueline" style="width:220px" >
<xsl:value-of select="ProductName" />
<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>
<xsl:copy-of select="$ReportFooter" />
<br class="pagebreak" /> <br />
<xsl:copy-of select="$ReportHeader" />
</xsl:if>
</xsl:for-each>
<!--Filler -->
<xsl:choose>
<!-- case of only one page-->
<xsl:when test="count(Order/OrderRows/OrderRow) <= 40">
<xsl:call-template name="Filler">
<xsl:with-param name="fillercount" select="40 - (count(Order/OrderRows/OrderRow))"/>
</xsl:call-template>
</xsl:when>
<!-- case of more than one page-->
<xsl:otherwise>
<xsl:call-template name="Filler">
<!--(Rows per page = 40) - (Rows in current page) - (Total section rows = 1 ) + (Filler Row = 1)-->
<xsl:with-param name="fillercount" select="40 - ( ( count(Order/OrderRows/OrderRow)-40 ) mod 40 ) - 3 + 1"/>
</xsl:call-template>
</xsl:otherwise>
</xsl:choose>
<!--End Filler -->
<xsl:copy-of select="$ReportFooter"/>
</body>
</html>
</xsl:template>
<!-- variable ReportHeader-->
<xsl:variable name="ReportHeader">
<table class="tableReportHeader" cellspacing="0">
<tr>
<td>
<img class="imglogo" src="image_header.png" />
</td>
<td>
<h3 >INVOICE</h3>
</td>
<td >Seite/Page <xsl:value-of select="$CurrentPageCount" /> / <xsl:value-of select="count(delivery_receipt/order_items) div 5"/>
</td>
</tr>
</table>
</xsl:variable>
<!-- variable ReportFooter-->
<xsl:variable name="ReportFooter">
<table class="tableReportFooter">
<tr>
<td style="width:20px;"></td>
<td>
<table>
<tr>
<td style="font-size: 5pt; text-align: justify;border-top: solid DarkBlue 1px;">
One Portals Way, Twin Points WA 98156 Phone: 1-206-555-1417 Fax: 1-206-555-5938
</td>
</tr>
</table>
</td>
<td style="width:20px;"></td>
</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>
<!--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>
<th style="width:220px">
Product Name:
</th>
</tr>
</table>
</xsl:variable>
</xsl:stylesheet>
起初 fo 支持页计数
<fo:pagenumber/>
以及引用最后一页的总页数。请参阅:如何在PDF报告中使用xslt显示页码(N,共N个(。 所以你应该使用它。如果您仍然坚持按照自己的方式进行操作,则可以在模板中添加一个参数,例如:
<xsl:template name="ReportHeader">
<xsl:param name="currentPage"/>
<table class="tableReportHeader" cellspacing="0">
<tr>
<td>
<img class="imglogo" src="image_header.png" />
</td>
<td>
<h3>INVOICE</h3>
</td>
<td >
<xsl:text>Seite/Page: </xsl:text>
<xsl:value-of select="$currentPage" />
<xsl:text>/</xsl:text>
<xsl:value-of select="count(delivery_receipt/order_items) div 5"/>
</td>
</tr>
</table>
</xsl:template>
并调用模板而不是变量,例如:
<xsl:call-template name="ReportHeader">
<xsl:with-param name="currentPage" select="$CurrentPageCount"/>
</xsl:call-template>