2017-11-20 5 views
0

Ich möchte die letzte Seitenzahl nach einer Reihe unabhängiger Seitenfolgen erhalten, ohne eine zusätzliche Seite am Ende des Dokuments einzufügen. Derzeit muss ich eine zusätzliche Seitenfolge mit einer <fo:block id="last-page"/> hinzufügen, die eine extra leere Seite generiert. Das ist die Idee:XSL-FO - Letzte Seitenzahl nach einer variablen Anzahl von unabhängigen Seitenfolgen

<xsl:call-template name="a-block-with-its-own-page-sequence"/> 

<xsl:if test="//SOMETHING-2-EXISTS = 'Y'"> 
    <xsl:call-template name="a-block-with-its-own-page-sequence-page-number-continues"/> 
</xsl:if> 

<xsl:if test="//SOMETHING-3-EXISTS = 'Y'"> 
    <xsl:call-template name="a-block-with-its-own-page-sequence-page-number-continues"/> 
</xsl:if> 

<!-- 
    and more blocks with its own page sequences here 
--> 

<!-- Currently I have to do this which create an extra page --> 
<fo:page-sequence master-reference="lastOneForSure"> 
    <xsl:call-template name="header_footer"/> 
    <fo:flow flow-name="xsl-region-body"> 
     <fo:block id="last-page"/> 
    </fo:flow> 
</fo:page-sequence> 
+0

Sind SOMETHING-2 und SOMETHING-3 Elemente mit unterschiedlichen Namen? Oder nur mehrere Vorkommen desselben Elementnamens, z. '' – Hobbes

Antwort

0

fo:page-citation-last (https://www.w3.org/TR/xsl11/#fo_page-number-citation-last) finden Sie auf der letzten Seite durch die Bereiche von einem FO erzeugt bekommen.

Wenn jede fo:page-sequence eine ID hat, müssen Sie nur herausfinden, welche ID für den Wert fo:page-citation-last/@ref-id verwendet werden soll.

+0

Ausarbeiten, welche ID zu verwenden ist der schwierige Teil. XSLT hat keine Möglichkeit, eine Variable zu verwenden, die überschrieben werden kann, um den letzten Wert nach einer Reihe von if-Anweisungen zu verfolgen. –

+1

Es ist nicht möglich, aber Sie könnten eine "xsl: variable" um all diese 'xsl: call-template' setzen, um alle interessanten' fo: page-sequences' zu erhalten. Sie könnten dann entweder einen XPath für die Variable verwenden, um die ID der letzten "fo: page-sequence" zu erhalten, oder alternativ den Wert der Variablen so transformieren, dass eine bekannte ID zur letzten "fo: page-sequence" hinzugefügt wird. Sie würden dann auch die Variable (oder ihren transformierten Wert) in das Ergebnis kopieren. (All dies wäre einfacher mit XSLT 2.0 oder XSLT 3.0, als wenn Sie noch XSLT 1.0 verwenden.) –

0

Sie können dies in die falsche Richtung gehen.

Wenn Sie dies tun:

<template match="SOMETHING-2|SOMETHING-3"> 
    <fo:page-sequence> 

Sie der <xsl:if test="//SOMETHING-2-EXISTS = 'Y'"> Konstruktion erhalten kann befreien.

Der nächste Schritt ist herauszufinden, welches das letzte Kapitel ist. Kannst du position() benutzen? Das hängt davon ab, was SOMETHING-2 | SOMETHING-3 sind. Wenn sie Elemente mit unterschiedlichen Namen sind, ist es schwieriger, aber wenn sie nur mehrere Vorkommen desselben Elementnamens sind, z. Sie können position() verwenden.

+0

Wo in XSL 1.1 heißt es, dass Sie 'fo: Seitenzahl-Zitat zuletzt 'verwenden können (https://www.w3.org/TR/xsl11/#fo_page-number-citation-last) ohne eine 'ref-id' (https://www.w3.org/TR/xsl11/#ref-id)? –

+0

Ich ging damit, siehe das dritte Codebeispiel: https://www.alt-soft.com/tutorial/xslfo_tutorial/xsl-fo_page-number.html – Hobbes

+0

Wenn es eine Erweiterung ist, ist es undokumentiert, sonst könnte die Probe einfach falsch liegen. 'ref-id' (https://www.w3.org/TR/xsl11/#ref-id) muss einen Wert haben, was ein Umweg ist, zu sagen, dass die Immobilie anwesend sein muss. –

Verwandte Themen