Stefan Gesigora: Zeilenumbruch erzwingen

Hallo zusammen!

Kann man unter XSL einen Zeilenumbruch eines Strings ohne Leerzeichen erzwingen?
Ich habe ein Problem damit, da ich über eine xslt Datei eine fo Datei erzeuge und der fop mit dieser Datei eine pdf Datei baut. In dieser pdf Datei habe ich auch Tabellen. Wenn nun in einer der Zellen ein zu langer String drinsteht, zerschießt es mir das komplette Layout!!
Dann reicht der Text auch in die nächste Spalte hinein.

Daher würde ich gerne bei Strings einen Zeilenumbruch nach einer bestimmten Anzahl von Zeichen (z.B. 15) erzwingen...oder gibt es evtl. eine andere Lösung für mein Problem??

Danke im voraus!
Stefan

  1. Hallo,

    Kann man unter XSL einen Zeilenumbruch eines Strings ohne Leerzeichen erzwingen?

    man kann.

    Ich habe ein Problem damit, da ich über eine xslt Datei eine fo Datei erzeuge und der fop mit dieser Datei eine pdf Datei baut. In dieser pdf Datei habe ich auch Tabellen. Wenn nun in einer der Zellen ein zu langer String drinsteht, zerschießt es mir das komplette Layout!!
    Dann reicht der Text auch in die nächste Spalte hinein.

    Daher würde ich gerne bei Strings einen Zeilenumbruch nach einer bestimmten Anzahl von Zeichen (z.B. 15) erzwingen...oder gibt es evtl. eine andere Lösung für mein Problem??

    Die Lsung liegt in der Silbentrennung:
    http://www.w3.org/TR/xsl/slice7.html#hyphenation-push-character-count

    bzw.

    http://www.w3.org/TR/xsl/slice7.html#hyphenation-remain-character-count

    Ich weiss aber nicht in wieweit und ob FOP diese eigenschaften schon unterstützt.

    sonst könnte <fo:block wrap-option="wrap"> gehen und falls dies auch nicht tut, kannst du so etwas versuchen:

    <xsl:template match="deinElement">
       fo:block
          xsl:choose
             <xsl:when test="string-lenght(.) > 15">
                <xsl:value-of select="substring(., 1,15)" />
                   <fo:character treat-as-word-space="true">&#160;</fo:character>
                <xsl:value-of select="substring(., 16)" />
             </xsl:when>
             xsl:otherwise
                <xsl:value-of select="." />
             </xsl:otherwise>
          </xsl:choose>
       </fo:block>
    </xsl:template>

    grüße
    thomas

    1. Vielen Dank Thomas!

      Die Idee mit der Silbentrennung funktioniert. Ich habe jetzt folgendes (bisher mir völlig unbekanntes) Tag verwendet: hyphenate="true"

      Gruß
      Stefan