2013-09-30 3 views
1

저는 Apache FOP 빠른 시작을 할 것입니다. 명령 줄에서 svg 요소가 들어있는 간단한 xml 파일을 변환하고 pdf 파일로 변환합니다. 나는 이것을 할 수 있지만, svg에 의해 생성 된 이미지는 잘려나 간다. 나는 XSL-FO & 아파치 FOP에 익숙하지 않지만, w3c 문서의 속성을 확인했다. 이제 불행하게도 더 혼란 스럽습니다. 나는 행운과 함께 다음을 시도 : 폭을 변경 & svg 자체의 높이 속성; 단순 페이지 마스터 요소에서 페이지 폭을 & 페이지 폭을 "자동"으로 설정합니다. margin 속성을 제거합니다. 지역 본문이 기본 크기로 시작한다는 것을 나는 아무것도 보지 못했습니다. 여기 내 콘텐츠가 apache fop으로 잘리지 않도록하려면 어떻게해야합니까?

은 XML입니다 :

<chart> 
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="600" height="100"> 
    <circle cx="50" cy="50" r="40" stroke="black" stroke-width="2" fill="red" /> 
    <circle cx="100" cy="100" r="40" stroke="black" stroke-width="2" fill="green" /> 
</svg> 

그리고 여기에 XSL의 : 이미지가 중첩 빨간색 & 녹색 원을 표시하도록되어

<?xml version="1.0" encoding="utf-8"?> 
<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="A4-portrait" 
       margin="10"> 
      <fo:region-body/> 
     </fo:simple-page-master> 
     </fo:layout-master-set> 
     <fo:page-sequence master-reference="A4-portrait"> 
     <fo:flow flow-name="xsl-region-body"> 
      <fo:block> 
      <fo:instream-foreign-object xmlns:svg="http://www.w3.org/2000/svg" content-width="600" content-height="300"> 
       <svg:svg> 
        <xsl:copy-of select="/chart/svg:svg"/> 
       </svg:svg> 
      </fo:instream-foreign-object> 
      </fo:block>   
     </fo:flow> 
     </fo:page-sequence> 
    </fo:root> 
    </xsl:template> 
</xsl:stylesheet> 

하지만, 그것은 단지를 보여주는 것 녹색의 왼쪽 상단 모서리. 내가 놓친 블록 요소에 속성이있을 것으로 예상되지만 어느 것이 있는지 모른다. 블록이 100px x 100px 크기로 제한되어있는 것 같습니다.

속성이 누락되었지만 전체 svg 이미지가 제대로 표시되게하려면 어떻게해야합니까? (두 개의 완전한 원이 겹치는 경우)?

감사합니다,

브란트

PS : 나는이 문제를 보여주는 이미지를 보냈을 것입니다,하지만 난 충분히 높은 명성을 가지고 있지 않습니다.

+0

테스트하지 않고 ...이 내용을 봅니다. content-width = "600"content-height = "300" 300 뭐? pts, inches, miles ... –

+0

완전히 기술적 인 것으로, SVG의 높이는 100으로 설정되어 있습니다. 중심점이 100,100에서 시작하여 반경이 40 인 녹색 원이 있습니다. 원의. –

답변

1

오류는 FO의 단위가없는 크기를 3 곳 (여백, 내용 너비 및 내용 높이)으로 지정합니다. 또한 위의 주석에 언급 된 SVG는 높이가 100이고 녹색 원의 절반을 초과합니다.

이 보정 단지 FO 표시 :

<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format"> 
     <fo:layout-master-set> 
      <fo:simple-page-master master-name="A4-portrait"> 
       <fo:region-body/> 
      </fo:simple-page-master> 
     </fo:layout-master-set> 
     <fo:page-sequence master-reference="A4-portrait"> 
      <fo:flow flow-name="xsl-region-body"> 
       <fo:block> 
        <fo:instream-foreign-object xmlns:svg="http://www.w3.org/2000/svg"> 
         <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="600" height="200"> 
          <circle cx="50" cy="50" r="40" stroke="black" stroke-width="2" fill="red" /> 
          <circle cx="100" cy="100" r="40" stroke="black" stroke-width="2" fill="green" /> 
         </svg> 
        </fo:instream-foreign-object> 
       </fo:block>   
      </fo:flow> 
     </fo:page-sequence> 
    </fo:root> 

이것은 당신의 출력에서 ​​전체 SVG 이미지를 보여줍니다.