[英]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 種不同的情況:
問題是上標會增加行的高度並弄亂垂直文本對齊方式。 這就是它在所有 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.