体区中的两个相邻表,每个表有两列(xsl-fo)

时间:2011-03-15 11:02:22

标签: xsl-fo

xml文档

<?xml version="1.0" encoding="ISO-8859-1" ?>
<NVELOPE>
    <PAYSTITLE>No. of Days</PAYSTITLE>
    <PAYSVALUE>8 Days</PAYSVALUE>
    <ETITLE>Basic Pay - Project</ETITLE>
    <EAMT>-45.00</EAMT>
    <ETITLE>House Rent</ETITLE>
    <EAMT>-08.00</EAMT>
    <ETITLE>Transport</ETITLE>
    <EAMT>-18.00</EAMT>
    <ETITLE>Special</ETITLE>
    <EAMT>-15.00</EAMT>
    <ETITLE>Variable Pay</ETITLE>
    <EAMT>-15.00</EAMT>
    <ETITLE>Bonus</ETITLE>
    <EAMT>-8.00</EAMT>
    <DTITLE>M D S</DTITLE>
    <DAMT>50.00</DAMT>
    <DTITLE>Fund</DTITLE>
    <DAMT>95.00</DAMT>
    <DTITLE>Tax</DTITLE>
    <DAMT>25.00</DAMT>
</NVELOPE>

我需要使用XSLT和XSL-FO格式化PDF格式的数据

我希望数据在两个相邻的表中并行分布。

我基本上不知道如何获得两个相邻的表,或者你可以使用一个包含四列的表,但是我无法正确地分发数据......

title    amt     title     amt
title    amt     title     amt
title    amt     title     amt
title    amt     title     amt
title    amt     title     amt

这是我想要的方式....请事先帮助我谢谢...... :)

2 个答案:

答案 0 :(得分:3)

您可以使用两列表格来完成此操作,该表格包含您想要并排放在一行中的表格。

<fo:table>
    <fo:table-column column-number="1"/>
    <fo:table-column column-number="2"/>
    <fo:table-body>
        <fo:table-row>
            <fo:table-cell>
                <fo:block>
                    <TABLE 1 HERE>
                </fo:block>
            </fo:table-cell>
        </fo:table-row>
        <fo:table-row>
            <fo:table-cell>
                <fo:block>
                    <TABLE 2 HERE>
                </fo:block>
            </fo:table-cell>
        </fo:table-row>
    </fo:table-body>

使用这些表,您可以使用xsl:if + position()来限制填充子表的数据。

答案 1 :(得分:0)

以四个为一组处理元素:

  <xsl:template match="NVELOPE">
    <fo:table>
      <fo:table-body>
        <xsl:call-template name="row" />
      </fo:table-body>
    </fo:table>
  </xsl:template>

  <xsl:template name="row">
    <xsl:param name="cells" select="*" />

    <fo:table-row>
      <fo:table-cell>
        <fo:block><xsl:apply-templates select="$cells[1]" /></fo:block>
      </fo:table-cell>
      <fo:table-cell>
        <fo:block><xsl:apply-templates select="$cells[2]" /></fo:block>
      </fo:table-cell>
      <fo:table-cell>
        <fo:block><xsl:apply-templates select="$cells[3]" /></fo:block>
      </fo:table-cell>
      <fo:table-cell>
        <fo:block><xsl:apply-templates select="$cells[4]" /></fo:block>
      </fo:table-cell>
    </fo:table-row>
    <xsl:if test="count($cells) > 4">
      <xsl:call-template name="row">
        <xsl:with-param name="cells" select="$cells[position() > 4]" />
      </xsl:call-template>
    </xsl:if>
  </xsl:template>

如果元素的数量不是4的倍数,则会产生fo:table-cell,其中包含空行fo:block