Книга: XSLT
Создание списков XSL-FO
Разделы на этой странице:
Как мы видели в главе 11, таблицы XSL-FO работают во многом так же, как в HTML, и это в той же мере относится к спискам. Как и в HTML, список XSL выводит вертикальный список элементов. Для создания списков служат четыре элемента XSL-FO:
• <fo:list-block>
;
• <fo:list-item>
;
• <fo:list-item-label>
;
• <fo:list-item-body>
.
Весь список заключается в элемент <fo:list-block>
, и каждый элемент списка — в элемент <fo:list-item>
. Для создания подписи к элементу списка служит элемент <fo:list-item-label>
, а для вставки данных в каждый элемент списка — элемент <fo:list-item-body>
.
Пример lists.xsl
(листинг 12.1) преобразует planets.xml
в список формата XSL-FO, в котором каждый элемент списка отображает название планеты.
Листинг 12.1. lists.xsl
<?xml version="1.0"?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:fo="http://www.w3.org/1999/XSL/Format"
version="1.0">
<xsl:template match="PLANETS"
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
<fo:layout-master-set>
<fo:simple-page-master master-name="page" page-height="400mm"
page-width="300mm" margin-top="10mm" margin-bottom="10mm"
margin-left="20mm" margin-right="20mm">
<fo:region-body margin-top="0mm" margin-bottom="10mm"
margin-left="0mm" margin-right="0mm"/>
<fo:region-after extent="10mm"/>
</fo:simple-page-master>
</fo:layout-master-set>
<fo:page-sequence master-name="page">
<fo:flow flow-name="xsl-region-body">
<fo:block font-size="24pt">The Planets Table</fo:block>
<fo:list-block provisional-distance-between-starts="15mm"
provisional-label-separation="5mm">
<xsl:apply-templates/>
</fo:list-block>
</fo:flow>
</fo:page-sequence>
</fo:root>
</xsl:template>
<xsl:template match="PLANET">
<fo:list-item line-height="20mm">
<fo:list-item-label>
<fo:block font-family="sans-serif" font-size="36pt">
<xsl:number/>
<xsl:text>. </xsl:text>
</fo:block>
</fo:list-item-label>
<xsl:apply-templates/>
</fo:list-item>
</xsl:template>
<xsl:template match="NAME">
<fo:list-item-body>
<fo:block font-family="sans-serif" font-size="36pt">
<xsl:value-of select='.'/>
</fo:block>
</fo:list-item-body>
</xsl:template>
<xsl:template match="MASS">
</xsl:template>
<xsl:template match="RADIUS">
</xsl:template>
<xsl:template match="DENSITY">
</xsl:template>
<xsl:template match="DAY">
</xsl:template>
<xsl:template match="DISTANCE">
</xsl:template>
</xsl:stylesheet>
Вот результирующий документ XSL-FO, lists.fo
(листинг 12.2).
Листинг 12.2. lists.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-right="20mm" margin-left="20mm"
margin-bottom="10mm" margin-top="10mm" page-width="300mm"
page-height="400mm" master-name="page">
<fo:region-body margin-right="0mm" margin-left="0mm"
margin-bottom="10mm" margin-top="0mm"/>
<fo:region-after extent="10mm"/>
</fo:simple-page-master>
</fo:layout-master-set>
<fo:page-sequence master-name="page">
<fo:flow flow-name="xsl-region-body">
<fo:block font-size="24pt">The Planets Table</fo:block>
<fo:list-block provisional-label-separation="5mm"
provisional-distance-between-starts="15mm">
<fo:list-item line-height="20mm">
<fo:list-item-label>
<fo:block font-size="36pt" font-family="sans-serif">
1.
</fo:block>
</fo:list-item-label>
<fo:list-item-body>
<fo:block font-size="36pt" font-family="sans-serif">
Mercury
</fo:block>
</fo:list-item-body>
</fo:list-item>
<fo:list-item line-height="20mm">
<fo:list-item-label>
<fo:block font-size="36pt" font-family="sans-serif">
2.
</fo:block>
</fo:list-item-label>
<fo:list-item-body>
<fo:block font-size="36pt" font-family="sans-serif">
Venus
</fo:block>
</fo:list-item-body>
</fo:list-item>
<fo:list-item line-height="20mm">
<fo:list-item-label>
<fo:block font-size="36pt" font-family="sans-serif">
3.
</fo:block>
</fo:list-item-label>
<fo:list-item-body>
<fo:block font-size="36pt" font-family="sans-serif">
Earth
</fo:block>
</fo:list-item-body>
</fo:list-item>
</fo:list-block>
</fo:flow>
</fo:page-sequence>
</fo:root>
Результирующий файл PDF со списком в Adobe Acrobat Reader показан на рис. 12.1.
Рис. 12.1. Список, отформатированный при помощи XSL-FO, в Adobe Acrobat Reader
Давайте теперь подробнее рассмотрим, как работает lists.fo
, и изучим форматирующие объекты для списка.
- Глава 12 Документы XSL-FO
- 2.4. Создание списков
- 14.6. Создание списков
- 13.6.5. Создание списков
- Создание файлов с блокировкой
- Создание свободно позиционируемых элементов
- 12. Лекция: Создание приложений с графическим интерфейсом пользователя.
- Создание объектов Collection
- 7.4.2.4. Создание своего первого LiveCD
- 4.2. Создание трехмерной модели и построение горизонтальной проекции детали
- 7.4.2. Создание собственного LiveCD
- Создание пользователя и группы на рабочей станции