Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«XSLTΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 103

Автор Π‘Ρ‚ΠΈΠ²Π΅Π½ Π₯ΠΎΠ»Π·Π½Π΅Ρ€

Π Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ тСкста ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² Π±Π»ΠΎΠΊΠΎΠ²: <fo:block-container>

ΠŸΡ€ΠΎΡ†Π΅ΡΡΠΎΡ€Ρ‹ XSL-FO Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΈ ΠΏΠΎΡ…ΠΎΠΆΠΈ Π½Π° Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Ρ‹ HTML: ΠΎΠ½ΠΈ Π²ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ Π±Π»ΠΎΠΊΠΈ Π² Β«ΠΏΠΎΡ‚ΠΎΠΊΒ» (flow) страницы, Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ эти Π±Π»ΠΎΠΊΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒΡΡ ΠΏΠΎ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρƒ, ΠΊΠ°ΠΊ Π² HTML-Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅. Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, ΠΈΠ½ΠΎΠ³Π΄Π° Π±Ρ‹Π²Π°Π΅Ρ‚ Π²Π°ΠΆΠ½ΠΎ ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ элСмСнты Π² страницС Π½Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ мСста. И Π² XSL-FO Ρƒ вас Π΅ΡΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ элСмСнты Π»ΠΈΠ±ΠΎ Π² Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½Ρ‹Ρ… ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°Ρ… страницы, Π»ΠΈΠ±ΠΎ Π² ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°Ρ… ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π΄Ρ€ΡƒΠ³ΠΈΡ… элСмСнтов.

Для дСмонстрации я Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡΡŒ элСмСнтом <fo:block-container>, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚ΡŒ, выступаСт Π² качСствС ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° Π±Π»ΠΎΠΊΠΎΠ². Π£Π΄ΠΎΠ±Π½ΠΎ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ Π±Π»ΠΎΠΊΠΎΠ² ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ свойства Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎΠ³ΠΎ позиционирования, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ сами Π±Π»ΠΎΠΊΠΈ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚.

Π‘ элСмСнтом <fo:block-container> ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ свойства:

β€’ ΠΎΠ±Ρ‰ΠΈΠ΅ свойства Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎΠΉ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ: absolute-position, top, right, bottom, left;

β€’ ΠΎΠ±Ρ‰ΠΈΠ΅ свойства Π³Ρ€Π°Π½ΠΈΡ†, заполнСния ΠΈ Π·Π°Π΄Π½Π΅Π³ΠΎ Ρ„ΠΎΠ½Π°: 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;

β€’ ΠΎΠ±Ρ‰ΠΈΠ΅ свойства ΠΏΠΎΠ»Π΅ΠΉ для Π±Π»ΠΎΠΊΠΎΠ²: margin-top, margin-bottom, margin-left, margin-right, space-before, space-after, start-indent, end-indent;

β€’ block-progression-dimension;

β€’ break-after;

β€’ break-before;

β€’ clip;

β€’ display-align;

β€’ height;

β€’ id;

β€’ inline-progression-dimension;

β€’ keep-together;

β€’ keep-with-next;

β€’ keep-with-previous;

β€’ overflow;

β€’ reference-orientation;

β€’ span;

β€’ width;

β€’ writing-mode.

Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ (листинг 12.3) я ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ Π±Π»ΠΎΠΊΠΎΠ² ΠΊΠ°ΠΊ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ для Π±Π»ΠΎΠΊΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ я Ρ…ΠΎΡ‡Ρƒ ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ мСста страницы

