2016-07-21 37 views
2

Ich versuche einen 10mm Abstand zwischen region-before und region-body zu bekommen. Aber ich bin nicht in der Lage, es relativ zu der Größe von regin-vorher zu bekommen.Relativer Abstand zwischen region-before und region-body in FOP xslt

Thats how it should be.

Das ist, wie die Grenze sein sollte. Mit einer einzigen "Bemerkung" funktioniert es. Aber sobald es wird Doppel- oder Drei gefüttert, wird der Körper nicht bushed nach unten, sondern bleibt an der gleichen Stelle, wie hier zu sehen:

enter image description here

Mein Layout-Master-Set sieht aus wie , dass:

<fo:layout-master-set> 
    <fo:simple-page-master master-name="Stueckliste" 
     margin="{$Innenraender}" page-height="{$SeitenhoeheA4}" page-width="{$SeitenbreiteA4}"> 
     <fo:region-body region-name="xsl-region-body" 
      margin="45mm 0mm 17mm 0mm" /> 
     <fo:region-before extent="80mm" display-align="before" 
      region-name="xsl-region-before" /> 
     <fo:region-after region-name="xsl-region-after" 
      extent="50mm" display-align="after" margin="30mm 0mm 40mm 0mm" /> 
    </fo:simple-page-master> 
</fo:layout-master-set> 

Die regions vor surounding:

<fo:static-content flow-name="xsl-region-before"> 
    ... 
</fo:static-content> 

Die regionsKörper surounding:

<fo:flow flow-name="xsl-region-body"> 
    ... 
</fo:flow> 

Wo ist der Fehler?

+1

Ich denke, es ist schwer - du solltest noch ein paar Millimeter mehr zum oberen Rand des Regionskörpers hinzufügen, aber dieser Platz wird immer da sein, auch wenn die Bemerkung nur eine Zeile ist. Aber vielleicht kommt ein Experte vorbei und kann erklären, wie Sie es erreichen können. Wie generierst du die fo-Datei? Würde es einen Weg geben, dass der Generator bereits schätzt, dass der Header größer ist und der Körper einen größeren oberen Rand haben sollte? –

+0

Danke. Ich dachte, dass es einen Weg geben muss, um den Abstand zwischen Header und Body zu setzen, egal wie groß der Header ist. Ich erzeuge es über XML. Ich würde also prüfen können, ob die Bemerkung so lang ist, dass sie zwei oder drei Zeilen benötigt. Daraufhin konnte ich das Ausmaß der Region vorher festlegen. Aber ich dachte wirklich, dass es einen einfacheren Weg geben muss ... hm ... – MrOnkelChiller

+1

Dem stimme ich zu, aber das regionsbasierte Layoutmodell sieht die Regionen wahrscheinlich ziemlich unabhängig ... Eine andere Idee wäre es, zu versuchen, das hinzuzufügen Stückliste Header (und die leere Trennung) auf die untenstehende Tabelle irgendwie und wiederholen Sie es als Tabellenkopf auf jeder Seite (ohne die Region-vorher vollständig), aber das wäre wahrscheinlich große Fummelei mit Tischkram. –

Antwort

2

Es gibt keinen Fehler. In XSL FO ist die Höhe der Regionen festgelegt. Es wird nicht erweitert (oder kontrahiert) basierend auf Inhalt, der den "Umfang" überschreitet (oder unterschreitet). Wenn Sie möchten, dass der Kopfbereich auf nachfolgenden Seiten wiederholt wird, müssen Sie etwas tun (wie Sie vorschlagen, wie Sie Zeichen zählen), um eine vorhergesagte Höhe zu bestimmen und diese Höhe im XSL, das den XSL FO erzeugt, zu setzen. Oder Sie können eine Reihe von Seitenvorlagen mit verschiedenen "Extents" einrichten und aus den auf der Anzahl der Zeichen basierenden auswählen.

Wenn die Kopfzeile auf nachfolgenden Seiten nicht wiederholt werden soll (so wie es eine erste Seite war oder Sie nur eine Seite haben), können Sie den Inhalt ganz oder teilweise in den Text einfügen.