von Patrick Gundlach |

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 von select, 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 Variablen page gesichert.
  • Um auf die Variablen zuzugreifen benötige ich die geschweiften Klammern, da weder file noch page 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.