是否可以在XSLT/XSL FO中显示运行总数?

是否可以在XSLT/XSL FO中显示运行总数?,xslt,xsl-fo,Xslt,Xsl Fo,我正在尝试格式化一份报告,我的表格将跨越多个页面,包含各种项目/费用,理想情况下,我希望在表格页脚中显示每页的运行总计,基本上我希望表格中从当前页面到第一页的值的总和显示在底部。有没有办法做到这一点 <fo:table width="100%" border-style="groove" border-width="2pt" background-repeat="repeat"> <fo:table-column column-width="5%" /> <

我正在尝试格式化一份报告,我的表格将跨越多个页面,包含各种项目/费用,理想情况下,我希望在表格页脚中显示每页的运行总计,基本上我希望表格中从当前页面到第一页的值的总和显示在底部。有没有办法做到这一点

<fo:table width="100%" border-style="groove" border-width="2pt" background-repeat="repeat">
  <fo:table-column column-width="5%" />
  <fo:table-column column-width="60%" />
  <fo:table-column column-width="5%" />
  <fo:table-column column-width="7.5%" />
  <fo:table-column column-width="7.5%" />
  <fo:table-column column-width="7.5%" />
  <fo:table-column column-width="7.5%" />
  <fo:table-footer border-top-style="dashed" border-bottom-style="dashed">
    <fo:table-cell display-align="center">
    </fo:table-cell>
    <fo:table-cell display-align="center">
      <fo:block text-align="center">
        Page <fo:page-number/>
        <xsl:text> OF </xsl:text>
        <fo:page-number-citation ref-id="end" />
      </fo:block>
    </fo:table-cell>
    <fo:table-cell display-align="center">
    </fo:table-cell>
    <fo:table-cell display-align="center">
    </fo:table-cell>
    <fo:table-cell display-align="center">
    </fo:table-cell>
    <fo:table-cell display-align="center">
      <fo:block text-align="end">
        Page Total:
      </fo:block>
    </fo:table-cell>
    <fo:table-cell display-align="center">
    </fo:table-cell>
  </fo:table-footer>
  <fo:table-body>
    <xsl:for-each select="/receipt_invoice/details/product_lot">
      <xsl:variable name="untitled" select="." />
      <fo:table-row>
        <fo:table-cell border-style="solid" border-width="1pt" border-color="black" padding="2pt" background-repeat="repeat" display-align="center">
          <fo:block text-align="right">
            <fo:block>
              <xsl:value-of select="lot/quantity" />
            </fo:block>
          </fo:block>
        </fo:table-cell>
        <fo:table-cell border-style="solid" border-width="1pt" border-color="black" padding="2pt" background-repeat="repeat" display-align="center">
          <fo:block>
            <fo:table width="100%" border-style="none" border-width="2pt" background-repeat="repeat">
              <fo:table-column/>
              <fo:table-column/>
              <fo:table-body>
                <fo:table-row>
                  <fo:table-cell border-style="none" border-width="2pt" padding="2pt" background-repeat="repeat" display-align="before">
                    <fo:block>
                      <fo:block>
                        <xsl:value-of select="product/code" />
                      </fo:block>
                      <fo:block>
                        Lot Qty:
                        <xsl:value-of select="lot/quantity" />
                      </fo:block>
                      <fo:block>
                        <xsl:text>
                          &#xA0;
                        </xsl:text>
                      </fo:block>
                      <fo:block>
                        <xsl:value-of select="lot/identifier" />
                      </fo:block>
                      <fo:block>
                        <xsl:value-of select="lot/lot_components/component/label" />
                      </fo:block>
                      <fo:block>
                        <xsl:value-of select="lot/lot_components/component/value" />
                      </fo:block>
                    </fo:block>
                  </fo:table-cell>
                  <fo:table-cell border-style="none" border-width="2pt" padding="2pt" background-repeat="repeat" display-align="before">
                    <fo:block>
                      <fo:block>
                        <xsl:value-of select="product/first_description" />
                      </fo:block>
                      <fo:block>
                        <xsl:value-of select="lot/csd/csd_line" />
                      </fo:block>
                      <fo:block>
                        <xsl:value-of select="lot/csd/set_description" />
                      </fo:block>
                      <fo:block>
                        <xsl:value-of select="lot/lot_components/component/label" />
                      </fo:block>
                    </fo:block>
                  </fo:table-cell>
                </fo:table-row>
              </fo:table-body>
            </fo:table>
            Line Number:
            <xsl:value-of select="line_number" />
          </fo:block>
        </fo:table-cell>
        <fo:table-cell border-style="solid" border-width="1pt" border-color="black" padding="2pt" background-repeat="repeat" display-align="center">
          <fo:block text-align="center">
            <fo:block>
              <xsl:value-of select="product/unit_of_measure" />
            </fo:block>
          </fo:block>
        </fo:table-cell>
        <fo:table-cell border-style="solid" border-width="1pt" border-color="black" padding="2pt" background-repeat="repeat" display-align="center">
          <fo:block text-align="center">
            <fo:block>
              <xsl:value-of select="stock_charges/storage_rate" />
            </fo:block>
          </fo:block>
        </fo:table-cell>
        <fo:table-cell border-style="solid" border-width="1pt" border-color="black" padding="2pt" background-repeat="repeat" display-align="center">
          <fo:block text-align="center">
            <fo:block>
              <xsl:value-of select="stock_charges/storage_amount" />
            </fo:block>
          </fo:block>
        </fo:table-cell>
        <fo:table-cell border-style="solid" border-width="1pt" border-color="black" padding="2pt" background-repeat="repeat" display-align="center">
          <fo:block text-align="center">
            <fo:block>
              <xsl:value-of select="stock_charges/handling_rate" />
            </fo:block>
          </fo:block>
        </fo:table-cell>
        <fo:table-cell border-style="solid" border-width="1pt" border-color="black" padding="2pt" background-repeat="repeat" display-align="center">
          <fo:block text-align="center">
            <fo:block>
              <xsl:value-of select="stock_charges/handling_amount" />
            </fo:block>
          </fo:block>
        </fo:table-cell>
      </fo:table-row>
    </xsl:for-each>
  </fo:table-body>
