繁体   English   中英

带有上标和垂直对齐的 XSL-FO 表格单元格

[英]XSL-FO table-cell with superscript and vertical alignment

这就是情况:我正在将 html 转换为 xsl-fo 到 pdf。 我正在使用表格显示类似“4.4.1. [Header Text]”的标题文本,因为可能会发生 [Header Text] 很长,在这种情况下应该像这样换行到下一行:

[table-row]
     [cell with numbering]  [cell with header text]
[/table-row]

标题的组成方式有 4 种不同的情况:

  1. 标题文本单行
  2. 标题文本换行到下一行
  3. 带上标的标题文本单行
  4. 标题文本用上标换行到下一行

问题是上标会增加行的高度并弄乱垂直文本对齐方式。 这就是它在所有 4 种情况下的默认外观:

__________________________
|_1.2.3_|_header_text____|      <<< OK

__________________________
| 1.2.3 | long long long |      <<< OK
|_______|_header_text____|

__________________________
| 1.2.3 |            (1) |      <<< NOT OK
|_______|_header_text____|

__________________________
| 1.2.3 | long long long |      <<< OK
|       |            (1) |
|_______|_header_text____|

如您所见,在第3 种情况下,编号和大部分标题文本没有以良好的方式对齐。

我可以通过在带有编号的表格单元格上使用display-align="after"来解决案例 3。 但为了不弄乱其他 3 种情况,我需要确定标题文本的内容是否会换行到下一行。 我用于输出的字体不是等宽的,这就是为什么计数字符充其量只是一个近似值。

我的问题是,如何才能使案例 3 看起来像:

__________________________
|       |            (1) |
|_1.2.3_|_header_text____|

而其他保持不变。

谢谢!

编辑:案例 3 的标记示例

<fo:table font-size="18pt" font-weight="bold" font-style="italic" space-after="2mm" space-before="7mm" keep-with-next.within-page="always">
    <fo:table-column column-width="16mm"/>
    <fo:table-column/>
    <fo:table-body>
        <fo:table-row>
            <fo:table-cell>
                <fo:block>1.2.3</fo:block>
            </fo:table-cell>
            <fo:table-cell>
                <fo:block>
                    <fo:block text-align="left">
                        <fo:block>Header Text (<fo:inline baseline-shift="super">1</fo:inline>)
                        </fo:block>
                    </fo:block>
                </fo:block>
            </fo:table-cell>
        </fo:table-row>
    </fo:table-body>
</fo:table>

编辑 2:我试图反转上标逻辑:

  • 不要在应该是上标的文本上使用上标标记
  • 将标题的所有文本部分(包括编号)都应该是上标的

这“有效”,我针对案例 3 + 4 对其进行了测试,并且标题文本在这两种情况下都与编号一致。

但它的缺点是我在标题顶部有一点额外的间距,并且我必须扭转以完全恢复标题中的上标设置。

我想您正在使用 fo:inline 元素来包装上标文本。 如果您将 line-stacking-strategy 从默认的 max-height 更改为 font-height,则不会与上标有差距。 尝试:

<fo:inline vertical-align="super" line-stacking-strategy="font-height">Your superscript text here</fo:inline>

编辑:我也将 line-stacking-strategy 放在父块中,这实际上导致了效果。 我用 Altsoft 的渲染器 XML2PDF 进行了测试:

<fo:block line-stacking-strategy="font-height">Header Text <fo:inline baseline-shift="super">(1)</fo:inline>

为了获得完全相同的基线,我建议也将它用于上一个字段:

<fo:block line-stacking-strategy="font-height">1.2.3</fo:block>

使用relative-align="baseline" (参见https://www.w3.org/TR/xsl11/#relative-align )。 由于它是继承的,如果需要,您可以将它放在fo:table-row甚至fo:table

使用relative-align="baseline" ,每个fo:table-cell中的第一行对齐到相同的基线。 案例 3 中的上标有效地将其fo:table-cell第一行的基线向下推,另一个fo:table-cell中的基线将对齐以匹配较低的基线。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM