Helmi: XSL:FO Portrait & Landscape

HAllo

Also ich bin gerade dabei, ein XML & ein XSL in ein PDF per FOP umzuwandeln.
Jetzt hab ich ein Problem:
Ich möchte die den verschiedenen Themen auf den verschiedenen Seiten sagen können, ob sie Quer oder im Hochformat sind...

Eine Lösung wäre, eine Variable auszulesen und je nach dem in einer schlaufe der Reihe nach Simple-Master-Pages im hochformat zu generieren bis das erste Thema im Querformat kommt. Danach eine Schlaufe in einem neuen Simple-Master-Pages in Querformat bis wieder ein Hochformat Thema auftaucht und so weiter...
Dies ist aber eine etwas unschöne Lösung... Denn dies gibt einen Riesigen xsl:fo Code...

Was ich möchte ist:

  • Einen Variablen Page-Master setzten oder so, wo ich in der sequence die Werte gleich irgendwie ändern könnte, oder ein Page-Master mit 2 Layouts, welche wählbar wären...

Hat jemand ne Idee? Kennt sich jemand mit anderen Page-Mastern als der Simple Page Master aus?

Ich bin über jeden Tip froh!!

thx helmi

  1. Hallo,

    Eine Lösung wäre, eine Variable auszulesen und je nach dem in einer schlaufe der Reihe nach Simple-Master-Pages im hochformat zu generieren bis das erste Thema im Querformat kommt. Danach eine Schlaufe in einem neuen Simple-Master-Pages in Querformat bis wieder ein Hochformat Thema auftaucht und so weiter...
    Dies ist aber eine etwas unschöne Lösung... Denn dies gibt einen Riesigen xsl:fo Code...

    Und? Der XSL-FO Code muss ja alles beinhalten was das Dokument enthalten soll. Dann wird dein Code eben riesig, Alternative: du schreibst weniger. XSL-FO ist keine Programmiersprache, sonder eine Sprache für Layoutierung und wenn eine Seite anders Formatiert werden muss, dann müssen dafür die Formate numal in der XSL-FO-Sheet vorhanden sein.

    Was ich möchte ist:

    • Einen Variablen Page-Master setzten oder so, wo ich in der sequence die Werte gleich irgendwie ändern könnte, oder ein Page-Master mit 2 Layouts, welche wählbar wären...

    Hat jemand ne Idee? Kennt sich jemand mit anderen Page-Mastern als der Simple Page Master aus?

    Du könntest so vorgehen:
    Du erstellst so viele simple-page-master-s wie du brauchst, sie dienen ja als Layoutvorlage für Seitentypen.

    Dann definierst du in einem page-sequence-master ein repeatable-page-master-alternatives und in diesem kannst du mehrere conditional-page-master-reference angeben. Dann kannst du beim erstellen der Seiten ein page-sequence für die Querformat verwenden.

    Ein koplettes Bsp. (es sollte dir ermöglichen das Prinzip zu verstehen)

    Grüße
    Thomas
    --------------------
    <?xml version="1.0" encoding="iso-8859-1"?>
    <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">

    fo:layout-master-set
      <fo:simple-page-master
          master-name="titelSeite"
          page-width="21cm"
          page-height="29.7cm">
        <fo:region-body margin="3.5cm" border="5pt solid silver"/>
      </fo:simple-page-master>

    <fo:simple-page-master
          master-name="ersteSeite"
          page-width="21cm"
          page-height="29.7cm"
          margin="2cm">
        <fo:region-body margin="1cm"/>
      </fo:simple-page-master>

    <fo:simple-page-master
          master-name="inhaltsVerz"
          page-width="21cm"
          page-height="29.7cm"
          margin="2cm 1.5cm">
        <fo:region-body margin="1cm" border-left="3pt solid blue"  border-right="3pt solid blue" padding="0pt 10pt 0pt 10pt"/>
      </fo:simple-page-master>

    <fo:simple-page-master
          master-name="ungeradeSeiten"
          page-width="21cm"
          page-height="29.7cm"
          margin-top="1cm"
          margin-bottom="2cm"
          margin-left="2.5cm"
          margin-right="1.5cm">
        <fo:region-body margin="1cm" border-right="3pt solid blue" padding-right="10pt"/>
        <fo:region-after extent="1cm"/>
      </fo:simple-page-master>

    <fo:simple-page-master
          master-name="geradeSeiten"
          page-width="21cm"
          page-height="29.7cm"
          margin-top="1cm"
          margin-bottom="2cm"
          margin-left="1.5cm"
          margin-right="2.5cm">
        <fo:region-body margin="1cm" border-left="3pt solid blue" padding-left="10pt"/>
        <fo:region-after extent="1cm"/>
      </fo:simple-page-master>

    <fo:simple-page-master
          master-name="leerSeite"
          page-width="21cm"
          page-height="29.7cm">
        fo:region-body/
      </fo:simple-page-master>

    <fo:page-sequence-master master-name="Titelblatt">
        <fo:single-page-master-reference master-reference="titelSeite"/>
      </fo:page-sequence-master>

    <fo:page-sequence-master master-name="Inhaltsverzeichnis">
      <fo:repeatable-page-master-reference master-reference="inhaltsVerz"/>
      </fo:page-sequence-master>

    <fo:page-sequence-master master-name="meineSeitensequenz">
        fo:repeatable-page-master-alternatives
          <fo:conditional-page-master-reference page-position="first" master-reference="ersteSeite"/>
          <fo:conditional-page-master-reference blank-or-not-blank="blank" master-reference="leerSeite"/>
          <fo:conditional-page-master-reference odd-or-even="odd" master-reference="ungeradeSeiten"/>
          <fo:conditional-page-master-reference odd-or-even="even" master-reference="geradeSeiten"/>
      </fo:repeatable-page-master-alternatives>
      </fo:page-sequence-master>
    </fo:layout-master-set>

    <fo:page-sequence master-reference="Titelblatt" force-page-count="no-force">
      <fo:flow flow-name="xsl-region-body">
        <!-- Inhalt der Titelseite -->
      </fo:flow>
    </fo:page-sequence>

    <fo:page-sequence force-page-count="no-force" initial-page-number="1" master-name="Inhaltsverzeichnis">
      <fo:static-content flow-name="xsl-region-after">
        fo:block
          fo:page-number/
        </fo:block>
      </fo:static-content>
      <fo:flow flow-name="xsl-region-body">
        <!-- Inhalt des Inhaltsverzeichnisses -->
      </fo:flow>
    </fo:page-sequence>

    <fo:page-sequence master-reference="meineSeitensequenz" initial-page-number="1" force-page-count="even">
      <fo:static-content flow-name="xsl-region-after">
        fo:block
          fo:page-number/
        </fo:block>
      </fo:static-content>
      <fo:flow flow-name="xsl-region-body">
        <!-- Inhalt des ersten Kapitels -->
      </fo:flow>
    </fo:page-sequence>

    <fo:page-sequence master-reference="meineSeitensequenz" initial-page-number="auto-odd" force-page-count="even">
      <fo:static-content flow-name="xsl-region-after">
        fo:block
          fo:page-number/
        </fo:block>
      </fo:static-content>
      <fo:flow flow-name="xsl-region-body">
        <!-- Inhalt des zweiten Kapitels -->
      </fo:flow>
    </fo:page-sequence>
    </fo:root>