Листинг 12.3. blockcontainer.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-container height="4cm" width="12cm" top="0cm" left="0cm"

    position="absolute">

    <fo:block text-align="start" line-height="18pt"

     font-family="sans-serif" font-weight="bold" font-size="14pt">

     Starpowder

    </fo:block>

    <fo:block text-align="start" line-height="18pt"

     font-family="sans-serif" font-size="14pt">

     The Starpowder Building:

    </fo:block>

    <fo:block text-align="start" line-height="18pt"

     font-family="sans-serif" font-size="14pt">

     1 Starpowder Avenue

    </fo:block>

    <fo:block text-align="start" line-height="18pt"

     font-family="sans-serif" font-size="14pt">

     New York. NY. 10011

    </fo:block>

   </fo:block-container>

   <fo:block-container height="1cm" width="6cm" top="0cm" left="14cm"

    position="absolute">

    <fo:block text-align="start" line-height="22pt"

     font-family="sans-serif" font-size="23pt">

     Invoice

    </fo:block>

   </fo:block-container>

   <fo:block-container border-color="black" border-style="solid"

    border-width="1pt" height="0.7cm" width="3.5cm" top="1.2cm"

    left="12.0cm" padding="2pt" position="absolute">

    <fo:block text-align="start" line-height="15pt"

     font-family="sans-serif" font-size="12pt">

     Date

    </fo:block>

   </fo:block-container>

   <fo:block-container border-color="black" border-style="solid"

    border-width="1pt" height="0.7cm" width="3.5cm" top="1.9cm"

    left="12.0cm" padding="2pt" position="absolute">

    <fo:block text-align="start" line-height="15pt"

     font-family="sans-serif" font-size="12pt">

     January 1, 2002

    </fo:block>

   </fo:block-container>

   <fo:block-container border-color="black" border-style="solid"

    border-width="1pt" height="0.7cm" width="3.5cm" top="1.2cm"

    left="15.5cm" padding="2pt" position="absolute">

    <fo:block text-align="start" line-height="15pt"

     font-family="sans-serif" font-size="12pt">

     Terms

    </fo:block>

   </fo:block-container>

   <fo:block-container border-color="black" border-style="solid"

    border-width="1pt" height="0.7cm" width="3.5cm" top="1.9cm"

    left="15.5cm" padding="2pt" position="absolute">

    <fo:block text-align="start" line-height="15pt"

     font-family="sans-serif" font-size="12pt">

     Immediate

    </fo:block>

   </fo:block-container>

   <fo:block-container border-color="black" border-style="solid"

    border-width="1pt" height="1.0cm" width="9cm" top="3cm"

    left="0cm" padding="2pt" position="absolute">

    <fo:block text-align="center" line-height="22pt"

     font-family="sans-serif" font-size="18pt">

     Description of Service

    </fo:block>

   </fo:block-container>

   <fo:block-container border-color="black" border-style="solid"

    border-width="1pt" height="4cm" width="9cm" top="4.0cm"

    left="0cm" padding="2pt" position="absolute">

    <fo:block text-align="start" line-height="15pt"

     font-family="sans-serif" font-size="12pt">

    </fo:block>

   </fo:block-container>

   <fo:block-container border-color="black" border-style="solid"

    border-width="1pt" height="1.0cm" width="9cm" top="3cm"

    left="10cm" padding="2pt" position="absolute">

    <fo:block text-align="center" line-height="22pt"

     font-family="sans-serif" font-size="18pt">

     Address for Payment:

    </fo:block>

   </fo:block-container>

   <fo:block-container border-color="black" border-style="solid"

    border-width="1pt" height="4cm" width="9cm" top="4.0cm"

    left="10cm" padding="2pt" position="absolute">

    <fo:block text-align="start" line-height="15pt"

     font-family="sans-serif" font-size="12pt">

    </fo:block>

   </fo:block-container>

  </fo:flow>

 </fo:page-sequence>

