2017-11-01 1 views
1

어쩌면 쉬운 질문이며 누군가 나를 도울 수 있기를 바랍니다.마지막 페이지를 제외한 페이지 수를 늘리십시오.

현재 홀수 페이지의 모든 챕터를 시작하기 위해 내 PDF를 사용했습니다. 내 공유지 - attr.xsl에 파일

을 코드

<xsl: attribute-set name = "__ force__page__count">를 사용하여 결과는 항상 내 PDF의 페이지 짝수 있다는 것입니다.

하지만 어떻게 내 PDF이 조치가 나는 코드와 같은 일을 생각한 마지막 페이지 에 추가되지 않은 페이지의 홀수가있는 경우 아래

<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

''과 ''조건은 둘 다'force-page-count' 속성에'even' 값을 할당합니다. 그 코드에 오타가 있습니까? –

+0

두 조건은 "균등"으로 설정해야합니다. 방금 내 사건을 확인 했어. 두 가지 중 하나를 "이상한"것으로 변경하면 빈 페이지가 사라집니다. 이제는 PDF에 마지막 페이지가 멋지게 채워진 후에 빈 페이지가 나타나지 않는 것을 발견해야합니다. 위의 코드에서 볼 수 있듯이 "! = last()"를 사용하여이 작업을 수행하기를 원했습니다. –

+0

명확히하기 : 마지막 페이지를 제외한 모든 페이지 시퀀스가 ​​짝수로 끝나길 원하십니까? – Hobbes

답변

1

내가 도움이되지 않습니다 것을 지금 어떻게해야합니까 문제가 <xsl:when test="name(/*) = 'bookmap' != last()">으로 시작한다고 생각하십시오. 노드의 이름이 last()와 같지 않은지 테스트하고 있습니다. 당신의 bookmap 테스트가 필요하지 않을 수 있도록 충분한 수 있습니다 <xsl:when test="(position() != last()) and (name(/*) = 'bookmap')">

또는 position() != last() 같은 뭔가가 필요, 내가 만 장/페이지 시퀀스의 시작 부분에서 호출되도록 설정이 속성을 기대. 나는 당신이 사용하고있는 프레임 워크에 익숙하지 않다.

물론이 작동 여부는 XML의 구조에 따라 다릅니다. XML에 각 장당 하나의 노드가 있고이 장 노드를 처리 할 때 속성 집합이 호출되면 작동해야합니다.

attribute-set이 다른 곳에서 호출되거나 구조가 다른 경우 position() 테스트는 예상 결과를 제공하지 않습니다.

그리고 현재 마지막 챕터를 제외한 모든 챕터와 일치하는 테스트가 있으므로 테스트가 작동하면 마지막 챕터에서만 'otherwise'가 호출됩니다. xsl:choose을 구성하는 더 좋은 방법은 XSL에 예외를 넣어하는 것입니다 때 문 : XSL-FO에서

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

, 페이지 수는에 의해 제어됩니다

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

xsl:otherwise에 대한

force-page-count 속성 가능한 값 중 하나는 no-force입니다. 원하는 효과가 있습니다. 페이지가 추가되지 않습니다.
'odd'값을 사용하면 페이지 시퀀스에 홀수 개의 페이지가 생성됩니다 (이 작업을 위해 빈 페이지가 추가됩니다).

+0

"무력 (no-force)"으로 테스트 한 후에 모든 빈 페이지가 없어 졌으므로 필요하지 않습니다. 하지만 공유해 주셔서 감사합니다 –

+1

'otherwise' 조건을 no-force로 변경하고 모든 페이지 시퀀스가 ​​변경 되었다면 그것은'xsl : when' 테스트가 작동하지 않는다는 표시입니다. – Hobbes

+0

가 올바르게 표시됩니다. 나는 코드에서 실수를 저지른 지금 다시 좋다. '다르게'만 힘이 작동하지 않는다는 것입니다. –

0

안녕하세요 우리는 여러 가지 테스트를 수행했으며 우리가 나왔습니다. 이로써 코드

<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> 

지혜를 공유해 주셔서 감사합니다.

관련 문제