#width #centering #xsl-fo #caption
Вопрос:
Я использую XSL-FO с форматором Antennahouse FO.
Как сделать так, чтобы элемент fo:caption
в fo:table-and-caption
элементе выполнялся только по ширине fo:table
?
По сути, я ищу эквивалент этого HTML:
<?xml version="1.0"?>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Image with Caption – CENTERED</title>
</head>
<body>
<div style="border:2px solid blue;">
<table style="border:1px solid green; margin-left:auto; margin-right:auto;">
<caption style="caption-side:bottom; text-align:left; border:1px solid red;"><p style="font-size:9pt;">Sourceline (left edge should match up with table's left edge, and line breaking should occur at right edge of table)</p></caption>
<tr>
<td><p>amp;<- The table runs only this wide. -></p></td>
</tr>
</table>
</div>
<p>BLUE = wrapper-DIV</p>
<p>GREEN = table</p>
<p>RED = caption</p>
</body>
</html>
что выглядит примерно так:
Код XSL-FO, который у меня есть, таков:
<?xml version="1.0" encoding="UTF-8"?>
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
<fo:layout-master-set>
<fo:simple-page-master margin-bottom="58px" margin-left="120px" margin-right="120px" margin-top="50px" master-name="content-page" page-height="11in" page-width="8.5in">
<fo:region-body margin-bottom="44px" margin-top="50px" region-name="xsl-region-body" />
</fo:simple-page-master>
</fo:layout-master-set>
<fo:page-sequence master-reference="content-page">
<fo:flow flow-name="xsl-region-body">
<fo:block>
<fo:table-and-caption border="2px solid blue" text-align="center">
<fo:table-caption border="1px solid red" caption-side="bottom">
<fo:block font-size="8pt" text-align="left">Sourceline (left edge should match up with table's left edge, and line breaking should occur at right edge of table)</fo:block>
</fo:table-caption>
<fo:table border="1px solid green">
<fo:table-column/>
<fo:table-body>
<fo:table-row>
<fo:table-cell>
<fo:block>amp;<- The table runs only this wide. -></fo:block>
</fo:table-cell>
</fo:table-row>
</fo:table-body>
</fo:table>
</fo:table-and-caption>
</fo:block>
<fo:block>BLUE = fo:table-and-caption</fo:block>
<fo:block>GREEN = fo:table</fo:block>
<fo:block>RED = fo:caption</fo:block>
</fo:flow>
</fo:page-sequence>
</fo:root>
что выглядит примерно так:
Как заставить (в XSL-FO) заголовок таблицы работать только по ширине таблицы (которая может быть произвольно сложной, включая, например fo:table-footer
, границы таблицы и таблицы на таблице или ячейках) и начинаться с левого края связанной с ней таблицы (как в рендеринге HTML)?
Комментарии:
1. Это, вероятно, менее уместно с семантической точки зрения, но вариантом может быть добавление строки в таблицу и размещение там текста (охват ячеек и фиксация границ, если это необходимо).
2. Хорошая идея. Но даже если допустить искаженную семантику и правильно настроить границы охват, я не вижу, как можно было бы разместить элемент fo:нижний колонтитул таблицы, используя эту технику.