2014-08-28 2 views
3

테이블에 대한 XSL-FO 스타일 시트가 있습니다.테이블 안의 페이지 나누기 XSL-FO

<fo:page-sequence master-reference="defaultPage"> 
    <fo:flow flow-name="xsl-region-body"> 
    <fo:table table-layout="fixed" width="100%"> 
     <fo:table-column column-width="9pt"/> 
     <fo:table-column column-width="30pt"/> 
     <fo:table-column column-width="150pt"/> 
     <fo:table-header> 
     <fo:table-row> 
      <fo:table-cell> 
      <fo:block><xsl:text>Column 1</xsl:text></fo:block> 
      </fo:table-cell> 
      <fo:table-cell> 
      <fo:block><xsl:text>Column 2</xsl:text></fo:block> 
      </fo:table-cell> 
      <fo:table-cell> 
      <fo:block><xsl:text>Column 3</xsl:text></fo:block> 
      </fo:table-cell> 
     </fo:table-row> 
     </fo:table-header> 
     <fo:table-body> 
     <fo:table-row> 
      <xsl:apply-templates select="rbrOcjena"/> 
      <xsl:apply-templates select="sifPred"/> 
      <xsl:apply-templates select="nazPred"/> 
     </fo:table-row> 
     </fo:table-body> 
    </fo:table> 
    </fo:flow> 
</fo:page-sequence> 

테이블에 여러 행이있을 수 있으므로 현재 페이지의 끝에있는 PDF를 생성 할 때 새로운 페이지로 나누고 싶습니다. 또한 가능한 경우 새 페이지에서 표 머리글을 반복하고 싶습니다. 그것을 만들기 위해 테이블 ​​태그에 어떤 속성을 넣어야합니까?

감사합니다.

+0

새로운 질문을하기 전에, [마지막 질문에 답] (HTTP를을 수락하십시오 : // stackoverflow.com/a/24938287/1987598). 감사! –

답변

5

테이블에 여러 행을 가질 수 있습니다, 그래서 당신의 XSL-FO 코드를 보지 않고

현재

의 끝 부분에 관해서 나는 새 페이지에 휴식 싶습니다가 어렵다 이것을 대답하십시오. 보여주십시오. 그러나 일반적으로 이것은 유지와 휴식으로 끝납니다. 예를 들어 : 그게 가능하다면

<fo:table-row keep-together.within-page="always"> 

나는 새 페이지에서 표 머리글을 반복하고 싶습니다. 테이블 태그에 어떤 속성을 넣어야합니까?

XSL-FO 프로세서가 모든 페이지의 맨 위에 여러 행을 반복하도록 지시하는 것은 fo:table 속성을 통해 수행되지 않습니다. 대신, 반복 될 수있는 행은 fo:table-header 안에 넣어 :

<fo:table-header> 
    <fo:table-row> 
     <fo:table-cell> 
     <!--Block and text content--> 
     </fo:table-cell> 
    </fo:table-row> 
</fo:table-header> 

그런 다음, 프로세서의 기본 동작은 페이지 나누기 후 머리글 행을 반복해야합니다. omit-header-at-break 속성이 fo:table 인 경우는 set to "false" by default입니다.

가장 확실한 이유는 헤더가 어떤 행에 속해 있는지 분명하고 즉각적으로 반복되어야하기 때문입니다. 이 속성이 fo:table의 참조 일 뿐이므로 여러 행을 헤더로 식별하는 것이 더 어려울 수 있습니다. XSL 사양 here의 관련 부분을 찾을 수 있습니다. 코드 아래에보십시오

나는 비슷한 시나리오에 직면 한

+0

안녕하세요, 답변 해 주셔서 감사합니다. 내 질문을 편집하고 더 자세한 XSL-FO 코드를 제공했습니다. 다시 살펴보실 수 있습니까? – sty2000

+0

@ sty2000 페이지 순서뿐만 아니라. 테스트 할 수있는 전체 XSL-FO 문서를 제공해주십시오. 또한, 귀하의 질문 아래 배치 한 의견을 보았습니까? –

+0

여기 있습니다 : [link] (http://pastebin.com/sxDeDs5n). 나는 이것을 아주 좋아하기 때문에 이렇게 게시했다. 또한 액세스 권한이없는 서버의 일부 데이터를 가져 오기 때문에 테스트 할 수 없다고 생각합니다. – sty2000

1

...

<fo:table-row> 
    <xsl:if test="position() != 1"> 
    <xsl:attribute name="break-efore">page</xsl:attribute></i> 
. 
. 
. 
+1

그러면 첫 번째 행을 제외한 모든 행 앞에 페이지 나누기가 추가됩니다. Sty2000은 페이지가 꽉 차있을 때 테이블이 깨지기를 바라고,이를 수행하기 위해 명시적인 중단을 추가 할 필요가 없습니다. – Hobbes