【问题标题】:Spanning cells in dynamic table in FOP在 FOP 中的动态表中跨越单元格
【发布时间】:2014-05-22 07:14:22
【问题描述】:

我的问题是我有一个动态长度的表,我需要跨越 3 个单元格上的 3 行,而其他行具有单个单元格长度。

我得到一个生成的 XML 文件,其值类似于

<item>
  <val1>a</val1>
  <val2>b</val2>
  <val3_1>a1</val3_1>
  <val3_2>b1</val3_2>
  <val3_3>c1</val3_3>
  <val4>c</val4>
</item>

表格应该看起来像

 | val1: |-------val1---------| |-------val1---------|
 | val2: |-------val2---------| |-------val2---------|
 | val3: |val3_1|val3_2|val3_3| |val3_1|val3_2|val3_3|
 | val4: |--------val4--------| |--------val4--------|

我有这个来源:

<fo:table width="100%" table-layout="fixed">
<fo:table-body>

    <fo:table-row>
        <fo:table-cell border-style="solid" border-width="1pt"
            background-color="{$tabbgcolor}" width="50mm">
            <fo:block>
                               val1:
            </fo:block>
        </fo:table-cell>
        <xsl:for-each select="item">
            <fo:table-cell border-style="solid"
                number-columns-spanned="3" border-width="2pt" background-color="{$tabbgcolor}"
                font-weight="bold" text-align="center">
                <fo:block>
                    <xsl:value-of select="val1" />
                </fo:block>
            </fo:table-cell>
        </xsl:for-each>
    </fo:table-row>

    <fo:table-row>
        <fo:table-cell border-style="solid" border-width="1pt"
            background-color="{$var_color_reserve}">
            <fo:block text-indent="1em" wrap-option="wrap">
                val2:
            </fo:block>
        </fo:table-cell>
        <xsl:for-each select="item">
            <fo:table-cell border-style="solid"
                number-columns-spanned="3" border-width="2pt" background-color="{$tabbgcolor}"
                text-align="center">
                <fo:block>
                    <xsl:value-of select="val2" />
                </fo:block>
            </fo:table-cell>
        </xsl:for-each>
    </fo:table-row>

    <fo:table-row>
        <fo:table-cell border-style="solid" border-width="1pt"
            background-color="{$var_color_reserve}">
            <fo:block text-indent="1em" wrap-option="wrap">
                Val3:
            </fo:block>
        </fo:table-cell>


        <xsl:for-each select="item">
            <fo:table-cell border-style="solid" border-width="2pt"
                background-color="{$tabbgcolor}" text-align="center">
                <fo:block wrap-option="wrap">
                    <xsl:value-of select="val3_1" />
                </fo:block>
            </fo:table-cell>
        </xsl:for-each>

        <xsl:for-each select="item">
            <fo:table-cell border-style="solid" border-width="2pt"
                background-color="{$tabbgcolor}" text-align="center">
                <fo:block wrap-option="wrap">
                    <xsl:value-of select="val3_2" />
                </fo:block>
            </fo:table-cell>
        </xsl:for-each>

        <xsl:for-each select="instzahl">
            <fo:table-cell border-style="solid" border-width="2pt"
                background-color="{$tabbgcolor}" text-align="center">
                <fo:block wrap-option="wrap">
                    <xsl:value-of select="val3_3" />
                </fo:block>
            </fo:table-cell>
        </xsl:for-each>




    </fo:table-row>

    <fo:table-row>
        <fo:table-cell border-style="solid" border-width="1pt"
            background-color="{$var_color_reserve}">
            <fo:block text-indent="1em" wrap-option="wrap">
                val4:
            </fo:block>
        </fo:table-cell>
        <xsl:for-each select="item">
            <fo:table-cell border-style="solid"
                number-columns-spanned="3" border-width="2pt" background-color="{$tabbgcolor}"
                text-align="center">
                <fo:block>
                    <xsl:value-of select="val4" />
                </fo:block>
            </fo:table-cell>
        </xsl:for-each>
    </fo:table-row>


</fo:table-body>

问题如下:

  1. 值解析错误:我得到所有值 val3_1,然后是所有 val3_2,然后是所有 val3_3,而不是 val3_1 val3_2 val3_3,下一轮 val3_1 val3_2 val3_3 等等。

  2. 跨越不起作用。我明白这是因为我现在不知道最终将拥有多少个单元格,因为我无法预见在生成 xml 文件时将有多少项目。

有什么想法吗?

【问题讨论】:

    标签: xml pdf xsl-fo apache-fop xmltable


    【解决方案1】:

    好的,我解决了,代码如下:

                        <fo:table-body>
    
                            <fo:table-row>
                                <fo:table-cell border-style="solid" border-width="1pt"  width="50mm">
                                    <fo:block>
                                      val1: 
                                    </fo:block>
                                </fo:table-cell>
                                <xsl:for-each select="item">
                                    <fo:table-cell border-style="solid" number-columns-spanned="3"  border-width="2pt" font-weight="bold" text-align="center">
                                        <fo:block>
                                            <xsl:value-of select="val1" />
                                        </fo:block>
                                    </fo:table-cell>
                            </xsl:for-each>
                            </fo:table-row>
    
                            <fo:table-row>
                                <fo:table-cell border-style="solid" border-width="1pt" >
                                    <fo:block  wrap-option="wrap">
                                         val2:
                                    </fo:block>
                                </fo:table-cell>
                                <xsl:for-each select="item">
                                    <fo:table-cell border-style="solid" number-columns-spanned="3" border-width="2pt" text-align="center">
                                        <fo:block>
                                            <xsl:value-of select="val2" />
                                        </fo:block>
                                    </fo:table-cell>
                                </xsl:for-each>
                            </fo:table-row>
    
                            <fo:table-row>
                                <fo:table-cell border-style="solid" border-width="2pt" >
                                    <fo:block  wrap-option="wrap">
                                        val3:
                                    </fo:block>
                                </fo:table-cell>
    
    
                                <xsl:for-each select="item">
                                    <fo:table-cell border-style="solid" border-width="1pt" text-align="center">
                                        <fo:block wrap-option="wrap">
                                            <xsl:value-of select="val3_1" />
                                        </fo:block>
                                    </fo:table-cell>
    
                                <fo:table-cell border-style="solid"  border-width="1pt" text-align="center">
                                        <fo:block wrap-option="wrap">
                                            <xsl:value-of select="val3_2" />
                                        </fo:block>
                                    </fo:table-cell>
    
                                    <fo:table-cell border-style="solid" border-width="1pt"  text-align="center">
                                        <fo:block wrap-option="wrap">
                                            <xsl:value-of select="val3_3" />
                                        </fo:block>
                                    </fo:table-cell>
                                </xsl:for-each>
    
    
                            </fo:table-row>
    
    
                            <fo:table-row>
                                <fo:table-cell border-style="solid" border-width="2pt" >
                                    <fo:block  wrap-option="wrap">
                                        val4
                                    </fo:block>
                                </fo:table-cell>
                            <xsl:for-each select="item">
                                    <fo:table-cell border-style="solid" number-columns-spanned="3" border-width="2pt" text-align="center">
                                        <fo:block>
                                            <xsl:value-of select="val4" />
                                        </fo:block>
                                    </fo:table-cell>
                            </xsl:for-each>
                            </fo:table-row>
    
    
                        </fo:table-body>
                    </fo:table>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-09
      • 1970-01-01
      • 2021-03-13
      • 2013-03-19
      • 2021-05-05
      • 1970-01-01
      • 2013-06-23
      • 2014-08-17
      相关资源
      最近更新 更多