von Patrick Gundlach |

Feature der Woche: Schriftfarbe einer Seite

Letzte Woche habe ich wieder ein Feature eingebaut, das ich in einem aktuellen Projekte benötige: Man kann die Textfarbe nun für eine Seite voreinstellen. Das ist praktisch, wenn z.B. auf der ersten Seite die Textfarbe weiß sein soll (weil auf einem dunklen Hintergrund geschrieben wird) und auf den Folgeseiten schwarz.

Unabdingbar ist das Feature, wenn bei der Textausgabe von <Output> mit <Text> ein Seitenumbruch mitten im Absatz vorkommt. Bisher ist es nicht möglich, dass der Text dann nach dem Umbruch automatisch eine andere Farbe bekommt.

Ich nehme mal das Typographie-Beispiel von Github. Hier wird explizit die Farbe white als Textfarbe eingestellt:

<Layout
    xmlns="urn:speedata.de:2009/publisher/en"
    xmlns:sd="urn:speedata:2009/publisher/functions/en">
    <LoadFontfile name="PlayfairDisplay-Regular" filename="PlayfairDisplay-Regular.ttf" />
    <LoadFontfile name="FaunaOne" filename="FaunaOne-Regular.ttf" />

    <DefineFontfamily name="heading" fontsize="40" leading="48">
        <Regular fontface="PlayfairDisplay-Regular"/>
    </DefineFontfamily>
    <DefineFontfamily name="text" fontsize="9" leading="14">
        <Regular fontface="FaunaOne"/>
    </DefineFontfamily>


    <DefineTextformat name="left" alignment="leftaligned"/>
    <DefineTextformat name="text" alignment="leftaligned" margin-bottom="10pt"/>

    <Pageformat width="210mm" height="140mm"/>

    <Record element="data">
        <PlaceObject column="0mm" row="0mm">
            <Image width="210mm" file="forest.jpg"/>
        </PlaceObject>
        <ProcessNode select="story"/>
    </Record>

    <Record element="story">
        <PlaceObject row="2" column="3">
            <Textblock width="8">
                <Paragraph color="white" fontface="heading" textformat="left">
                    <Value select="upper-case(@title)"/>
                </Paragraph>
            </Textblock>
        </PlaceObject>
        <PlaceObject column="3">
            <Textblock width="10" color="white">
                <ForAll select="p">
                    <Paragraph>
                        <Value select="."/>
                    </Paragraph>
                </ForAll>
            </Textblock>
        </PlaceObject>
    </Record>
</Layout>

Die Alternative ist nun, einen Seitentyp zu definieren, der die Farbe voreingestellt hat:

<Pagetype name="first" test="sd:current-page() = 1" defaultcolor="white">
  <Margin left="1cm" right="1cm" top="1cm" bottom="1cm"/>
</Pagetype>

Hier könnte man auch das Bild ausgeben:

<Pagetype name="first" test="sd:current-page() = 1" defaultcolor="white">
  <Margin left="1cm" right="1cm" top="1cm" bottom="1cm"/>
  <AtPageCreation>
    <PlaceObject column="0mm" row="0mm">
      <Image width="210mm" file="forest.jpg"/>
    </PlaceObject>
  </AtPageCreation>
</Pagetype>

Damit kann man das Regelwerk etwas verkürzen:

<Record element="data">
  <PlaceObject row="2" column="3">
    <Textblock width="8">
      <Paragraph fontface="heading" textformat="left">
        <Value select="upper-case(story/@title)"/>
      </Paragraph>
    </Textblock>
  </PlaceObject>
  <Loop select="4">
    <PlaceObject column="3">
      <Textblock width="10">
        <ForAll select="story/p">
          <Paragraph>
            <Value select="."/>
          </Paragraph>
        </ForAll>
      </Textblock>
    </PlaceObject>
  </Loop>
</Record>

Die Schriftfarbe wechselt automatisch von Weiß zu Schwarz

Dieser Artikel bezieht sich auf den speedata Publisher in der Version 2.9.3. Andere Versionen haben womöglich andere Befehle oder die genannten Befehle zeigen ein anderes Verhalten. Bitte schau im Zweifelsfall in der Anleitung nach.

In der Serie »Feature der Woche« beschreibe ich einmal in der Woche mehr oder weniger nützliche Eigenschaften des Publishers. Kommentare gerne an mich per E-Mail oder einfach im Kommentarfeld.