Handbuch durchsuchen:

- Startseite
- Einleitung
- Hallo Welt!
- Grundlagen
  - Erstellen eines Layoutregelwerks
  - Aufbau der Datendatei und des Layoutregelwerks
  - Objekte ausgeben
  - Raster
  - Bereiche auf der Seite (PositioningArea)
  - Dateiorganisation
  - Silbentrennung / Spracheinstellungen
  - Einbinden von Schriftarten
  - Textformate
  - Textformatierung
  - Farben
- Programmierung
- Bilder einbinden
- Tabellen
- Fortgeschrittene Themen
  - Lesezeichen (Bookmarks)
  - Erzeugen von XML-Strukturen
  - Druckausgabe / Schnittmarken
  - CSS
  - Gruppen (virtuelle Objekte)
  - Virtuelle Seiten
  - Rotieren von Inhalten
  - Sortieren von Daten
  - Umfließen von Bildern
  - Seitentypen
  - Starten des Publishers über den Hotfolder
  - Lua-Filter / Datenvorverarbeitung
  - Schemavalidierung
  - Qualitätssicherung (PDF-Vergleich)
  - Fehlersuche / Debugging
  - Servermodus
- Kochbuch
  - Griffmarken
  - Mehrseitige PDF-Dateien einbinden
  - Layoutoptimierung mithilfe von Gruppen
  - Verzeichnisse erstellen
  - Seitenzahlen: Seite x von y
  - Aufzählungslisten nachahmen
- Installationsanleitung
- Dateinamen im Publisher
- Voreinstellungen im speedata Publisher
- Starten des Publishers über die Kommandozeile
- Konfiguration des Publishers
- Längenangaben und Maßeinheiten
- XPath- und Layoutfunktionen
- Interne Variablen
- Liste der Änderungen
- Glossar
- Befehlsreferenz
  - A
  - Action
  - AddSearchpath
  - AtPageCreation
  - AtPageShipout
  - AttachFile
  - Attribute
  - B
  - Barcode
  - Bold
  - BoldItalic
  - Bookmark
  - Box
  - Br
  - Case
  - Circle
  - Color
  - Column
  - Columns
  - Compatibility
  - Contents
  - Copy-of
  - DefineColor
  - DefineColorprofile
  - DefineFontalias
  - DefineFontfamily
  - DefineTextformat
  - Element
  - Fontface
  - ForAll
  - Frame
  - Grid
  - Group
  - Groupcontents
  - HSpace
  - Hyphenation
  - I
  - Image
  - Include
  - Initial
  - InsertPages
  - Italic
  - Layout
  - Li
  - LoadDataset
  - LoadFontfile
  - Loop
  - Makeindex
  - Margin
  - Mark
  - Message
  - NewPage
  - NextFrame
  - NextRow
  - NoBreak
  - Ol
  - Options
  - Otherwise
  - Output
  - Overlay
  - Pageformat
  - Pagetype
  - Paragraph
  - PDFOptions
  - PlaceObject
  - Position
  - PositioningArea
  - PositioningFrame
  - ProcessNode
  - Record
  - Regular
  - Rule
  - SaveDataset
  - SavePages
  - SetGrid
  - SetVariable
  - SortSequence
  - Stylesheet
  - Span
  - Sub
  - Sup
  - Switch
  - Table
  - TableNewPage
  - Tablefoot
  - Tablehead
  - Tablerule
  - Td
  - Text
  - Textblock
  - Tr
  - Trace
  - Transformation
  - U
  - Ul
  - Until
  - URL
  - Value
  - VSpace
  - While

Version 3.6.1
Handbuch durchsuchen:

- Startseite
- Einleitung
- Hallo Welt!
- Grundlagen
  - Erstellen eines Layoutregelwerks
  - Aufbau der Datendatei und des Layoutregelwerks
  - Objekte ausgeben
  - Raster
  - Bereiche auf der Seite (PositioningArea)
  - Dateiorganisation
  - Silbentrennung / Spracheinstellungen
  - Einbinden von Schriftarten
  - Textformate
  - Textformatierung
  - Farben
- Programmierung
- Bilder einbinden
- Tabellen
- Fortgeschrittene Themen
  - Lesezeichen (Bookmarks)
  - Erzeugen von XML-Strukturen
  - Druckausgabe / Schnittmarken
  - CSS
  - Gruppen (virtuelle Objekte)
  - Virtuelle Seiten
  - Rotieren von Inhalten
  - Sortieren von Daten
  - Umfließen von Bildern
  - Seitentypen
  - Starten des Publishers über den Hotfolder
  - Lua-Filter / Datenvorverarbeitung
  - Schemavalidierung
  - Qualitätssicherung (PDF-Vergleich)
  - Fehlersuche / Debugging
  - Servermodus