</fo:table>

页
属于
总页数:
批次数量:
 ;
行号:
修订:

因此,我决定使用页脚来显示每页的小计,并在表中设置了一个标记,该标记仅返回总计以进行测试,但现在我想的是,我可以尝试以某种方式获取节点取自的xml文件中的位置,并使用类似于

<xsl:value-of select="sum(preceding::value[the_position]"/> 


这里的值实际上是被加总的电荷的名称,这是可行的吗?如果您尝试了不同的方法,但我不确定语法以及如何返回位置。

为了完整起见,请将解决方案的描述作为答案发布


如果行的高度非常规则,则可以在输出行时对表结构中所有以前的节点使用sum()函数,并将正在运行的小计作为表/表行放在页面页脚标记中作为单行表。使用页面上的最后一个标记将标记检索到页面页脚(而不是带有检索表标记的表页脚),然后清除标记。仔细调整大小,您可以让它看起来就像一个表尾,您可以清除表尾的标记,这样它就不会出现在其他页面上。对于表尾,只需输出总数

它可能不适用于复杂的表,尤其是在有多行且保留这些行的情况下,因为表可能无法到达页脚


这克服了两个问题(1)您不需要表标记,因为许多FO引擎不支持它们(事实上,这是有充分理由的,因为如果要检索的内容可能具有较大的可变高度,那么它们的问题比您想象的要大得多)。(2)使用表标记可能会在页脚内的表末尾遇到问题,您可能不需要它(尽管您可以清除最后一行的标记)。

这听起来像是一个开始:(使用
)在从XML到XSL的转换中,您可以对以前的值求和(如果源代码中不存在该数据)您可以放下标记并使用检索表标记(这是一种XSLFO1.1构造,并非所有FO引擎都支持)。您可以将标记检索到表尾中。问题是,有时您不希望它出现在表尾,使用表尾意味着您得到了它(当然,除非您的FO引擎有一个选项可以省略最后一个表尾或其他内容)。感谢Tomalak,至少它看起来很有希望,也感谢Kevin,不幸的是,我正在设计使用Apache FOP打印的解决方案,它不完全支持多列的表尾,也不支持表标记,如果您知道任何解决方法,将不胜感激。如果您的行高度非常规则,您也可以尝试相同的求和技术,但将小计表行作为单行表放在页面页脚内。使用相同的技术,但将标记拉入页脚,而不是带有检索表标记的表页脚。仔细调整大小,你可以让它看起来像一个表尾,你可以在表尾清除市场,这样它就不会出现在其他页面上。@KevinBrown谢谢你,这实际上是一个很好的解决方案,它似乎与FOP配合得很好,干杯!