簡體   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