von Patrick Gundlach |

Feature der Woche: Platzierung von Objekten

Objekte werden immer entweder innerhalb des Rasters platziert oder mit absoluten Maßen. Beide Möglichkeiten haben ihre Vorteile und Nachteile und lassen sich nicht mischen. Der Befehl, um Objekte zu platzieren, heißt PlaceObject. Die Reihenfolge der Objektplatzierungen ist wichtig. Einerseits gibt es bei der Platzierung im Raster einen virtuellen Cursor, der sich die Position des letzten Objekts merkt. Andererseits werden später ausgegebene Objekte über die vorherigen Objekte gelegt.

Absolute Positionierung

Mit der absolute Positionierung lassen sich beispielsweise Hintergrundbilder über die ganze PDF-Seite legen. Dazu wählt man die Position column="0mm" bzw. row="0mm" aus. Natürlich ist hier jede Position möglich. Das wird dann in der Regel auch noch mit absoluten Breiten- und Höhenangaben kombiniert (width="210mm", height="297mm").

<Layout
    xmlns="urn:speedata.de:2009/publisher/en"
    xmlns:sd="urn:speedata:2009/publisher/functions/en">
    <Pageformat width="300mm" height="200mm" />

    <DefineFontfamily name="huge" fontsize="30" leading="30">
        <Regular fontface="TeXGyreHeros-Regular"/>
    </DefineFontfamily>

    <Record element="data">
        <PlaceObject column="0mm" row="0mm">
            <Image file="forest.jpg"/>
        </PlaceObject>
        <PlaceObject row="150mm" column="10mm">
            <Textblock>
                <Paragraph color="white" fontface="huge">
                    <Value>Text über dem Bild</Value>
                </Paragraph>
            </Textblock>
        </PlaceObject>
     </Record>
</Layout>

Später ausgegebene Objekte überlagern die früheren.

Platzierung im Raster

In der Praxis wird die Platzierung im Raster häufiger benutzt. Nachdem man ein Raster definiert hat, kann man mit Werten wie column="3" etwas in der dritten Spalte platzieren. Lässt man eine oder mehrere der Angaben von column bzw. row weg, sucht der Publisher automatisch nach einem passenden Ort für das Objekt. Das Objekt wird immer links oben in einer Zelle platziert. Ich zeige mal ein Extrembeispiel:

<Layout
    xmlns="urn:speedata.de:2009/publisher/en"
    xmlns:sd="urn:speedata:2009/publisher/functions/en">

    <SetGrid nx="4" ny="4"/>
    <Trace grid="yes"/>

    <Record element="data">
        <PlaceObject>
            <Textblock>
                <Paragraph>
                    <Value>Text<br/>nächste Zeile</Value>
                </Paragraph>
            </Textblock>
        </PlaceObject>
        <!-- es wird die nächste freie Rasterzeile benutzt -->
        <PlaceObject>
            <Image width="2cm" file="_samplea.pdf"/>
        </PlaceObject>
     </Record>
</Layout>

Nach der Ausgabe des Textes, der die gesamte Breite des PDFs ausnutzt (abzüglich Rand natürlich), ist der virtuelle Cursor in der zweiten Zeile. Daher wird das Bild auch dort ausgegeben.

Objekte werden immer links oben im Raster ausgegeben, Zeilen werden so umbrochen, wie die der Wert leading vorgibt.

halign / valign

Mit den Parametern halign (die möglichen Werte sind left, center und right) und valign (top, middle und bottom) kann man die Ausrichtung von Objekten beeinflussen. Das Verhalten ist aber nur sinnvoll bei die nicht über die gesamte Breite oder die gesamte Höhe gehen.

<PlaceObject halign="center" valign="bottom">
    <Image width="2cm" file="_samplea.pdf"/>
</PlaceObject>

Das Bild wird mittig (h) und unten angeordnet.

hreference / vreference

Die angegebenen Spalten- und Zeilenangabe ist ja immer die linke bzw. die obere Kante. So erstreckt sich das Bild hier

<PlaceObject column="3">
    <Image width="2" file="_samplea.pdf"/>
</PlaceObject>

über die Spalten 3 und 4. Setzt man hreference="right" (die Voreinstellung ist left), so wird die angegebene 3 in column als Zielspalte interpretiert, so dass das Bild sich über die Spalten 2 und 3 erstreckt. Dasselbe gilt für vreference (Voreinstellung top, alternativ bottom) analog.

Hier nun das vollständige Beispiel für hreference. Übersetzen wie immer mit sp --dummy.

<Layout
    xmlns="urn:speedata.de:2009/publisher/en"
    xmlns:sd="urn:speedata:2009/publisher/functions/en">

    <SetGrid nx="4" ny="4"/>
    <Trace grid="yes" />

    <Record element="data">
        <PlaceObject column="3" hreference="right">
            <Image width="2" file="_samplea.pdf"/>
        </PlaceObject>
     </Record>
</Layout>

Dieser Artikel bezieht sich auf den speedata Publisher in der Version 2.7.7. 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.