Mehrseitige PDF-Dateien einbinden

Mehrere Seiten einer PDF-Datei einzubinden ist einfach. Mithilfe der Layoutfunktion sd:number-of-pages() kann man ermitteln, wie viele Seiten eine PDF-Datei hat. Bei dem Befehl <Image>, um ein Bild einzubinden, kann man die gewünschte Seitenzahl angeben. 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>

① Zuerst wird der Dateiname in der Variablen myfile gespeichert. 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ötigt man die geschweiften Klammern, da weder file noch page einen XPath-Ausdruck erwarten, sondern einen festen Wert. Damit man auf die Variablen zugreifen kann, muss vorübergehend in den XPath-Modus gesprungen werden. So wird aus

file="{$myfile}"

durch die Ersetzung

file="multipage.pdf"

Die eingebundenen Seiten lassen sich nachträglich natürlich auch »überschreiben«, also mit einer Seitenzahl oder einem Bild (Wasserzeichen oder ähnliches).