- Kochbuch
  - Griffmarken
  - Mehrseitige PDF-Dateien einbinden
  - Layoutoptimierung mithilfe von Gruppen
  - Verzeichnisse erstellen
  - Seitenzahlen: Seite x von y
  - Aufzählungslisten nachahmen
- Installationsanleitung
- Dateinamen im Publisher
- Voreinstellungen im speedata Publisher
- Starten des Publishers über die Kommandozeile
- Konfiguration des Publishers
- Längenangaben und Maßeinheiten
- XPath- und Layoutfunktionen
- Interne Variablen
- Liste der Änderungen
- Glossar
- Befehlsreferenz
  - A
  - Action
  - AddSearchpath
  - AtPageCreation
  - AtPageShipout
  - AttachFile
  - Attribute
  - B
  - Barcode
  - Bold
  - BoldItalic
  - Bookmark
  - Box
  - Br
  - Case
  - Circle
  - Color
  - Column
  - Columns
  - Compatibility
  - Contents
  - Copy-of
  - DefineColor
  - DefineColorprofile
  - DefineFontalias
  - DefineFontfamily
  - DefineTextformat
  - Element
  - Fontface
  - ForAll
  - Frame
  - Grid
  - Group
  - Groupcontents
  - HSpace
  - Hyphenation
  - I
  - Image
  - Include
  - Initial
  - InsertPages
  - Italic
  - Layout
  - Li
  - LoadDataset
  - LoadFontfile
  - Loop
  - Makeindex
  - Margin
  - Mark
  - Message
  - NewPage
  - NextFrame
  - NextRow
  - NoBreak
  - Ol
  - Options
  - Otherwise
  - Output
  - Overlay
  - Pageformat
  - Pagetype
  - Paragraph
  - PDFOptions
  - PlaceObject
  - Position
  - PositioningArea
  - PositioningFrame
  - ProcessNode
  - Record
  - Regular
  - Rule
  - SaveDataset
  - SavePages
  - SetGrid
  - SetVariable
  - SortSequence
  - Stylesheet
  - Span
  - Sub
  - Sup
  - Switch
  - Table
  - TableNewPage
  - Tablefoot
  - Tablehead
  - Tablerule
  - Td
  - Text
  - Textblock
  - Tr
  - Trace
  - Transformation
  - U
  - Ul
  - Until
  - URL
  - Value
  - VSpace
  - While

# Virtuelle Seiten

Mit den Virtuellen Seiten kann man, ähnlich wie bei den Virtuellen Bereichen (Gruppen), Seiten erzeugen und wieder verwerfen. Dazu gibt es die Befehle `<SavePages>` und `<InsertPages>` und die Layoutfunktion `sd:count-saved-pages()`. Der erste Befehl bewirkt, dass die Ausgaben innerhalb des Befehls nicht in das PDF geschrieben werden. Mit dem zweiten Befehl kann man diese gespeicherten Seiten ausgeben. Die Layoutfunktion ermittelt die Anzahl der gespeicherten Seiten.

### Beispiel

Es sollen Text und ein Bild auf genau einer Seite angezeigt werden, wobei das Bild möglichst groß und am besten im Textfluss angezeigt werden soll. Es soll nun so lange mit verschiedenen Parametern der Text gesetzt werden, bis Text und Bild genau auf eine Seite passen, also die Seitenzahl aus `sd:count-saved-pages()` den Wert 1 ergibt.

Die Datendatei `data.xml` ist wie folgt aufgebaut:

    <?xml version="1.0" encoding="UTF-8"?>
    <Journal>
      <Artikel ueberschrift="Gummibärchen">
        <Text>
          <Absatz>Freilebende Gummibärchen gibt es nicht.
            Man kauft sie in Packungen an der
            Kinokasse. Dieser Kauf ist der Beginn
            einer fast erotischen und sehr ambivalenten
            Beziehung Gummibärchen-Mensch. Zuerst genießt man.
            Dieser Genuß umfaßt alle Sinne.
            Man wühlt in den Gummibärchen, man fühlt sie.
          </Absatz>
        </Text>
      </Artikel>
    </Journal>

Die Layoutdatei ist etwas umfangreicher und wird in mehreren Etappen erläutert:

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

      <Options ignoreeol="yes" mainlanguage="German"/> ①

      <DefineFontfamily name="Title" fontsize="16" leading="16"> ②
        <Regular fontface="sans-bold"/>
      </DefineFontfamily>

      <SetGrid width="5mm" height="12pt"/> ③

      <Pagetype name="text" test="true()">
        <Margin left="1.5cm" right="0.5cm" top="1cm" bottom="2cm"/>

        <PositioningArea name="Überschrift"> ④
          <PositioningFrame width="27" height="8" row="1" column="1"/>
        </PositioningArea>

        <PositioningArea name="text">
          <PositioningFrame width="13" height="51" row="9" column="1"/>
          <PositioningFrame width="13" height="51" row="9" column="15"/>
        </PositioningArea>
      </Pagetype>

