情况如下: 我正在将html转换为xsl-fo为pdf。 我正在显示标题文字,如" 4.4.1。 [标题文字]"通过使用一个表,因为可能会发生[Header Text]很长并且在这种情况下将包裹到下一行,如下所示:
[table-row]
[cell with numbering] [cell with header text]
[/table-row]
有四种不同的情况如何组成标题:
问题是上标会增加行的高度,并且与垂直文本对齐混乱。这是默认情况下在所有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 =&#34;在带有编号的表格单元格上的&#34; 之后解决第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:我试图颠倒上标逻辑:
这&#34;工作&#34;,我测试了案例3 + 4,标题文本与两种情况下的编号一致。
但它的缺点是我在标题的顶部有一点额外的间距,我不得不扭转以完全恢复标题中的上标设置。
答案 0 :(得分:1)
我想你正在使用fo:inline元素来包装你的上标文本。如果将行堆叠策略从默认的max-height更改为font-height,则与上标不会有差距。试试:
<fo:inline vertical-align="super" line-stacking-strategy="font-height">Your superscript text here</fo:inline>
编辑:我也将行堆叠策略放在父块中,这实际上导致了效果。我使用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>
答案 1 :(得分:0)
使用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
中的基线将对齐以匹配较低的基线。