【发布时间】:2018-06-25 15:51:28
【问题描述】:
我有以下模板来生成定义的表:
<xsl:template name="CreateTable">
<fo:block>
<fo:table border-style="solid" table-layout="fixed">
<fo:table-body>
<fo:table-row>
<xsl:for-each select="Table/Head/Cell">
<fo:table-cell border-style="solid">
<fo:block><xsl:value-of select="." /></fo:block>
</fo:table-cell>
</xsl:for-each>
</fo:table-row>
<xsl:for-each select="Table/Row">
<fo:table-row>
<xsl:for-each select="Cell">
<fo:table-cell border-style="solid">
<fo:block><xsl:value-of select="."/></fo:block>
</fo:table-cell>
</xsl:for-each>
</fo:table-row>
</xsl:for-each>
</fo:table-body>
</fo:table>
</fo:block>
<fo:block margin-top="10pt"/>
</xsl:template>
现在我想将第一行中的文本旋转 90 度,以便从下向上阅读。
我想出的最佳解决方案是:
-
在
<fo:table>上设置reference-orientation="0":<fo:table border-style="solid" table-layout="fixed" reference-orientation="0"> -
将
<fo:block>...</fo:block>括在<fo:table-cell>中,并将<fo:block-container>旋转90 度:<fo:table-cell border-style="solid"> <fo:block-container reference-orientation="90"> <fo:block><xsl:value-of select="." /></fo:block> </fo:block-container> </fo:table-cell>
文本是旋转的,但第一行的高度实际上是 0,并且文本显示在表格上方覆盖先前的文本:
为第一行的单元格定义特定高度时,文本仍然在表格之前,而不是在第一行内:
如何将文本定位在第一行的单元格中,并根据行中最长的文本自动计算行高?
【问题讨论】:
-
您使用的是哪种格式化程序?
-
在您的 XSL 中,计算每个表格标题的字符数,并得出一个设置正确高度的公式。设置它并放置内容。或者,如果您希望文本因较长的项目而中断,请选择一个高度。格式化程序不会猜你想要什么。
-
@TonyGraham 我正在使用 apache-fop。
-
@KevinBrown 这是单元格高度,即第二个问题。主要问题是文本块的定位。
-
另外,在
fo:block-container上设置精确的width和height会强制文本位于表格单元格内。但这不是一个通用的解决方案,因为每个表格单元格可能有不同的大小......
标签: xsl-fo apache-fop