Книга: 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, и изучим форматирующие объекты для списка.

Оглавление книги


Генерация: 7.162. Запросов К БД/Cache: 3 / 0
поделиться
Вверх Вниз