XSL-FO:表格布局调整

时间:2010-07-27 15:39:53

标签: xsl-fo

这是我的问题,我有一个这样的表

This is a column header (A)  | Another Column header (B) | Header (C) | Another column Header (D)
--------------------------------------------------------------------------------------------------
Value A                      | Value B                   |  Value C   | Value D

事实上,A列和C列中的值可能很长,而B和D中的值可能非常短。我不介意标题或值是否包装 - 所以理想情况下我希望一个典型的表看起来像下面的

This is a column header (A)             | Another       | Header (C)                        | Another 
                                        | Column        |                                   | column 
                                        | header (B)    |                                   | Header (D)
----------------------------------------------------------------------------------------------------------
Value is very long and verbose, bla bla | Value B       | Value C - this to is quite long   | Value D
bla bla bla - see it wrapped            |               |                                   |

基本上,我希望列标题将优先包装到表数据单元格中的值。我不能简单地将wrap-option="no-wrap"属性应用于表格单元格 - 因为页面不够宽,无法容纳所有长文本。

我已尝试为列指定proportional-column-width属性 - 但这并不理想,因为我不知道在所有情况下哪些列将包含最长的文本。

我目前提出的最佳解决方案是在列标题文本中明确地添加换行符,但这会产生不必要的副作用,它似乎会使列宽增加相当多。有关示例,请参阅http://snipplr.com/view/37957/xslfo-to-make-a-table/。这会产生此输出http://imagebin.org/106996。请注意第3,4,5,6和7列似乎有相当大的填充,这意味着第1列和第2列比它们更窄。

非常感谢任何帮助。

PS - 我正在使用Ibex渲染引擎http://www.xmlpdf.com

1 个答案:

答案 0 :(得分:1)

我不确定您正在使用哪种渲染引擎。但如果它支持table-layout="auto"(大多数商业引擎都支持),这可能会给你一个比你现在得到的结果更好的结果。没有任何明确的换行符。

请参阅XSL specification for table-layout property和相应的CSS2 specification