① Der Kopf ist wieder wie üblich. Die Option `ignoreeol` besagt, dass die Zeilenumbrüche in den Daten ignoriert werden sollen.

② Anschließend wird die Schriftgröße für die Überschrift eingestellt. Der Fließtext nutzt die voreingestellte Schriftart mit der Größe 10⁄12 Punkt.

③ Wenn man die Rasterhöhe gleich dem normalen Zeilenabstand setzt, kann man leicht registerhaltigen Satz erreichen. Der Seitentyp definiert zwei Seitenbereiche (siehe Abschnitt Bereiche auf der Seite (PositioningArea)).

④ Der Bereich für die Überschrift umfasst die ersten 8 Zeilen und ist unabhängig vom Textbereich.

Der Bereich für den Text besteht aus zwei Spalten.

Es folgt die eigentliche Datenverarbeitung. Anfangs werden die Vorgaben zur Bildposition und Bildgröße festgelegt. Die Variable `i` wählt dann die Vorgabe 1, 2 oder 3 aus.

      <Record element="Journal">

        <!-- Variante 1: Das Bild geht über die ganze Breite -->
        <SetVariable variable="bildbreite1" select="38"/>
        <SetVariable variable="bildspalte1" select="1"/>

        <!-- Variante 2: Das Bild fängt in der zweiten Spalte an -->
        <SetVariable variable="bildbreite2" select="24"/>
        <SetVariable variable="bildspalte2" select="15"/>

        <!-- Variante 3: Das Bild erscheint am rechten Rand -->
        <SetVariable variable="bildbreite3" select="10"/>
        <SetVariable variable="bildspalte3" select="29"/>

Nun folgt die Entscheidung über virtuelle Seiten.

        <SetVariable variable="i" select="0"/>
        <Until test="$i = 3"> ①
          <SetVariable variable="i" select="$i + 1"/>

          <SavePages name="seitemitbild"> ②
            ③
            <PlaceObject column="{sd:variable('bildspalte',$i)}" row="9">
              <Image width="{sd:variable('bildbreite',$i)}" file="_sampleb.pdf"/>
            </PlaceObject>
            <NextRow/>

            <PlaceObject column="{sd:variable('bildspalte',$i)}"> ④
              <Table stretch="max" padding="3pt">
                <Tr>
                  <Td padding-left="10pt" align="left">
                    <Paragraph>
                      <I><Value>Bildunterschrift</Value></I>
                    </Paragraph>
                  </Td>
                </Tr>
                <Tablerule rulewidth="20pt" color="white"/>
              </Table>
            </PlaceObject>

            <ProcessNode select="Artikel"/>
          </SavePages>

          <Switch>
            <Case test="sd:count-saved-pages('seitemitbild') = 1 ">
              <SetVariable variable="i" select="3"/>
            </Case>
          </Switch>

        </Until>
        <InsertPages name="seitemitbild"/>
      </Record>

① Die Schleife wird für die Werte i = 1, i = 2 und i = 3 durchlaufen.

② Ab hier werden die Inhalte zwischengespeichert.

③ Hier wird das Bild mit den Vorgaben ausgegeben.

④ Hier die Bildunterschrift.

Nun wird der Text ausgegeben.

Falls die gewünschte Seitenzahl (1) erreicht ist, wird i auf 3 gesetzt, um die Schleife vorzeitig abzubrechen.

Jetzt werden die gespeicherten Seiten ausgegeben.

Was jetzt noch fehlt ist ist die Ausgabe des Textes. Die wird oben in `<ProcessNode select="Artikel"/>` angestoßen. Da dies ein Beispiel ist, erzeugen wir einen Absatz in einer Schleife.

      <Record element="Artikel">
        <Output area="Überschrift">
          <Text>
            <Paragraph textformat="Title" fontface="Title">
              <Color name="green">
                <Value select="@ueberschrift"/>
              </Color>
            </Paragraph>
          </Text>
        </Output>

        <Loop select="7" variable="c">
          <Output area="text" allocate="auto">
            <Text>
              <Paragraph fontface="text">
                <Value select="Text/Absatz"/>
              </Paragraph>
            </Text>
          </Output>
        </Loop>
      </Record>
    </Layout>

Seitenaufbau mit 7 bzw. 12 Absätzen. Im ersten Fall wird die Vorgabe »2« angewendet, im zweiten Fall die Vorgabe »3«

- Gruppen (virtuelle Objekte)
- Rotieren von Inhalten