=> Главная База Знаний Xslt Создание содержимого уровня блока: <fo:block>


Создание содержимого уровня блока: <fo:block>

Создание содержимого уровня блока: <fo:block>

Блоки играют важную роль в XSL-FO: они применяются для создания прямоугольных областей вывода, отделенных от других областей вывода в документе. Форматирующий объект

<fo:block>
применяется для форматирования таких элементов, как абзацы, заголовки, подписи к рисункам и таблицам и т.д. Вот пример из начала главы, где я создаю элемент блока и задаю различные свойства и текст в блоке:

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

 Welcome to XSL formatting.

</fo:block>

С объектом

<fo:block>
можно применять следующие свойства:

• общие свойства доступа:

source-document
,
role
;

• общие звуковые свойства:

azimuth
,
cue-after
,
cue-before
,
elevation
,
pause-after
,
pause-before
,
pitch
,
pitch-range
,
play-during
,
richness
,
speak
,
speak-header
,
speak-numeral
,
speak-punctuation
,
speech-rate
,
stress
,
voice-family
, volume;

• общие свойства границ, заполнения и заднего фона:

background-attachment
,
background-color
,
background-image
,
background-repeat
,
background-position- horizontal
,
background-position-vertical
,
border-before-color
,
border-before-style
,
border-before-width
,
border-after-color
,
border-after-style
,
border-after-width
,
border-start-color
,
border-start-style
,
border-start-width
,
border-end-color
,
border-end-style
,
border-end-width
,
border-top-color
,
border-top-style
,
border-top-width
,
border-bottom-color
,
border-bottom-style
,
border-bottom-width
,
border-left-color
,
border-left-style
,
border-left-width
,
border-right-color
,
border-right-style
,
border-right-width
,
padding-before
,
padding-after
,
padding-start
,
padding-end
,
padding-top
,
padding-bottom
,
padding-left
,
padding-right
;

• общие свойства шрифта:

font-family
,
font-size
,
font-stretch
,
font-size-adjust
,
font-style
,
font-variant
,
font-weight
;

• общие свойства переноса:

country
,
language
,
script
,
hyphenate
,
hyphenation-character
,
hyphenation-push-character-count
,
hyphenation-remain-character-count
;

• общие свойства полей для блоков:

margin-top
,
margin-bottom
,
margin-left
,
margin-right
,
space-before
,
space-after
,
start-indent
,
end-indent
;

• 

break-after
;

• 

break-before
;

• 

color
;

• 

font-height-override-after
;

• 

font-height-override-before
;

• 

hyphenation-keep
;

• 

hyphenation-ladder-count
;

• 

id
;

• 

keep-together
;

• 

keep-with-next
;

• 

keep-with-previous
;

• 

last-line-end-indent
;

• 

linefeed-treatment
;

• 

line-height
;

• 

line-height-shift-adjustment
;

• 

line-stacking-strategy
;

• 

orphans
;

• 

relative-position
;

• 

space-treatment
;

• 

span
;

• 

text-align
;

• 

text-align-last
;

• 

text-indent
;

• 

visibility
;

• 

white-space-collapse
;

• 

widows
;

• 

wrap-option
;

• 

z-index
.

Например, я могу добавить в документ заголовок «The Planets Table» (Таблица планет), задав шрифт

Times
(в данный момент fop поставляется с встроенными шрифтами
Times
,
Helvetica
,
Courier
,
Symbol
,
sans-serif
,
serif
и
ZapfDingbats
) в свойстве
font-family
, размер шрифта 36 пунктов в свойстве
font-size
и полужирный стиль, установив свойство
font-weight
в «
bold
». Высоту блока я задам при помощи свойства
line-height
и покажу заголовок голубым при помощи свойства
color
:

<?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:layout-master-set>

   <fo:page-sequence master-name="page">

    <fo:flow flow-name="xsl-region-body">

    <fo:block font-weight="bold" font-size="36pt"

     line-height="48pt" font-family="Times" color="blue">

     The Planets Table

    </fo:block>

    <xsl:apply-templates/>

   </fo:flow>

  </fo:page-sequence>

  .

  .

  .

Этот код создаст блок заголовка, который показан в верхней части текста на 1. Таким способом я могу создать аналогичные блоки для каждого элемента данных каждой планеты при помощи таблицы стилей XSLT. Заметьте также, что я вывожу имя каждой планеты курсивом, установив свойство

font-style
в «italic», и я подчеркиваю остальной текст при помощи свойства
text-decoration
элементов
<fo:inline>
, которые мы рассмотрим в следующей главе:

<?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:layout-master-set>

   <fo:page-sequence master-name="page">

    .

    .

    .

   </fo:page-sequence>

  </fo:root>

 </xsl:template>


 <xsl:template match="PLANET/NAME">

  <fo:block font-weight="bold" font-size="28pt"

   line-height="48pt" font-family="Times" font-style="italiс">

   Planet:

   <xsl:apply-templates/>

  </fo:block>

 </xsl:template>


 <xsl:template match="PLANET/MASS">

  <fo:block font-size="24pt" line-height="32pt" font-family="Times">

   <fo:inline text-decoration="underline">

    Mass

   </fo:inline>:

   <xsl:apply-templates/>

   [Earth = 1]

  </fo:block>

 </xsl:template>

 .

 .

 .

</xsl:stylesheet>

Вот и все. Вы создали свое первое преобразование из XML в XSL-FO, преобразовав

planets.xml
в
planets.fo
. Процессор fop создаст из
planets.fo
файл
planets.pdf
, и вы можете вернуться к 1 и посмотреть на результат.

Это преобразование форматировало данные в

planets.xml
и отображало их в блоках, одно за другим. С другой стороны, в предыдущих главах мы видели данные планет в виде таблицы. Можно ли это сделать в XSL-FO? Никаких проблем.