=> Главная База Знаний Xslt Форматирующие объекты xsl-fo


Форматирующие объекты xsl-fo

Форматирующие объекты XSL-FO

В документах XSLT мы работали с такими элементами, как

<xsl:stylesheet>
,
<xsl:output>
и т.д.:

<?xml version="1.0" encoding="UTF-8"?>

<xsl:stylesheet version="1.0"

 xlmns:xsl="http://www.w3.org/1999/XSL/Transform">

 <xsl:output method="xml"/>

 <xsl:template match="*">

  <xsl:copy>

   <xsl:apply-templates/>

    .

    .

    .

Документ XSL-FO написан во многом таким же способом, но вместо таких элементов XSLT, как

<xsl:stylesheet>
, применяются элементы, основанные на форматирующих объектах XSL-FO. Существует всего 56 таких форматирующих объектов — например, объект корня, создающий корневой узел документа XSL-FO, или объект блока, создающий область блока (прямоугольную область отображения, похожую на область, которую тег заголовка <Н1> создает в документе HTML).

У форматирующих объектов есть свое собственное пространство имен, «http://www.w3.org/1999/XSL/Format», и в качестве префикса этого пространства имен практически всегда используется fo, сокращение для formatting objects. (Это соглашение было принято потому, что данный префикс пространства имен используется в спецификации XSL.) При написании документов XSL-FO используются элементы, соответствующие различным объектам XSL-FO — например,

<fo:root>
для корневого элемента,
<fo:block>
для создания блока отображения и т.д. Вот как можно начать документ XSL-FO — заметьте, что я объявляю префикс пространства имен «
fo
», соответствующий пространству имен XSL-FO:

<?xml version="1.0" encoding="UTF-8"?>

<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">

 <fо: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"/>

   .

   .

   .

Обратите внимание: документы; XSL-FO являются документами XML, поэтому везде можно использовать стандартные комментарии XML,

<!-- такие как этот -->
. Отметьте также, что элементы
<fo:simple-page-master>
и
<fo:region-body>
обладают такими атрибутами, как
margin-right
и
page-height
. В XSL-FO такие атрибуты называются свойствами, и их весьма много — на момент написания книги около 240. Например, вот как можно создать блок XSL-FO — прямоугольную область отображения — в котором выводится текст «Welcome to XSL formatting» (Добро пожаловать в форматирование XSL) шрифтом
sans-serif
размером 36 пунктов. Я использую форматирующий объект
<fo:block>
и свойства XSL-FO
font-family
line-height
(задающее высоту блока) и
font-size
:

<fo:block font-family="sans-serif" line-height="48pt" font-size="36pt">

 Welcome to XSL formatting

</fo:block>

В этом разделе мы рассмотрим объекты XSL-FO, а в следующем — свойства XSL-FO для работы с ними. При помощи объектов и свойств XSL-FO вы можете создавать документы XSL-FO, которым обычно дается расширение

.fo
. Процессор fop преобразует такие документы в формат
.pdf
.

Все форматирующие объекты XSL-FO с описанием перечислены на www.w3.org/TR/xsl/slice6.html. Во время создания книги существуют такие объекты (с работой многих из них мы познакомимся в этой и следующей главах):

• 

<fo:bidi-override>
. Перекрывает двунаправленный алгоритм Unicode (этот алгоритм используется в документах на нескольких языках);

• 

<fo:block>
. Создает блок отображения для формирования прямоугольных областей, используемых при выводе абзацев, заголовков, подписей к рисункам и таблицам и т.д.;

• 

<fo:block-container>
. Создает контейнер блоков, который затем можно помещать в любом месте;

• 

<fo:character>
. Представляет единственный символ;

• 

