Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Enno Gast
|
Verfasst am: 18. Nov 2005 18:08 Titel: XSL:FO Block zusammenhalten |
|
|
Hallo!
Für eine Praktische Hausarbeit möchte ich aus einer Datenbank eine druckbare
pdf-Datei erzeugen. Dies mache ich über Xsl:fo und fop.
Nun habe ich das Problem, daß mir die einzelnen Blöcke der Abfrage
aneinandergereiht werden, ohne dass Rücksicht auf die Formatierung genommen
wird. Soll heißen: Der Text eines Datenbankeintrages soll zusammen mit einem
evtl. Bild und einem Abstand auf der Seite gehalten werden, auf der er beginnt.
Ist nicht genug Platz, soll eine neue Seite angefangen werden. Wie schaffe ich
es, dass die Blöcke zusammenbleiben?
Danke hier schonmal für die Hilfe.
Enno
PS: Hier als Hilfe der Quelltext:
Code: |
<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:fo="http://www.w3.org/1999/XSL/Format"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink">
<xsl:template match="/">
<xsl:apply-templates select="questionaire" />
</xsl:template>
<xsl:template match="questionaire">
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
<fo:layout-master-set>
<fo:simple-page-master master-name="questionairePage"
margin-top="0.5in"
margin-right="0.5in">
<fo:region-body margin="0.5in"/>
<fo:region-before extent="0.5in"/>
</fo:simple-page-master>
</fo:layout-master-set>
<fo:page-sequence master-reference="questionairePage">
<fo:static-content flow-name="xsl-region-before">
<fo:block font-family="sans-serif" font-size="12pt" padding-behind="1cm"
padding-bottom="1cm" text-align="right">
Name:_____________________________
</fo:block>
</fo:static-content>
<fo:flow flow-name="xsl-region-body">
<xsl:apply-templates select="category" />
</fo:flow>
</fo:page-sequence>
</fo:root>
</xsl:template>
<xsl:template match="category">
<fo:block font-family="sans-serif" font-size="12pt" padding-before="1cm"
padding-bottom="0.5cm" text-align="left">
<xsl:value-of select="@caption" />
</fo:block>
<xsl:apply-templates select="question" />
</xsl:template> |
!Dieser Teil soll auf einer Seite zusammengehalten werden:
Code: |
<xsl:template match="question">
<!--fo:block font-family="Times" font-size="12pt" text-align="left"
font-weight="bold" padding-before="0.25cm" padding-left="0.25cm">
Frage (<xsl:value-of select="points" /> Punkte)
</fo:block> -->
<fo:block keep-together.within-page="always" font-family="sans-serif"
font-size="10pt" text-align="justify" font-weight="normal" padding-left="0.25cm">
<xsl:value-of select="text" />
</fo:block>
<xsl:if test="picture">
<fo:block>
<fo:external-graphic>
<xsl:attribute name="src"><xsl:value-of select="picture/@src" /></xsl:attribute>
</fo:external-graphic>
</fo:block>
</xsl:if>
<fo:block padding="2cm" />
</xsl:template>
</xsl:stylesheet> | [/code][/quote] |
|
Nach oben |
|
|
|
kurellajunior Administrator
Anmeldungsdatum: 14.02.2005 Beiträge: 214 Wohnort: Berlin-Pankow
|
Verfasst am: 18. Nov 2005 20:24 Titel: |
|
|
Ich habe mit fo nur am Rande gearbeitet, ber mir scheint als wenn Du drei separate Blöxke hättest, wie soll er da wissen, dass er die zusammenhalten soll? Müssten die nicht alle in einen Block :kratz:
Mmh, mehr fällt mir nicht wirklich ein, ich behalts im Hinterkopf...
Jan _________________
|
|
Nach oben |
|
|
Enno Gast
|
Verfasst am: 20. Nov 2005 12:35 Titel: |
|
|
Habe ich schon mal probiert, indem ich einen großen Block drum herum definiert habe.
Das Problem dahei ist aber, daß fo diese Methode anscheinend garnich mag und mir daher keine Ausgabe erstellt. Es wird also vorher eine XMl-Datei geschrieben, diese aber nicht umgewandelt. Habe es auch schon mit einem Span probiert-gleiche Probl...
Die Fkt. "keep-with-next" funzt leider nur bei Tabellen...
Enno |
|
Nach oben |
|
|
kurellajunior Administrator
Anmeldungsdatum: 14.02.2005 Beiträge: 214 Wohnort: Berlin-Pankow
|
Verfasst am: 20. Nov 2005 19:19 Titel: |
|
|
Nach Lektüre scheint dies auch hier wie bei HTML der einzige Weg zu sein. Eine einspaltige, einzeilige Tabelle drumherum mit Rahmen 0 und Außen- und Innenabstand auch 0.
Nicht schön aber sicherlich funktionierend... Und selbst wenn es eine andere Implementierung gäbe würde sie im Prinzip ebenfalls so funktionieren
Jan _________________
|
|
Nach oben |
|
|
|