E-Book Startseite Karteikarten-Programm
0

Rahmen

In XSL-FO gibt es, genauso wie in CSS, die Rahmen. Rahmen werden für fo:block-Elemente verwendet, um um diese herum eine Rahmen zu erstellen. Dafür hilft das Attribut border. Es gibt 5 verschiedene Möglichkeiten für die Auswahl der Rahmenseite: border (gilt für oben, rechts, unten und links), border-before (gilt für oben), border-end (gilt für rechts), border-after (gilt für unten) und border-start (gilt für links). Diese Attribute sollten jedoch in dieser Form (anders als bei CSS) nicht vorkommen. Zu den Attributnamen müssen noch Zusätze beigefügt werden. Es gibt 3 mögliche Zusätze: color (zur Angabe der Farbe des Rahmens - englische Farbangaben z. B. black oder Hex-Dezimal-Werte #000000), style (Stil des Rahmens - zu den Werten gleich mehr) und width (Breite des Rahmens - alle Web-Maßeinheiten). Ein vollständiger Attributname wäre bspw. border-after-color oder border-end-width. Die möglichen Werte bei dem style-Zusatz sind solid (einfach), none (kein Rahmen), hidden (versteckter Rahmen), dotted (gepunkteter Rahmen), dashed (gestrichelter Rahmen), double (doppelter Rahmen), groove, ridge, inset und outset. Den Unterschied von groove, ridge, inset und outset lässt sich nicht wirklich erklären, also einfach ausprobieren.

<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>
<?xml-stylesheet href="foborder.xsl" type="text/xsl"?>
 
<wurzel>Test<wurzel>
<?xml version="1.0" encoding="ISO-8859-1"?>
 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format">
<xsl:template match="/">
  <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
    <fo:layout-master-set>
      <fo:simple-page-master master-name="seite" page-height="29.7cm" page-width="21cm" margin-top="1cm" margin-bottom="1cm" margin-left="1cm" margin-right="1cm">
        <fo:region-body margin-top="2.5cm" margin-bottom="2cm" margin-left="5.5cm" margin-right="1.5cm" />
        <fo:region-before region-name="top" extent="2cm" precedence="true" background-color="#FF0000" />
        <fo:region-after region-name="bottom" extent="1.5cm" precedence="true" background-color="#00FFFF" />
        <fo:region-start region-name="left" extent="5cm" background-color="#FFFF00" />
        <fo:region-end region-name="right" extent="1cm" background-color="#0000FF" />
      </fo:simple-page-master>
    </fo:layout-master-set>
    <fo:page-sequence master-reference="seite">
      <fo:static-content flow-name="top">
        <fo:block></fo:block>
      </fo:static-content>
      <fo:static-content flow-name="left">
        <fo:block></fo:block>
      </fo:static-content>
      <fo:static-content flow-name="right">
        <fo:block></fo:block>
      </fo:static-content>
      <fo:static-content flow-name="bottom">
        <fo:block></fo:block>
      </fo:static-content>
      <fo:flow flow-name="xsl-region-body">
        <fo:block><xsl:value-of select="." /></fo:block>
        <fo:block border-style="solid" border-width="1px" border-color="yellow" text-align="center">
        Dies ist ein Text mit Rahmen (solid)!</fo:block>
        <fo:block border-style="dashed" border-width="2px" border-color="blue" text-align="center">
        Dies ist ein Text mit Rahmen (dashed)!</fo:block>
        <fo:block border-style="groove" border-width="5px" border-color="red" text-align="center">
        Dies ist ein Text mit Rahmen (groove)!</fo:block>
      </fo:flow>
    </fo:page-sequence>
  </fo:root>
</xsl:template>
</xsl:stylesheet>
Anzeigebeispiel
Anzeigebeispiel (XML-Datei)



Anzeigebeispiel
Anzeigebeispiel (PDF-Datei)



Außenabstand

Eine wichtige Eigenschaft in der Programmiersprache XSL-FO ist der Außenabstand. Für die Einstellung der Außenabstände gibt es 5 verschiedene Attribute: margin (gilt für oben, rechts, unten und links), margin-top (gilt für oben), margin-right (gilt für rechts), margin-bottom (gilt für unten) und margin-left (giilt für links). Als Werte für die Attribute sind die bekannten Web-Maßeinheiten möglich. Bei Minuswerten können Überlappungen von Blöcken erzeugt werden - dies ist bei XSL-FO im Gegensatz zu CSS nicht zu empfehlen. Durch die margin-Attribute wird der eigentliche Inhalt verkleinert, wenn keine weiteren Angaben zur Größe vorgenommen worden sind. Für die gesamte Größe des Objektes muss der Wert von margin noch dazugezählt werden (siehe Box-Modell).

<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>
<?xml-stylesheet href="fomargin.xsl" type="text/xsl"?>
 
<wurzel>Test<wurzel>
<?xml version="1.0" encoding="ISO-8859-1"?>
 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format">
<xsl:template match="/">
  <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
    <fo:layout-master-set>
      <fo:simple-page-master master-name="seite" page-height="29.7cm" page-width="21cm" margin-top="1cm" margin-bottom="1cm" margin-left="1cm" margin-right="1cm">
        <fo:region-body margin-top="2.5cm" margin-bottom="2cm" margin-left="5.5cm" margin-right="1.5cm" />
        <fo:region-before region-name="top" extent="2cm" precedence="true" background-color="#FF0000" />
        <fo:region-after region-name="bottom" extent="1.5cm" precedence="true" background-color="#00FFFF" />
        <fo:region-start region-name="left" extent="5cm" background-color="#FFFF00" />
        <fo:region-end region-name="right" extent="1cm" background-color="#0000FF" />
      </fo:simple-page-master>
    </fo:layout-master-set>
    <fo:page-sequence master-reference="seite">
      <fo:static-content flow-name="top">
        <fo:block></fo:block>
      </fo:static-content>
      <fo:static-content flow-name="left">
        <fo:block></fo:block>
      </fo:static-content>
      <fo:static-content flow-name="right">
        <fo:block></fo:block>
      </fo:static-content>
      <fo:static-content flow-name="bottom">
        <fo:block></fo:block>
      </fo:static-content>
      <fo:flow flow-name="xsl-region-body">
        <fo:block><xsl:value-of select="." /></fo:block>
        <fo:block margin-left="3cm" margin-right="3cm" background-color="lime" text-align="center">
        Hallo!</fo:block>
      </fo:flow>
    </fo:page-sequence>
  </fo:root>
</xsl:template>
</xsl:stylesheet>
Anzeigebeispiel
Anzeigebeispiel (XML-Datei)



Anzeigebeispiel
Anzeigebeispiel (PDF-Datei)



Innenabstand

Ein vergleichbares Attribut zu margin ist padding. margin bezieht sich auf den Außenabstand. padding dagegen auf den Innenabstand. Der Innenabstand ist der Abstand zwischen dem eigentlichen Inhalt und dem Rahmen (border). Um welchen Innenabstand es sich hält, kann man mit den folgenden 9 Attributen genauer definieren: padding (gilt für oben, rechts, unten und links), padding-top (gilt für oben), padding-before (gilt in die Richtung zum region-before-Bereich), padding-right (gilt für rechts), padding-end (gilt in die Richtung zum region-end-Bereich), padding-bottom (gilt für unten), padding-after (gilt in die Richtung zum region-after-Bereich), padding-left (gilt für links) und padding-start (gilt in die Richtung zum region-start-Bereich). Auch hier dürfen alle bekannten Web-Maßeinheiten verwendet werden. Durch die padding-Attribute wird der eigentliche Inhalt nicht verkleinert. Für die gesamte Größe des Objektes muss der Wert von padding noch dazugezählt werden. Im Beispiel ist zu sehen, dass der Block durch die padding-Werte über den eigentlichen Bereich hinausgeht und somit die Grenzen überschreitet. Daher ist es in den meisten Fällen nötig mit fo:block-container den Bereich so einzuschränken, dass es nicht zu Überschreitungen kommen kann.

<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>
<?xml-stylesheet href="fopadding.xsl" type="text/xsl"?>
 
<wurzel>Test<wurzel>
<?xml version="1.0" encoding="ISO-8859-1"?>
 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format">
<xsl:template match="/">
  <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
    <fo:layout-master-set>
      <fo:simple-page-master master-name="seite" page-height="29.7cm" page-width="21cm" margin-top="1cm" margin-bottom="1cm" margin-left="1cm" margin-right="1cm">
        <fo:region-body margin-top="2.5cm" margin-bottom="2cm" margin-left="5.5cm" margin-right="1.5cm" />
        <fo:region-before region-name="top" extent="2cm" precedence="true" background-color="#FF0000" />
        <fo:region-after region-name="bottom" extent="1.5cm" precedence="true" background-color="#00FFFF" />
        <fo:region-start region-name="left" extent="5cm" background-color="#FFFF00" />
        <fo:region-end region-name="right" extent="1cm" background-color="#0000FF" />
      </fo:simple-page-master>
    </fo:layout-master-set>
    <fo:page-sequence master-reference="seite">
      <fo:static-content flow-name="top">
        <fo:block></fo:block>
      </fo:static-content>
      <fo:static-content flow-name="left">
        <fo:block></fo:block>
      </fo:static-content>
      <fo:static-content flow-name="right">
        <fo:block></fo:block>
      </fo:static-content>
      <fo:static-content flow-name="bottom">
        <fo:block></fo:block>
      </fo:static-content>
      <fo:flow flow-name="xsl-region-body">
        <fo:block><xsl:value-of select="." /></fo:block>
        <fo:block padding-left="1cm" padding-right="1cm" background-color="lime" text-align="center">
        Hallo!</fo:block>
      </fo:flow>
    </fo:page-sequence>
  </fo:root>
</xsl:template>
</xsl:stylesheet>
Anzeigebeispiel
Anzeigebeispiel (XML-Datei)



Anzeigebeispiel
Anzeigebeispiel (PDF-Datei)



Das Box-Modell

Innenabstand Wer CSS programmieren kann, der kennt das Box-Modell bereits. Für diejenigen die sich damit nicht auskennen wollen wir dies nochmals erklären. Das Box-Modell hilft bei der Berechnung der Größe eines Elements. Das eigentliche Element ist bspw. ein Rechteck, welches in fo:block erstellt worden ist. Die vollständige Größe kann man errechnen, indem man die Höhe / Breite des eigentlichen Elements, den padding-Wert, den border-width-Wert und den margin-Wert zusammenrechnet.








Design:
 


Logo
Benjamin Jung
Krummstr. 9/3
73054 Eislingen

E-Mail: info@homepage-webhilfe.de
Webseite: www.homepage-webhilfe.de