</fo:root>

Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ PDF, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ процСссор fop создаст ΠΈΠ· blockcontainers.fo, ΠΏΠΎΠΊΠ°Π·Π°Π½ Π½Π° рис. 12.2. Как ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ Π½Π° рисункС, я помСстил Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Π±Π»ΠΎΠΊΠΈ Π² Ρ€Π°Π·Π½Ρ‹Π΅ мСста Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°. НСкоторыС ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½Ρ‹ сразу ΠΆΠ΅ ΠΏΠΎΠ²Π΅Ρ€Ρ… Π΄Ρ€ΡƒΠ³ΠΈΡ…, поэтому Π² Π΄Π°Π½Π½ΠΎΠΌ случаС Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ ΠΈΠ³Ρ€Π°Π΅Ρ‚ Π²Π°ΠΆΠ½ΡƒΡŽ Ρ€ΠΎΠ»ΡŒ.

Рис. 12.2. ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² Π±Π»ΠΎΠΊΠΎΠ² 


На самом Π΄Π΅Π»Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°ΠΌΠΈ Π±Π»ΠΎΠΊΠΎΠ² просто. ВзглянитС, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½Π° ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ Β«Description of ServiceΒ» (ОписаниС услуги) Π½Π° рис. 12.2. Π― создал Π΅Π³ΠΎ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Π΄Π²ΡƒΡ… ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² Π±Π»ΠΎΠΊΠΎΠ²: ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π½ΠΈΡ… содСрТит Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ Β«Description of ServiceΒ», Π° Π²Ρ‚ΠΎΡ€ΠΎΠΉ β€” пустой ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ сразу ΠΏΠΎΠ΄ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ. Для создания ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ° Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° я ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠ» элСмСнт <fo:block-container>, ΡƒΠΊΠ°Π·Π°Π² Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ° Π² свойствах height (высота) ΠΈ width (ΡˆΠΈΡ€ΠΈΠ½Π°) ΠΈ Π·Π°Π΄Π°Π² Π³Ρ€Π°Π½ΠΈΡ†Ρƒ Π² свойствС border-width. ПолоТСниС ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ° Π½Π° страницС я Π·Π°Π΄Π°Π», установив свойство position Π² absolute ΠΈ установив свойства left (Π»Π΅Π²Ρ‹ΠΉ) ΠΈ top (Π²Π΅Ρ€Ρ…Π½ΠΈΠΉ) для размСщСния Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ Π»Π΅Π²ΠΎΠ³ΠΎ ΡƒΠ³Π»Π° ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ° ΠΏΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡŽ ΠΊ Π²Π΅Ρ€Ρ…Π½Π΅ΠΌΡƒ Π»Π΅Π²ΠΎΠΌΡƒ ΡƒΠ³Π»Ρƒ страницы:

<fo:block-container border-color="black" border-style="solid"

 border-width="1pt" height="1.0cm" width="9cm" top="3cm"

 left="0cm" padding="2pt" position="absolute">

 .

 .

 .

</fo:block-container>

Π’Π΅ΠΏΠ΅Ρ€ΡŒ я ΠΌΠΎΠ³Ρƒ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Π±Π»ΠΎΠΊ, содСрТащий Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ Β«Description of ServiceΒ»:

<fo:block-container border-color="black" border-style="solid"

 border-width="1pt" height="1.0cm" width="9cm" top="3cm"

 left="0cm" padding="2pt" position="absolute">

 <fo:block text-align="center" line-height="22pt"

  font-family="sans-serif" font-size="18pt">

  Description of Service

 </fo:block>

</fo:block-container>

ПослС этого я Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°ΡŽ пустой ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ сразу ΠΏΠΎΠ΄ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΎΠΌ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°:

</fo:block-container>

<fo:block-container border-color="black" border-style="solid"

 border-width="1pt" height="1.0cm" width="9cm" top="3cm"

 left="0cm" padding="2pt" position="absolute">

 <fo:block text-align="center" line-height="22pt"

  font-family="sans-serif" font-size="18pt">

  Description of Service

 </fo:block>

</fo:block-container>

<fo:block-container border-color="black" border-style="solid"

 border-width="1pt" height="4cm" width="9cm" top="4.0cm"