2017-11-01 6 views
1

Vielleicht ist es eine einfache Frage und hoffe, dass mir jemand helfen kann.Seitenzahl mit Ausnahme der letzten Seite erzwingen

Derzeit habe ich meine PDF verwendet, um jedes Kapitel auf einer ungeraden Seite zu beginnen. durch den Code mit

<xsl: attribute-set name = "__ force__page__count"> in meinem commons-attr.xsl Datei

Das Ergebnis ist, dass es immer eine gerade Anzahl von Seiten in meinem PDF.

Aber wie ich es jetzt, dass, wenn meine PDF eine ungerade Anzahl von Seiten hat, die diese Aktion nicht auf der letzten Seite hinzugefügt wird Ich dachte, wie der Code tun unten nicht

<xsl:attribute-set name="__force__page__count"> 
     <xsl:attribute name="force-page-count"> 
      <xsl:choose> 
       <xsl:when test="(position() = last())"> 
        <xsl:value-of select="'no-force'"/> 
       </xsl:when> 
       <xsl:otherwise> 
        <xsl:value-of select="'even'"/> 
       </xsl:otherwise> 
      </xsl:choose> 
     </xsl:attribute> 
    </xsl:attribute-set> 
+1

Die Bedingungen '' und '' weisen dem Attribut 'force-page-count' einen Wert von 'even' zu. Ist das ein Tippfehler im Code? –

+0

Die beiden Bedingungen müssen auf "gerade" eingestellt sein. Ich habe es nur überprüft, um sicher zu sein, dass es sich um meinen Fall handelt. Wenn ich eines der beiden auf "ungerade" ändere, verschwinden die leeren Seiten. Jetzt muss ich den Trick finden, dass, wenn das PDF eine schön ausgefüllte letzte Seite hat, ich keine leere Seite danach bekomme. Ich habe gehofft, das mit "! = Last()" zu tun, wie Sie in meinem obigen Code sehen können. –

+0

Zur Verdeutlichung: Sie möchten, dass alle Seitenfolgen auf "even" enden, mit Ausnahme der letzten? – Hobbes

Antwort

1

ich helfen achte darauf, dass deine Probleme mit <xsl:when test="name(/*) = 'bookmap' != last()"> beginnen. Sie testen, ob der Name eines Knotens ungleich lang ist(). Sie brauchen so etwas wie <xsl:when test="(position() != last()) and (name(/*) = 'bookmap')">

Oder position() != last() ausreichend sein kann, ich dieses Attribut erwarten würde auf nur am Anfang eines Kapitels/Seite-Sequenz aufgerufen werden, so dass Ihr bookmap Test nicht notwendig sein kann. Ich bin nicht vertraut mit dem Framework, das Sie verwenden.

Ob das funktioniert, hängt natürlich von der Struktur des XML ab. Wenn Ihr XML für jedes Kapitel einen Knoten hat und der Attributsatz beim Verarbeiten dieses Kapitelknotens aufgerufen wird, sollte es funktionieren.

Wenn das Attribut-Set von woanders aufgerufen wird oder die Struktur anders ist, wird der Position() - Test nicht das erwartete Ergebnis liefern.

Und Sie haben derzeit einen Test, der versucht, jedes Kapitel mit Ausnahme der letzten zu vergleichen. Wenn der Test funktioniert, wird Ihr "sonst" nur für das letzte Kapitel aufgerufen. Eine bessere Möglichkeit, die xsl:choose zu strukturieren ist, die Ausnahmen in der xsl gesagt: wenn Anweisung:

<xsl:when test="position() = last()"> -match only the last chapter here- 
    <xsl:value-of select="'no-force'"/> 

und für die xsl:otherwise:

<xsl:value-of select="'even'"/> 

In XSL-FO wird die Seitenanzahl durch die kontrollierte force-page-count Attribut. Einer der möglichen Werte ist no-force. Dies hat den gewünschten Effekt: Es werden keine Seiten hinzugefügt.
Der Wert 'ungerade' zwingt die Seitenfolge zu einer ungeraden Anzahl von Seiten (und fügt leere Seiten hinzu, um dies zu erreichen).

+0

Nach dem Testen mit "no-force" sind alle leeren Seiten weg, das ist nicht was ich brauche. aber danke für die Freigabe –

+1

Wenn Sie nur die 'sonst'-Bedingung in keine-Force geändert und alle Seiten-Sequenzen ändern, das ist ein Zeichen der' xsl: when' Test funktioniert nicht. – Hobbes

+0

richtig gesagt. Ich habe einen Fehler im Code gemacht, jetzt ist es wieder gut. nur das 'sonst' ist no-force funktioniert nicht. –

0

Hallo alle wir haben mehrere Tests gemacht und wir kamen raus. Hiermit wird der Code

<xsl:attribute-set name="__force__page__count"> 
     <xsl:attribute name="force-page-count"> 
      <xsl:choose> 
       <xsl:when test="following-sibling::*[(contains(@class, 'topic/topic'))] and not(ancestor::*[contains(@class,' topic/topic ')])"> 
      <!-- <xsl:when test="$mirror-page-margins">--> 
        <xsl:value-of select="'end-on-even'"/> 
       </xsl:when> 
       <xsl:when test="not(following-sibling::*[(contains(@class, 'topic/topic'))])">      
        <xsl:value-of select="'auto'"/> 
       </xsl:when> 
       <xsl:otherwise> 
        <xsl:value-of select="'auto'"/> 
       </xsl:otherwise> 
      </xsl:choose> 
     </xsl:attribute> 
    </xsl:attribute-set> 

Vielen Dank für die Weitergabe Ihrer Weisheit.

Verwandte Themen