Dokumentenformate / Formatting Objects / fo:region-body

fo:region-body

fo:region-body

Um XML mit Hilfe von XSL nach PDF (png, rtf, tiff, png, txt, ps, pcl) transformieren zu können, ist zunächst eine Konvertierung in das Zwischenformat "FO" erforderlich.

Bereits die fo:region-body bietet zahlreiche Konfiguratiopnsmöglichkeiten. So ist bei mehrspaltiger Textdarstellung die Arbeit mit column-count="2", span="all" bzw. span="none" interessant. Ein Beispiel sagt hierbei mehr als viele Worte. Der XML Input sieht (kurz gefaßt) etwa so aus:


<?xml version="1.0" encoding="iso-8859-1"?>
<root>
  <Absatz>(Text)</Absatz>
  <Absatz span="ja">(Text)</Absatz>
  <Absatz>(Text)</Absatz>
</root>

Das folgende XSL-Stylesheet transformiert das vorherige XML-Dokument in ein FO-Dokument; ab hier "übernimmt" der FO-Prozessor die Transformation nach PDF.


<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:template match="/">
  <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
   <fo:layout-master-set>
    <fo:simple-page-master 
     margin-right="15mm"
     margin-left="15mm" 
     margin-bottom="1cm" 
     margin-top="1cm" 
     page-width="21cm"
     page-height="297mm" 
     master-name="layout1">
     <fo:region-body 
        margin-right="0cm" 
        margin-bottom="15mm"
        margin-top="0mm" 
        margin-left="0mm" 
        background-color="white"
        column-gap="5mm" column-count="2" />
    </fo:simple-page-master>
   </fo:layout-master-set>
   <fo:page-sequence master-reference="layout1">
    <fo:flow flow-name="xsl-region-body">
     <xsl:for-each select="/root/Absatz">
      <fo:block text-align="justify" 
         line-height="15pt"
         font-family="sans-serif" 
         font-size="12pt" 
         space-after.optimum="10pt">
       <xsl:choose>
        <xsl:when test="@span='ja'">
         <xsl:attribute name="span">all</xsl:attribute>
         <xsl:attribute name="background-color">lightgrey</xsl:attribute>       
         <xsl:attribute name="padding">2mm</xsl:attribute>
         <fo:inline color="red">
          <xsl:text>TOP </xsl:text>
          <xsl:value-of select="position()" />
         </fo:inline>
        </xsl:when>
        <xsl:otherwise>
         <xsl:attribute name="span">none</xsl:attribute>
         <fo:inline color="green">
          <xsl:text>TOP </xsl:text>
          <xsl:value-of select="position()" />
         </fo:inline>
        </xsl:otherwise>
       </xsl:choose>
       <xsl:text> </xsl:text>
       <xsl:value-of select="." />
      </fo:block>
     </xsl:for-each>
    </fo:flow>
   </fo:page-sequence>
  </fo:root>
 </xsl:template>
</xsl:stylesheet>

Das Ergebnis (mit mehr Text):

pic/FO4.jpg

wg / 2. Januar 2018



Fragen? Anmerkungen? Tips?

Bitte nehmen Sie Kontakt zu mir auf:

Vorname
Nachname
Mailadresse







Vielen Dank für Ihr Interesse an meiner Arbeit.


V.i.S.d.P.: Wilfried Grupe * Klus 6 * 37643 Negenborn

Mobil: 0151. 750 360 61 * eMail: info2018@wilfried-grupe.de

www.wilfried-grupe.de/FO1_3.html