Книга: XSLT
Форматирующие объекты 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.
- Форматирование XSL
- Форматирующие объекты XSL-FO
- Форматирующие свойства XSL-FO
- Форматирование документа XML
- Преобразование в XSL-FO при помощи таблицы стилей XSLT
- Создание корня документа:
- Создание схемы набора шаблонов:
- Создание шаблона страницы:
- Создание областей
- Создание последовательностей страниц:
- Создание объектов потока:
- Создание содержимого уровня блока:
- Создание таблиц
- Создание таблиц:
- Создание столбцов таблицы:
- Создание тел таблицы:
- Создание строк таблицы:
- Создание ячеек таблицы:
- Глава 12 Документы XSL-FO
- Популярность XSLT-процессоров
- Встроенные форматирующие объекты
- VII Удобные объекты
- 20.1. Объекты localStorage и sessionStorage
- Что нужно для XSLT-преобразования
- Глава 1 Основы XSLT
- Удаленные объекты, клиенты и серверы
- Глава 11 Применение XSLT для создания документов XSL-FO
- XSL = XSLT + XSL-FO
- Форматирующие объекты XSL: XSL-FO
- XSL-FO: форматирующие объекты XSL