在单元格上方呈现的表格单元格中的旋转文本不在其中

时间:2018-01-16 20:57:16

标签: xsl-fo apache-fop

我有以下模板来生成定义的表:

<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度,以便从下往上阅读。

我想出的最佳解决方案是:

  • reference-orientation="0"上设置<fo:table>

    <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,文本显示在表格上方,覆盖了前一个文本:

rotated text overlaying previous text

为第一行的单元格定义特定高度时,文本仍在表格之前,而不在第一行内:

rotated text overlaying previous text and empty first row

如何在第一行的单元格中定位文本,并根据行中最长的文本自动计算行的高度?

3 个答案:

答案 0 :(得分:1)

在表格外显示文本:表格单元格内的fo:block可以继承设置,如封闭块的左边距。

我之前没有见过的单元格高度问题,在Antennahouse Formatter中你可以旋转单元格内容,而IIRC则可以适当调整单元格大小。

答案 1 :(得分:0)

我有一个类似的问题,可以通过在页眉的块容器中添加页边距来解决。据我所知,标头单元会相应地调整自身大小:

        <block-container>
                <xsl:attribute name="margin-top" select="'5em'"/>
                <xsl:attribute name="margin-bottom" select="'.75em'"/>
                <xsl:attribute name="reference-orientation" select="'90'"/>
            <block padding=".25em">
                <xsl:apply-templates select="node()"/>
            </block>
        </block-container>

Properly rotated header using @margin-top

答案 2 :(得分:0)

这是我对动态高度的尝试。 您可以寻找一个更好的因素...因为我的主张满足了这种基本方法。

当然有更精确,更好的解决方案,但是我认为这是正确的方向。感谢@Kevin Brown的评论。

package.json