В этой ситуации: Я конвертирую html в xsl-fo в pdf. Я показываю текст заголовка, такой как «4.4.1. [Header Text]», используя таблицу, потому что может случиться, что текст [Header Text] довольно длинный и в этом случае должен быть перенесен на следующую строку следующим образом:Настольная ячейка XSL-FO с надстрочным и вертикальным выравниванием
[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 нумерации и большая часть текста заголовка не выровнены в хорошем способе.
Я мог бы решить случай № 3 с помощью display-align = "after" на таблице-ячейке с нумерацией. Но чтобы не испортить другие 3 случая, мне нужно было бы определить, будет ли содержимое текста заголовка перенесено на следующую строку или нет. Шрифт, который я использую для вывода, не является моноширинным, поэтому подсчет символов будет в лучшем случае приблизительным.
Мой вопрос, как это может быть сделано так, что случай 3 выглядит следующим образом:
__________________________
| | (1) |
|_1.2.3_|_header_text____|
в то время как другие остаются неизменными.
Спасибо!
EDIT: пример разметки для случая 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>
EDIT 2: Я пытался обратить надстрочное-логику:
- не использовать верхний индекс разметки на текст, который должен be superscript
- заверните все текстовые части заголовка (включая нумерацию), чтобы должен был быть верхним индексом в
Это «сработало», я проверил его для случаев 3 + 4, и текст заголовка был в порядке с нумерацией в обоих случаях.
Но у этого есть недостаток, что я получаю немного дополнительного промежутка в верхней части заголовка и что мне придется крутить вокруг, чтобы полностью вернуть настройки надстрочного указателя в заголовок.
Я попробовал ваше предложение, но unfortunateIy, похоже, это Безразлично Вносить изменения в результат. Я добавил пример (оригинальной) разметки к исходному вопросу. – flitz
С помощью стратегии укладки строк на уровне блока это работает. Благодаря! Я тестировал его и в других случаях. Единственная незначительная проблема заключается в том, что текст надстрочного текста теперь немного перекрывается с верхним краем области. Но это не является большой проблемой и делается еще менее критическим из-за того, что текст надстрочного шрифта обычно имеет меньший шрифт (не показан в примере вопроса). – flitz