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>
.
.
.
Это завершает используемый в документе шаблон, простой шаблон страницы «page», почему здесь также завершается и элемент <fo:layout-master-set>.
В дополнение к элементу <fo:layout-master-set>, документ с форматирующими объектами, как правило, также содержит один или несколько элементов <fo:page-sequence>, задающих последовательности страниц, создаваемых по определенному в <fo:layout-master-set> шаблону, и я добавил в документ последовательность страниц.
Создание последовательностей страниц: <fo:page-sequence>
Что такое последовательность страниц? Это ряд страниц с одинаковыми характеристиками (например, глава в книге), которые при желании можно форматировать одинаковым способом. Страницы в результирующем документе в действительности создаются тогда, когда процессор XSL-FO обрабатывает элементы <fo:page-sequence>.
Каждый элемент <fo:page-sequence> ссылается либо на элемент <fo:page-sequence-master>, либо на шаблон страницы, и фактическая схема страниц определяется этими шаблонами. Несколько более сложно создание последовательностей, у которых место расположения номера страницы меняется — номеру располагаются на разных сторонах страницы, как при создании страниц книги.
К объекту <fo:page-sequence> применимы следующие свойства:
• country;
• format;
• language;
• letter-value;
• grouping-separator;
• grouping-size;
• id;
• initial-page-number;
• force-page-count;
• master-name.
В последней рекомендации XSL W3C шаблон страницы для последовательности страниц задается атрибутом master-name элемента <fo:page-sequence>. Я назвал свой простой шаблон страницы «page», и здесь я устанавливаю данный атрибут в это имя:
<?xml version="1.0"?>
<xsclass="underline" stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:fo="http://www.w3.org/1999/XSL/Format"
version="1.0">
<xsclass="underline" 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:page-sequence>
.
.
.
Этот код определяет шаблон страницы, который будет использован для последовательности страниц. Теперь мне нужно задать содержимое (content) последовательности, что делается при помощи детей потока (flow) элемента <fo:page-sequence>.
Создание объектов потока: <fo:flows>
Объекты потока носят такое название потому, что текст в них «заливается» и выравнивается, заполняя страницу, программой, отвечающей за вывод на экран. Содержимое страницы управляется объектами потока.
Есть два вида объектов потока: <fo:static-content> и <fo:flow>. Объект <fo:static-content> хранит содержимое (например, текст в верхних и нижних колонтитулах), которое будет повторяться на страницах последовательности (как мы увидим в главе 12). Объект <fo:flow> содержит сам текст, образующий содержимое документа.
К <fo:flow> применимо следующее свойство:
• flow-name.
Я воспользуюсь элементом <fo:flow> для обработки текстового содержимого planets.xml. Чтобы гарантировать, что текст будет преобразован в поток, я применю элемент <xsclass="underline" apply-templates>:
<?xml version="1.0"?>
<xsclass="underline" stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:fo="http://www.w3.org/1999/XSL/Format"
version="1.0">
<xsclass="underline" template match="PLANETS">
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
<fo:layout-master-set>
.
.
.
</fo:layout-master-set>
<fo:page-sequence master-name="page">
<fo:flow flow-name="xsl-region-body">
<xsclass="underline" apply-templates/>
</fo:flow>
</fo:page-sequence>
.
.
.
Здесь мы заканчиваем рассмотрение элемента <fo:page-sequence>; я указал шаблон для этой последовательности, который предоставит процессору XSL-FO способ форматирования содержимого в страницах форматированного документа. После описания схемы страниц, которые я хочу создать, теперь, наконец, пора перейти к их содержимому. Первый элемент, отображающий содержимое, — <fo:block>.
Создание содержимого уровня блока: <fo:block>
Блоки играют важную роль в XSL-FO: они применяются для создания прямоугольных областей вывода, отделенных от других областей вывода в документе. Форматирующий объект <fo:block> применяется для форматирования таких элементов, как абзацы, заголовки, подписи к рисункам и таблицам и т.д. Вот пример из начала главы, где я создаю элемент блока и задаю различные свойства и текст в блоке: