2013-10-06 4 views
1

다양한 열 수의 xsl fo 테이블을 만들었습니다. 이 응용 프로그램은 Apache FOP를 사용하여 변환 된 문서를 표시합니다. 열 수가 적 으면 모든 항목이 정상적으로 표시됩니다 (즉, 텍스트의 줄이 바뀌기 때문에 일부 열이 두 줄을 차지할지라도 셀의 내용은 가운데 맞춤으로 표시됩니다). 그러나 일부 테이블에는 12 개 이상의 열이 있으며 여기에서 문제가 발생합니다. 열 머리글 셀에서 열의 이름이 여러 줄을 가져 오는 셀의 오른쪽에 있습니다. 단어가 줄 바꿈하는 것처럼 보이지만 마지막 두 문자조차도 겉으로보기에는 잘립니다. 텍스트가 인접한 셀로 누출되지 않습니다.XSL FO 테이블 행 헤더 내용이 손상되었습니다.

이 경우 입력 xml 파일은 테이블 헤더 행과 간결성을위한 본문 행입니다. 나는 제대로 그 부분의 표시로 XSL 문서에서 참조 차트 요소를 포함하지 않았다 : 여기

<exports> 
    <export> 
    <table> 
     <tblRow> 
      <hdrCell>Month</hdrCell> 
      <hdrCell>Allow Amt PEPM Med</hdrCell> 
      <hdrCell>Allow Amt PEPM Rx</hdrCell> 
      <hdrCell>Allow Amt PEPM Med and Rx</hdrCell> 
      <hdrCell>Allow Amt PMPM Med</hdrCell> 
      <hdrCell>Allow Amt PMPM Rx</hdrCell> 
      <hdrCell>Allow Amt PMPM Med and Rx</hdrCell> 
      <hdrCell>Employees Avg Med or Rx</hdrCell> 
      <hdrCell>Members Avg Med or Rx</hdrCell> 
      <hdrCell>Net Pay PEPM Med</hdrCell> 
      <hdrCell>Net Pay PEPM Rx</hdrCell> 
      <hdrCell>Net Pay PEPM Med and Rx</hdrCell> 
      <hdrCell>Net Pay PMPM Med</hdrCell> 
      <hdrCell>Net Pay PMPM Rx</hdrCell> 
      <hdrCell>Net Pay PMPM Med and Rx</hdrCell> 
     </tblRow> 
     <tblRow> 
      <tblCell>Jan 2010</tblCell> 
      <tblCell>11</tblCell> 
      <tblCell>202</tblCell> 
      <tblCell>213</tblCell> 
      <tblCell>26</tblCell> 
      <tblCell>30</tblCell> 
      <tblCell>56</tblCell> 
      <tblCell>56</tblCell> 
      <tblCell>44</tblCell> 
      <tblCell>11</tblCell> 
      <tblCell>22</tblCell> 
      <tblCell>33</tblCell> 
      <tblCell>12</tblCell> 
      <tblCell>12</tblCell> 
      <tblCell>24</tblCell> 
      <tblCell>1</tblCell> 
     </tblRow> 

    </table> 
</export> 

그리고

는 FO XSL에 입력 파일을 변환하는 XSL 파일입니다. 나는 xsl을 처음 사용한다.

<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> 
     <fo:layout-master-set> 
      <fo:simple-page-master master-name="exportPage"> 
       <fo:region-body /> 
      </fo:simple-page-master> 
     </fo:layout-master-set> 
     <fo:page-sequence master-reference="exportPage"> 
      <fo:flow flow-name="xsl-region-body"> 
        <fo:block id="chartBlock"> 
          <!-- THIS PART WORKS FINE --> 
        </fo:block> 
       <!-- THE PROBLEM PART --> 
       <fo:block id="tableBlock" margin="0.25in"> 
         <xsl:apply-templates select="exports/export/table"/> 
       </fo:block> 
      </fo:flow> 
     </fo:page-sequence> 
    </fo:root> 

</xsl:template> 
    <!-- Creates the table --> 
    <xsl:template match="table"> 
     <fo:table table-layout="fixed" width="100%" > 
      <fo:table-header> 
       <fo:table-row> 
        <xsl:apply-templates select="tblRow[position() = 1]"/> 
       </fo:table-row> 
      </fo:table-header> 
      <fo:table-body> 
       <xsl:apply-templates select="tblRow[position() > 1]"/> 
      </fo:table-body> 
     </fo:table> 
    </xsl:template> 

    <xsl:template match="hdrCell"> 
     <fo:table-cell background-color="#666" border-right-style="solid" border-right-width="1px" border-right-color="white" empty-cells="show"> 
      <fo:block color="white" font-family="arial, helvetica, sans-serif" font-size="xx-small"><xsl:value-of select="."/></fo:block> 
     </fo:table-cell> 
    </xsl:template> 

    <xsl:template match="tblCell"> 
    <fo:table-cell border-bottom-style="solid" border-bottom-width="1px" 
    border-bottom-color="#E3E3E3"> 
    <fo:block color="#7E7E7E" font-family="arial, helvetica, sans-serif" font-            size="xx-small"><xsl:value-of select="."/></fo:block> 
     </fo:table-cell> 
    </xsl:template > 

    <xsl:template match="tblRow[position() > 1]"> 
     <fo:table-row> 
      <xsl:apply-templates /> 
     </fo:table-row> 
    </xsl:template> 

</xsl:stylesheet> 

나는 그것이 아무 소용이 왼쪽에있는 텍스트를 이동 바라고 각 테이블 셀의 블록 요소에 대한 패딩 바로 속성을 설정 노력했다. 테이블 셀의 자식 인 각 블록 요소의 'width'속성을 조정 해 보았습니다. 나는 일반적으로 xsl을 처음 사용하므로 진행 방법을 잘 모릅니다. 특정 너비의 요소를 지정하는 것이 도움이 될까요? 표의 전체 너비가 pdf에 표시되고 뒤죽박죽 된 셀 내용이 없도록하려면 어떻게해야합니까? 또한 모든 단위는 지정되지 않은 경우 'px'에 있습니다. 사전에

감사합니다,

브란트

+0

아직 테스트를 거치지 않았으므로 아직 답변을 게시하고 있지 않습니다.이 테스트는 다음과 같이하십시오. margin = "0.25in"테이블을 둘러싼 블록 –

답변

2

답변 : 주변 블록의 마진 = "0.25in"를 제거하면 나는 당신이 (그 블록에 마진 물론 제외) 기대 생각하는 결과를 얻을 수 있습니다. 명확하게하려면 다음을 변경하십시오.

<fo:block id="tableBlock" margin="0.25in"> 
     <xsl:apply-templates select="exports/export/table"/> 
</fo:block> 

그리고 margin = "0.25in"을 제거하십시오.

참고 : 다른 포맷터에서 얻은 결과가 아닙니다. 원본 파일에서 RenderX를 사용 했으므로 원하는 결과와 올바른 결과를 얻을 수 있습니다. FOP를 사용하여 잘못된 결과를 얻지 만 해당 들여 쓰기를 제거합니다 (이는 분명히 테이블 셀의 한 차원에만 부적절하게 적용됩니다).

추가 참고 사항 : 샘플에는 15 개의 헤더 셀과 16 개의 셀이 있습니다.

+0

예, 여분의 셀이 제거되어 공간을 차지하고 있습니다. 사태가 악화됩니다. 나는 FOP가 조금 더 잘 확장 될 것을 기대했지만, 나는 xsl-fo 확률에 새로운 것이 었습니다. 나는 잘못된 것을했습니다. 의견을 보내 주셔서 감사 드리며 내일 다시 사무실로 돌아올 때 사용해 보겠습니다. – BrandtCP

+0

당신은 아무 잘못 없습니다. FOP에서 (다른) 버그가 발생했습니다. –

+0

그랬습니다. 다시 한번 감사드립니다, 케빈 나중에 권력 - 그들이 - 더 큰 마진을 가진 테이블을 원한다는 것을 발표한다면 그것은 놀랄 일이 아닙니다. 여백 속성이 열 머리글에 대해 수행 한 작업을 통해 처음에는 왜곡을 만들지 않고 표 주위에 테두리를 넣을 다른 속성이 있습니까? table-column 요소를 만드는 것이 도움이 될까요? – BrandtCP