2013-03-29 3 views
3

내 문제의 원인이라고 생각되는 다소 복잡한 표가 있습니다. 이 테이블은 클라이언트 데이터베이스의 XML 파일에서 검색된 데이터를 기반으로 채워집니다. 페이지가이 더 큰 행 어딘가에 분할, 그래서 만약이 함께 번들로 제공 한 행처럼 취급XSL-FO의 테이블 행 그룹에서 페이지 나누기를 유지하는 방법

<fo:table-row> 
    <fo:table-cell number-columns-spanned="2"> 
     <fo:block/> 
    </fo:table-cell> 
    <fo:table-cell number-columns-spanned="2"> 
     <fo:block/> 
    </fo:table-cell> 
</fo:table-row> 
<xsl:for-each select="xml/value"> 
    <fo:table-row> 
     <fo:table-cell number-columns-spanned="2"> 
      <fo:block> 
       <xsl:value-of select="@value"/>/> 
      </fo:block> 
     </fo:table-cell> 
     <fo:table-cell number-columns-spanned="2"> 
      <fo:block> 
       <xsl:value-of select="@othervalue"/>/> 
      </fo:block> 
     </fo:table-cell> 
     </fo:table-row> 
</xsl:for-each> 

, 그것은 보인다 : 여기가 XML에 적용 할 노력하고있어 XSL 코드의 발췌입니다 그 줄이 쪼개지고있는 것처럼.

keep-together.within-page = "always", page-break-inside = "avoid", keep-with-previous.within-page = "always"및 keep-with- next.within-page = "always"는 테이블과 반복 된 블록에서 다양한 조합으로 나타나지만 아무것도 붙이지 않는 것처럼 보입니다. 누구나이 솔루션을 찾을 수 있습니까? 어떤 도움을 주셔서 감사합니다, 감사합니다.

답변

1

(마지 못해) 사용 된이 문제는 중첩 테이블입니다. 이 솔루션을 사용하면 테이블에 table-layout="fixed"을 사용하고 열과 너비를 명시 적으로 지정하여 열의 정렬을 확인하는 것이 가장 좋습니다. 따라서 약간의 템플릿을 정돈하고 유지 보수성을 높이기 위해 템플릿을 추가합니다.

<xsl:template match="Whatever"> 
    <fo:table table-layout="fixed"> 
     <xsl:call-template name="fourColumnTemplate"/> 
     <fo:table-body> 
      <!-- UNSEEN ROWS HERE --> 
      <!-- UNSEEN ROWS HERE --> 
      <!-- UNSEEN ROWS HERE --> 
      <fo:table-row keep-together.within-page="always"> 
       <fo:table-cell number-columns-spanned="4"> 
        <fo:block> 
         <xsl:call-template name="outputXmlValueTable"> 
          <xsl:with-param name="xmlNodes" select="xml/value"/> 
         </xsl:call-template> 
        </fo:block> 
       </fo:table-cell> 
      </fo:table-row> 
     </fo:table-body> 
    </fo:table> 
</xsl:template> 

<xsl:template name="fourColumnTemplate"> 
    <!-- note that these values should only be specified in one place for maintenance reasons --> 
    <fo:table-column column-width="proportional-column-width(2)"/> 
    <fo:table-column column-width="proportional-column-width(3)"/> 
    <fo:table-column column-width="proportional-column-width(2)"/> 
    <fo:table-column column-width="proportional-column-width(3)"/> 
</xsl:template> 

<xsl:template name="outputXmlValueTable"> 
    <xsl:param name="xmlNodes"/> 
    <fo:table table-layout="fixed"> 
     <xsl:call-template name="fourColumnTemplate"/> 
     <fo:table-header> 
      <fo:table-row> 
       <fo:table-cell number-columns-spanned="2"> 
        <fo:block>Title1</fo:block> 
       </table-cell> 
       <fo:table-cell number-columns-spanned="2"> 
        <fo:block>Title2</fo:block> 
       </table-cell> 
      </fo:table-row> 
     </fo:table-header> 
     <fo:table-body> 
      <xsl:apply-templates select="$xmlNodes" mode="outputXmlValueRow"/> 
     </fo:table-body> 
    </fo:table> 
</xsl:template> 

<xsl:template match="*" mode="outputXmlValueRow"> 
    <fo:table-row> 
     <fo:table-cell number-columns-spanned="2"> 
      <fo:block> 
       <xsl:value-of select="@value"/>/> 
      </fo:block> 
     </fo:table-cell> 
     <fo:table-cell number-columns-spanned="2"> 
      <fo:block> 
       <xsl:value-of select="@othervalue"/>/> 
      </fo:block> 
     </fo:table-cell> 
    </fo:table-row> 
</xsl:template>