Cathie: XSL FO: Tabellenzellen mit Zeilenumbruch

Hallo zusammen!

Ich möchte mit XSL FO eine Tabelle zeichnen. Das Problem liegt allerdings bei den Tabellenzeilen, die einen Text enthalten, der nicht ganz in die Zelle passt und daher umgebrochen wird. Diese Zellen werden eine Zeile tiefer gezeichnet.

Es soll so aussehen:
1. Zeile  Lange Zeile, die
          umgebrochen wird

Es wird aber so gezeichnet:
1. Zeile
          Lange Zeile, die
          umgebrochen wird

Ich denke, den Fehler habe ich schon gefunden, aber ich weiß nicht, wie ich das lösen soll. Im Moment sieht die Tabelle so aus:

<fo:block-container top="65mm" left="34mm" position="fixed">
  fo:block
    fo:table
      <fo:table-column column-number="1" column-width="8%"/>
      <fo:table-column column-number="2" column-width="26%"/>
      fo:table-body
        fo:table-row
          <fo:table-cell column-number="1" break-after="column">
            fo:block
              1. Zeile
            </fo:block>
          </fo:table-cell>
          <fo:table-cell column-number="2" keep-together="1">
            fo:block
              Lange Zeile, die umgebrochen wird
            </fo:block>
          </fo:table-cell>
        </fo:table-row>
      </fo:table-body>
    </fo:table>
  </fo:block>
</fo:block-container>

Wenn ich in der ersten Zeile die Angabe position="fixed" ändere oder wegnehme, dann wird die Tabelle in sich richtig gezeichnet, allerdings ganz am linken Seitenrand.

Weiß jemand eine Lösung dazu? Gibt es vielleicht Alternativen zu positon="fixed", mit der ich die Tabelle genau positionieren kann?

Schöne Grüße,
Cathie

  1. Hallo,

    Ich denke, den Fehler habe ich schon gefunden, aber ich weiß nicht, wie ich das lösen soll. Im Moment sieht die Tabelle so aus:

    Wenn ich in der ersten Zeile die Angabe position="fixed" ändere oder wegnehme, dann wird die Tabelle in sich richtig gezeichnet, allerdings ganz am linken Seitenrand.

    Für den Druck hat position="fixed" keine Bedeutung. Davon abgesehen, kann es sein das dein FO-Prozessor diese Eigenschaft nicht oder nur fehlerhaft unterstüztz.

    Weiß jemand eine Lösung dazu? Gibt es vielleicht Alternativen zu positon="fixed", mit der ich die Tabelle genau positionieren kann?

    Wenn du sagt, wozu du eine Tabelle im Druck positionieren (damit meine ich position="fixed") willst, vielleicht.

    Grüße
    Thomas

    1. Hallo und danke für die Antwort!

      Für den Druck hat position="fixed" keine Bedeutung. Davon
      abgesehen, kann es sein das dein FO-Prozessor diese Eigenschaft
      nicht oder nur fehlerhaft unterstüztz.

      Ich benutze im Moment FOP. Hier (http://www.data2type.de/xml/Vergleich.html) steht, dass block-container nur fehlerhaft unterstützt wird. Würdest du denn einen anderen FO-Prozessor empfehlen?
      Und was meinst du genau mit "keine Bedeutung" für den Druck?

      Weiß jemand eine Lösung dazu? Gibt es vielleicht Alternativen zu
      positon="fixed", mit der ich die Tabelle genau positionieren kann?

      Wenn du sagt, wozu du eine Tabelle im Druck positionieren (damit
      meine ich position="fixed") willst, vielleicht.

      Ich muss nicht unbedingt "fixed" verwenden, wenn man die Tabelle auch noch anders positionieren kann. Allerdings erzeugt "absolut" den gleichen Fehler wie "fixed". "static", "inherid" und "relativ" führen dagegen dazu, dass die Tabelle an den linken Rand der Seite rutscht. Ich habe noch nicht rausgefunden, wie man die Tabelle von dort aus wieder in die Mitte der Seite bekommt. Am liebsten wäre es mir also, wenn ich static, inherid oder relativ benutzen könnte und die Tabelle trotzdem in der Mitte der Seite stehen würde.

      Schöne Grüße,
      Cathie

      1. Hallo,

        Für den Druck hat position="fixed" keine Bedeutung. Davon
        abgesehen, kann es sein das dein FO-Prozessor diese Eigenschaft
        nicht oder nur fehlerhaft unterstüztz.

        Ich benutze im Moment FOP. Hier (http://www.data2type.de/xml/Vergleich.html) steht, dass block-container nur fehlerhaft unterstützt wird.

        Korrekt:
        http://xmlgraphics.apache.org/fop/compliance.html#fo-object-section

        Würdest du denn einen anderen FO-Prozessor empfehlen?

        FOP ist der so weit vollständigste OpenSource XSL-FO-Prozessor. Ander die besser sind, sind kommerziell.

        Und was meinst du genau mit "keine Bedeutung" für den Druck?

        Du willst die Tabelle kaum in jeder Seite drinn haben wollen?
        http://www.w3.org/TR/xsl/slice7.html#position

        Ich muss nicht unbedingt "fixed" verwenden, wenn man die Tabelle auch noch anders positionieren kann. Allerdings erzeugt "absolut" den gleichen Fehler wie "fixed". "static", "inherid" und "relativ" führen dagegen dazu, dass die Tabelle an den linken Rand der Seite rutscht. Ich habe noch nicht rausgefunden, wie man die Tabelle von dort aus wieder in die Mitte der Seite bekommt. Am liebsten wäre es mir also, wenn ich static, inherid oder relativ benutzen könnte und die Tabelle trotzdem in der Mitte der Seite stehen würde.

        Das heisst du willst die Tabelle lediglich in der Mitte der Seite zentriert haben?
        Warum formatierst du nicht das umgebende fo:block entsprechend bzw. erstellst (padding-top, padding-left) einen workaround wie im HTML: d.h. eine Tabelle mit einer Zelle (dort geht ein display-aling="center") und darin dann deine eigentliche Tabelle?
        Klar ist das mühsam, aber wenn der Prozessor was nicht kann, bleibt nur sowas.

        Grüße
        Thomas

        1. Hallo Thomas!

          Vielen Dank für die Hilfe. Es klappt jetzt :)

          Bei deinem Link:
          http://xmlgraphics.apache.org/fop/compliance.html#fo-object-section
          stand unter block-container folgender Kommentar:
          For absolute positioning, use 'position="absolute"' (as 'absolute-position="absolute"' is not implemented), and specify all four of "left", "top", "width" and "height"

          Es war nur nötig, width und height zu definieren, dann ging es. Das war meine Rettung :)

          Schöne Grüße und vielen Dank!
          Cathie