有没有办法在XSL-FO中使用等效的'rowspan'?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了有没有办法在XSL-FO中使用等效的'rowspan'?相关的知识,希望对你有一定的参考价值。

我想在<fo:table>的最左边一列显示一个更大字体的文本。但是,右边的列应该包含几行文本较小的行。

在添加任何包含较大文本的最左侧列之前,这就是XSL代码的样子:

<xsl:template name="printAddress">
  <xsl:param name="subDocument" />
  <fo:table table-layout="fixed" background-color="#e0e0e0" keep-with-next.within-page="always">
    <fo:table-column column-width="7.0cm" />
    <fo:table-column column-width="7.0cm" />
    <fo:table-column column-width="2.0cm" />
    <fo:table-body>
      <!-- Begin Row 1 -->
      <fo:table-row keep-with-previous="always">
        <fo:table-cell margin-left="0.2cm" padding-before="0.1cm" padding-after="0.1cm">
          <fo:block>Value 1</fo:block>
        </fo:table-cell>
        <fo:table-cell margin-left="0.2cm" padding-before="0.1cm" padding-after="0.1cm">
          <fo:block>Value 2</fo:block>
        </fo:table-cell>
        <fo:table-cell margin-left="0.2cm" padding-before="0.1cm" padding-after="0.1cm">
          <fo:block />
        </fo:table-cell>
      </fo:table-row>
      <!-- Begin Row 2 -->
      <fo:table-row keep-with-previous="always">
        <fo:table-cell margin-left="0.2cm" padding-before="0.1cm" padding-after="0.1cm">
          <fo:block>
            <xsl:value-of select="$subDocument/someAttribute" />
          </fo:block>
        </fo:table-cell>
        <fo:table-cell margin-left="0.2cm" padding-before="0.1cm" padding-after="0.1cm">
          <fo:block>
            <xsl:value-of select="$subDocument/someOtherAttribute" />
          </fo:block>
        </fo:table-cell>
        <fo:table-cell margin-left="0.2cm" padding-before="0.1cm" padding-after="0.1cm">
          <fo:block />
        </fo:table-cell>
      </fo:table-row>
      <!-- Begin Row 3 -->
      <fo:table-row keep-with-previous="always">
        <fo:table-cell margin-left="0.2cm" padding-before="0.1cm" padding-after="0.1cm">
          <fo:block>value 3</fo:block>
        </fo:table-cell>
        <fo:table-cell margin-left="0.2cm" padding-before="0.1cm" padding-after="0.1cm">
          <fo:block>Value 4</fo:block>
        </fo:table-cell>
        <fo:table-cell margin-left="0.2cm" padding-before="0.1cm" padding-after="0.1cm">
          <fo:block>Value 5</fo:block>
        </fo:table-cell>
      </fo:table-row>
    </fo:table-body>
  </fo:table>
</xsl:template>

我想在左侧添加一列但我找不到它的语法。在html中,上面的内容将是这样的:

<tr>
    <td>Value 1</td>
    <td>Value 2</td>
    <td></td>
</tr>   
<tr>
    <td>{someAttribute}</td>
    <td>{someOtherAttribute}</td>
    <td></td>
</tr>   
<tr>
    <td>Value 3</td>
    <td>Value 4</td>
    <td>Value 5</td>
</tr>

为了实现我想要的,我们只需要像这样修改它:

<tr>
    <td rowspan="3" style="font-weight:bold;font-size:14pt">New Text</td>
    <td>Value 1</td>
    <td>Value 2</td>
    <td></td>
</tr>   
<tr>
    <td>{someAttribute}</td>
    <td>{someOtherAttribute}</td>
    <td></td>
</tr>   
<tr>
    <td>Value 3</td>
    <td>Value 4</td>
    <td>Value 5</td>
</tr>

但对于XSL-FO,最好如何做到这一点?

答案

<fo:table-cell number-rows-spanned="3">

难道你不喜欢罗嗦的XSL吗?

另一答案

上面选择的答案是正确的,您将“number-rows-spanned =”子句添加到表格单元格的定义中。

但是,与HTML不同,您不会在下面的跨区行中留下占位符单元格。如果你这样做,FO会抱怨行中定义了太多的单元格。

另一答案

使用number-rows-spanned或number-column-spanned。但为什么不使用视觉设计师呢?我正在使用Ecrion XF Designer,它做得很好。

以上是关于有没有办法在XSL-FO中使用等效的'rowspan'?的主要内容,如果未能解决你的问题,请参考以下文章

PDF 中的 XSL-FO 超链接 - 打印关闭查看打开 - 天线之家

使用 XSL-FO 在 .NET 中生成 PDF

等效于角度的 getElementsByTagName

GCP 等效于 aws 策略中的“拒绝”权限

postgres 9.2 中的 ROWID 等效项

TypeScript hasOwnProperty 等效项