Feature der Woche: Mehrseitige PDFs einbinden
Diese Woche gibt es ein sehr kurzes Beispiel: wie binde ich mehrseitige PDF Dateien im speedata Publisher ein?
Eigentlich ist die Sache ganz einfach. Mithilfe der Funktion
sd:number-of-pages()
kann man ermitteln, wie viele Seiten
eine PDF-Datei hat. Und bei dem
Befehl Image
, um ein Bild einzubinden, kann man die gewünschte
Seitenzahl angeben (das natürlich nur Sinn ergibt, wenn man eine PDF-Datei
einbettet).
So ist das Muster, alle Seiten einer PDF-Datei einzubinden, wie folgt:
<Layout xmlns="urn:speedata.de:2009/publisher/en"
xmlns:sd="urn:speedata:2009/publisher/functions/en">
<Record element="data">
<SetVariable variable="myfile" select="'multipage.pdf'"/>
<Loop select="sd:number-of-pages($myfile)" variable="page">
<PlaceObject column="0mm" row="0mm">
<Image file="{$myfile}" width="210mm" page="{$page}"/>
</PlaceObject>
<NewPage/>
</Loop>
</Record>
</Layout>
Speichern unter layout.xml
und übersetzen mit sp --dummy
, da keine Datendatei vorliegt.
Die eingebundenen Seiten lassen sich nachträglich natürlich auch »überschreiben«, also mit einer Seitenzahl oder einem Bild (Wasserzeichen oder ähnliches).
Ein paar Erläuterungen zu dem Codeschnipsel
- Zuerst merke ich mir den Dateinamen in der Variablen
myfile
. Das ist nicht zwingend notwendig. Wichtig sind die einfachen Anführungszeichen innerhalb der doppelten Anführungszeichen vonselect
, damit wird die Zeichenkette »multipage.pdf« gespeichert. - Die Schleife (
Loop
) wird genau so oft durchlaufen, wie die PDF-Datei Seiten hat, die Nummer des Schleifendurchlaufs wird in der Variablenpage
gesichert. - Um auf die Variablen zuzugreifen benötige ich die geschweiften Klammern, da weder
file
nochpage
einen XPath-Ausdruck erwarten, sondern einen festen Wert. Damit ich aber auf die Variablen zugreifen kann, muss ich vorübergehend in den XPath-Modus springen. Das passiert mit den geschweiften Klammern. Diese werden ersetzt durch das Resultat des Ausdrucks. So wird aus
file="{$myfile}"
durch die Ersetzung ein
file="multipage.pdf"
das den Publisher den Dateinamen für das einzubindende Bild übergibt.
In der Serie »Feature der Woche« beschreibe ich jeden Montag mehr oder weniger nützliche Eigenschaften des Publishers. Kommentare gerne an mich per E-Mail oder einfach im Kommentarfeld.