<fo:color-profile>
. Создает цветовой профиль для таблицы стилей, с которым потом можно работать при помощи цветовых функций (подробности см. на www.w3.org/TR/xsl/slice5.html#expr-color-functions);

• 

<fo:conditional-page-master-reference>
. Задает шаблон страницы (page-master), который следует использовать при выполнении указанных условий;

• 

<fo:declarations>
. Создает глобальные объявления;

• 

<fo:external-graphic>
. Добавляет в документ графику (графические данные располагаются за пределами результирующего документа, но могут быть интегрированы в документы PDF такими процессорами, как fop);

• 

<fo:float>
. Указывает, что определенное содержимое будет форматироваться в отдельной, незакрепленной области в начале страницы или сдвинутой к одной из сторон;

• 

<fo:flow>
. Обрабатывает поток текста, отображаемый в документе. Накладывает блокировку на «поток» встроенных областей, когда они заменяются в документе;

• 

<fo:footnote>
. Задает ссылку на сноску, а также саму связанную с ней сноску;

• 

<fo:footnote-body>
. Определяет содержимое сноски;

• 

<fo:initial-property-set>
. Задает форматирующие свойства для начальной строки блока;

• 

<fo:inline>
. Создает встроенную область (inline area). Встроенные области часто применяются для форматирования определенной части текста в блоке;

• 

<fo:inline-container>
. Создает контейнер для встроенных объектов, позволяя обрабатывать их все вместе;

• 

<fo:instream-foreign-object>
. Используется для вставки в документ встроенной графики или другого объекта;

• 

<fo:layout-master-set>
. Задает оболочку для всех шаблонов, используемых в документе;

• 

<fo:leader>
. Создает строку из повторяющегося символа или образец из символов для разделения двух текстовых форматирующих объектов;

• 

<fo:list-block>
. Создает форматированный список, — с ним мы познакомимся в следующей главе;

• 

<fo:list-item>
. Задает метку и тело элемента списка;

• 

<fo:list-item-body>
. Задает содержимое тела элемента списка;

• 

<fo:list-item-label>
. Задает содержимое метки элемента списка;

• 

<fo:marker>
. Применяется вместе с <fo:retrieve-marker> для создания колонтитулов или сносок по ходу работы;

• 

<fo:multi-case>
. Задает объекты, которые показывает или скрывает родительский элемент
<fo:multi-switch>
;

• 

<fo:multi-properties>
. Позволяет переключаться между двумя или более наборами свойств;

• 

<fo:multi-property-set>
. Задает альтернативный набор свойств;

• 

<fo:multi-switch>
. Переключает между двумя или более поддеревьями форматирующих объектов;

• 

<fo:multi-toggle>
. Используется внутри элемента
<fo:multi-case>
для переключения на другой
<fo:multi-case>
;

• 

<fo:page-number>
. Указывает номер текущей страницы;

• 

<fo:page-number-citation>
. Ссылается на номер страницы, содержащей заданный форматирующий объект;

• 

<fo:page-sequence>
. Определяет способ создания последовательности страниц в документе;

• 

<fo:page-sequence-master>
. Содержит последовательности шаблонов страниц, используемых для создания последовательностей страниц;

• 

<fo:region-after>
. Обозначает область, расположенную после области
<fo:region-body>
;

• 

<fo:region-before>
. Обозначает область перед областью
<fo:region-body>
;

• 

<fo:region-body>
. Обозначает область в центре
<fo:simple-page-master>
;

• 

<fo:region-end>
. Обозначает область в конце области
<fo:region-body>
;

• 

<fo:region-start>
. Обозначает область, начинающую область
<fo:region-body>
;

• 

<fo:repeatable-page-master-alternatives>
. Задает повторяющиеся экземпляры набора альтернативных шаблонов страниц;

• 

<fo:repeatable-page-master-reference>
. Обозначает подпоследовательность повторяющихся экземпляров единственного шаблона страницы;

• 

<fo:retrieve-marker>
. Используется вместе с
<fo:marker>
для создания колонтитулов или сносок в рабочем режиме;

• 

<fo:root>
. Узел документа, отформатированного при помощи XSL;

• 

<fo:simple-link>
. Задает начальное место в простой ссылке;

• 

<fo:simple-page-master>
. Определяет форму страницы, которая может быть разделена на области (до пяти областей);

• 

<fo:single-page-master-reference>
. Определяет подпоследовательность, образованную из единственного экземпляра единственного шаблона страницы;

• 

<fo:static-content>
. Содержит последовательность форматирующих объектов, которые будут отображены в одной области или повторены в областях в одной или более страницах в последовательности страниц. Чаще всего применяется для повторяющихся колонтитулов и сносок;

• 

<fo:table>
. Создает таблицу. Содержит такие элементы, как
<fo:table-column>
и
<fo:table-body>
;

• 

<fo:table-and-caption>
. Содержит данные и заголовок таблицы;

• 

<fo:table-body>
. Определяет содержимое тела таблицы. Содержит такие элементы, как
<fo:table-row>
;

• 

<fo:table-caption>
. Задает форматирующие объекты уровня блока, в которых содержится заголовок таблицы;

• 

<fo:table-cell>
. Помещает данные в ячейки таблицы;

• 

<fo:table-column>
. Задает свойства ячеек в одном столбце таблицы;

• 

<fo:table-footer>
. Определяет содержимое нижнего колонтитула таблицы;

• 

<fo:table-header>
. Определяет содержимое верхнего колонтитула таблицы;

• 

<fo:table-row>
. Связывает ячейки таблицы в строки. Содержит элементы
<fo:table-cell>
;

• 

<fo:title>
. Задает заголовок документа;

• 

<fo:wrapper>
. Задает свойства для группы форматирующих объектов;

Каждый из этих элементов также поддерживает одно или несколько форматирующих свойств XSL-FO.