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>
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.
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>
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.