2014-03-25 10 views
2

아파치 FOP를 사용하여 pdf 파일을 생성합니다. 나는이 XSL 코드 요소가 <xsl:include href="footer_common.xsl"/> 포함시키는 작동하지 않는아파치와 함께`xsl : include`를 사용하는 방법

<xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format"> 
    <xsl:output method="xml" indent="yes" /> 
    <xsl:template match="/"> 
    <fo:root font-size="11pt" font-family="serif"> 
     <fo:layout-master-set> 
     <fo:simple-page-master master-name="A4-portrait" 
      page-height="29.7cm" page-width="21.0cm" margin-top="1cm" 
      margin-left="1.5cm" margin-right="1cm" margin-bottom="1cm"> 
      <fo:region-body /> 
      <fo:region-after region-name="footer" extent="15mm"/> 
     </fo:simple-page-master> 
     <fo:simple-page-master master-name="A4-landscape" 
      page-width="29.7cm" page-height="21.0cm" margin-top="1cm" 
      margin-left="1cm" margin-right="1cm" margin-bottom="1cm"> 
      <fo:region-body /> 
      <fo:region-after region-name="footer2" display-align="after" extent="0cm"/> 
     </fo:simple-page-master> 
     </fo:layout-master-set> 
     <fo:page-sequence master-reference="A4-portrait"> 
     <xsl:include href="footer_common.xsl"/> 
     <fo:flow flow-name="xsl-region-body"> 
      .... 
     </fo:flow> 
     </fo:page-sequence> 
    </fo:root> 
    </xsl:template> 
</xsl:stylesheet> 

공지 사항을 가지고!

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" 
    version="1.0"> 
    <fo:static-content flow-name="footer" font-size="7pt"> 
    <fo:table> 
     <fo:table-column column-width="70mm"/> 
     <fo:table-column column-width="70mm"/> 
     <fo:table-column column-width="70mm"/> 
     <fo:table-body> 
     ........... 
     </fo:table-body> 
    </fo:table> 
    </fo:static-content> 
</xsl:stylesheet> 

모두 끝내고 .xsl 파일이 동일한 자원 디렉토리에 있습니다 : 여기 그리고는 footer_common.xsl입니다. 그것이 중요한 경우 - 나는 개발을 위해 이클립스를 사용한다. 내 Java 코드에서 리소스 스트림으로 주 .xsl 파일을 가져 와서 변환에 사용합니다.

오류 메시지가 의미 xsl:include ist an dieser Position in der Formatvorlage nicht zulässig! , xsl:include is not allowed at that position in the template

사람이 내가 뭘 잘못 볼 수 있을까요?

도움이나 의견을 보내 주셔서 감사합니다.

답변

5

xsl:include은 최상위 요소 (실제로는 declaration의 스타일 시트)이며 xsl:stylesheet의 직계 하위로만 나타날 수 있습니다. 따라서 fo:page-sequence 요소의 스타일 시트를 포함 할 수 없습니다.

그러나 나는 xsl:include과 별도의 스타일 시트가 필요하지는 않지만 xsl:call-template과 별도의 named template이 필요하다고 생각합니다.

은 다음과 유사한 별도의 템플릿 쓰기 : 메인 템플릿에서

<xsl:template name="footer-ebase"> 
    <fo:static-content flow-name="footer" font-size="7pt"> 
    <fo:table> 
     <fo:table-column column-width="70mm"/> 
     <fo:table-column column-width="70mm"/> 
     <fo:table-column column-width="70mm"/> 
     <fo:table-body> 
     <!--...--> 
     </fo:table-body> 
    </fo:table> 
    </fo:static-content> 
</xsl:template> 

(콘텐츠를 삽입하고자하는 장소)로 명명 된 템플릿을 참조 :

<fo:page-sequence master-reference="A4-portrait"> 
    <xsl:call-template name="footer-ebase"/> 
    <fo:flow flow-name="xsl-region-body"> 
    <!--...--> 
    </fo:flow> 
</fo:page-sequence> 

명명 된 템플릿을 작성하는 것이 항상 의미있는 것은 아니라는 점에 유의하십시오. 당신이 문제를 해결하기 위해 재귀를 사용

  • 열심히 읽을 수있는 코드 템플릿을 복잡하게하고 만들 것
  • 여러 장소에서 같은 기능을 필요로하기 때문에

    • 코드가 다른 중복 될 경우는 것이 좋습니다

    뚜렷한 이유없이 콘텐츠를 별도의 템플릿으로 분할하려는 경우 가장 좋은 방법은 아닙니다. 원하는 경우

    당신은 여전히 ​​별도의 스타일 시트 이름으로 지정된 템플릿을 넣을 수 있습니다,하지만 당신은 최상위 요소xsl:include를 사용해야합니다 :

    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" > 
        <xsl:include href="footer-ebase.xsl"/> 
        <!--...--> 
    </xsl:stylesheet>