在xsl fo中设置动态行高

时间:2015-11-16 07:15:23

标签: xslt xsl-fo

我使用下面的线来获得动态行高,即高度应该与左列匹配。 但我还需要将行分成不同的单元格?当我使用简单的fo:block-cell attrbutes时,我没有得到动态的行高。如何实现动态行高和细胞?

    public StudentBean findByName(java.lang.String studentName) {
    Query query = em.createNamedQuery("findByName");
    query.setParameter(1, studentName);
    try {
    return (StudentBean) query.getSingleResult();
    } catch (NoResultException e){
        return null;
    }
}

snapshot

更新 -

我认为可以做到的一种方法是在每个单元格值之后插入一条垂直线。这样,但不管怎样,垂直线都没有打印。

<fo:table-row display-align="center">
                                            <xsl:for-each select="xalan:distinct(Number)">
                                            <fo:table-cell  block-progression-dimension="auto" >
                                                    <fo:block-container height="10mm">
                                                    <fo:block font-size="9pt" border-right-width="0.1mm"  border-right-style="solid" border-right-color="red" >                                                 
                                                        <xsl:value-of select="">
                                                        <xsl:variable name="">
                                                            <xsl:value-of select="">
                                                        </xsl:variable>
                                                        <xsl:if test="">
                                                            <xsl:value-of select=""/>
                                                        </xsl:if>
                                                    </fo:block>
                                                    </fo:block-container>
                                                </fo:table-cell>

垂直线插入是否有任何遗漏。

snapshot2

3 个答案:

答案 0 :(得分:1)

如果将边框和填充属性移动到fo:table-cell,边框将是单元格的完整高度:

<fo:table-cell border-right="0.1mm solid red">

答案 1 :(得分:0)

通过设置int count = 0; for (Row row : sheet) { for (Cell cell : row) { if (cell.getCellType() != Cell.CELL_TYPE_BLANK) { if (cell.getCellType() != Cell.CELL_TYPE_STRING || cell.getStringCellValue().trim().length() > 0) { count++; break; } } } } ,您可能会发现单元格中的文本可以溢出10毫米,但只有10毫米用于确定行高。如果删除fo:block-container/@height,则应获得一个可变高度的表格行。

答案 2 :(得分:0)

新代码示例使事情更加清晰:您使用了2个嵌套表。 这是你不需要的另一个复杂因素。 只需使用1张桌子 在第一列中,将所有地理代码放入第一个单元格中。有多少并不重要:如果你有1个地理代码,那么单元格将是一行高。如果此单元格中有16个地理代码,则单元格将自动调整为3行高。

行的其余部分包含带有价格信息的单元格。在这些单元格上,定义右边框以生成红色垂直线。

 <fo:table>    
<fo:table-column column-width="..mm" column-number="1"/>
<fo:table-column column-width="..mm" column-number="2"/>
...you'll have to add some code here to add the correct number of columns to your table...
         <fo:table-body>
          <fo:table-row>
          <fo:table-cell>
          ...place the code to insert the country codes here....
          </fo:table-cell>
          <xsl:for-each select="../../../rateDetails[toGeography/sequence = $currentSequence]">
          <fo:table-cell block-progression-dimension="auto" border-right-width="0.1mm" border-right-style="solid" border-right-color="black" text-align="center">
           <fo:block-container>
          <fo:block font-size="9pt">
     <xsl:call-template name="currencySymbol">
              <xsl:with-param name="currencyCode" select="$currencyCode" />
              </xsl:call-template>
             <xsl:value-of select="util:formatCurrency(rate,$language,$countryCode)" />
             </fo:block>
             </fo:block-container>
               </fo:table-cell>
             </xsl:for-each>