在<fo:table-column> number-columns-spanned与number-columns-repeated属性之间有什么区别?</fo:table-column>

时间:2015-03-27 19:24:20

标签: xsl-fo

实际上,使用AHFormatter,如果我有这个:

<fo:table-column column-number="2" number-columns-repeated="2" color="red"/>

如果我使用 from-table-column(),那么第3列中的表格单元格将显示红色文字:

<fo:table-cell color="from-table-column()">

然而,

<fo:table-column column-number="2" number-columns-spanned="2" color="red"/>

这种方式不起作用,所以真正的问题可能是&lt; fo:table-column /&gt; 数字列跨越属性做了什么? ,如果有的话?

2 个答案:

答案 0 :(得分:2)

Per the Spec

  

7.28.12“number-columns-repeated”

     

XSL定义:值:初始值:1继承:否   百分比:N / A媒体:视觉

     

A positive integer. If a non-positive or non-integer value is provided, the value will be rounded to the nearest integer value
     

大于或等于1.

     

“number-columns-repeated”属性指定a的重复   表列规范n次;具有相同的效果,如果   fo:表格列格式化对象已经重复了n次   结果树。对于除第一个之外的所有属性,“column-number”属性是   前一个的列号加上它的值   “number-columns-spanned”属性。

     

注意:

     

这处理HTML的“colgroup”元素。   7.28.13“number-columns-spanned”

     

XSL定义:值:初始值:1继承:否   百分比:N / A媒体:视觉

     

A positive integer. If a non-positive or non-integer value is provided, the value will be rounded to the nearest integer value
     

大于或等于1.

     

对于fo:table-column,“number-columns-spanned”属性指定   由可能使用属性的表格单元格跨越的列数   从这个fo:table-column格式化对象使用   from-table-column()函数。

     

对于fo:table-cell,“number-columns-spanned”属性指定   这个细胞跨越的列数   从当前列开始的列进展方向。

答案 1 :(得分:2)

直接从W3C XSL-FO 1.1 spec复制的先前提供的答案给出了 number-columns-repeated =“n”所做的相当清楚的解释,即它是一个便利属性,具有与&lt; fo:table-column /&gt;相同的效果格式化对象已在结果树中重复 n 次。这会对xhtml &lt; col /&gt; 标记 span 属性进行建模。

规范中的评论“这处理HTML''colgroup'元素通常不正确。&lt; colgroup&gt;可以是&lt; col /的容器&gt;标记,每个&lt; col /&gt;元素可以提供完全不同的格式属性(除了跨越一个或多个列)。此语句仅在使用空&lt; colgroup&gt;标记时才为真(这是允许的,但令人困惑,因为这相当于只使用&lt; col&gt;标签并完全取消&lt; colgroup&gt;)。xhtml DTD 允许&lt; col&gt;和&lt; colgroup&gt;成为兄弟姐妹。您可以使用所有&lt; col&gt;元素或所有&lt; colgroup&gt;元素(可以使用&lt; col&gt;子元素,或使用span,但不能同时使用两者),或者两者都不使用。

number-columns-spanned 属性充当附加&lt; table-cell&gt;标识符。例如,给定

<fo:table-column column-number="2" color="green" number-columns-spanned="2"/>

如果这两个&lt; table-cell&gt;都在第二列中:

<fo:table-cell color="from-table-column()">
<fo:table-cell number-columns-spanned="2" color="from-table-column()">

只有第二个表格单元格会以绿色文字呈现。

这允许对跨越不同数量的列的表格单元格进行单独格式化;例如:

<fo:table-column column-number="2" color="red"/>
<fo:table-column column-number="2" background-color="lightgray" color="green" number-columns-spanned="2"/>

将提供使用 from-table-column()函数为第二列红色的任何单列表格单元格中的文本着色的机会,同时使用绿色文本为第二列和第三列扩展的表格单元格呈现浅灰色背景。

一点困惑。该规范对 from-table-column()

有所说明
  

from-table-column函数返回其名称与指定参数匹配的属性的继承值,或者如果对于要为其计算表达式的属性省略,则返回其列数匹配的fo:table-column评估此表达式的列,其number-columns-spanned也匹配任何span。如果number-columns-spanned不匹配,则匹配范围为1.如果仍然没有匹配,则返回初始值。

我发现这有点令人困惑,所以这里是翻译。假设您只有以下&lt; fo:table-column&gt; &lt; fo:table&gt;

中的元素
<fo:table-column column-number="2" color="red" font-weight="bold"/>

使用此&lt; fo:table-cell&gt;出现在表格的第二列:

<fo:table-cell number-columns-spanned="2" color="from-table-column()" font-weight="from-table-column()">

格式化程序将检查是否存在第二列&lt; fo:table-column&gt;使用 number-columns-spanned =“2”。找不到,它将继续使用单列&lt; fo:table-column&gt;并将文本呈现为红色和粗体