2013-09-30 70 views
1

我正在瀏覽Apache FOP快速入門。從命令行轉換一個簡單的xml文件,其中包含一個svg元素並將其轉換爲pdf文件。我能夠做到這一點,但svg生成的圖像正在被切斷。我是XSL-FO & Apache FOP的新手,但我查看了屬性的w3c文檔。不幸的是,現在我更加困惑。我已經嘗試過以下幾個方面,但沒有成功:在svg本身中改變了寬度&高度屬性;將頁面高度&頁面寬度設置爲簡單頁面主元素中的「自動」;消除保證金屬性。我沒有看到任何指示區域主體以某種默認大小開始的內容。如何保持我的內容不被aft 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什麼?磅,英寸,英里...... –

+0

爲了完全技術性,您呈現的SVG的高度設置爲100.它具有一個綠色圓圈,其中心點以100,100開始,半徑爲40.您將永遠不會看到下半部分的圓,永遠。 –

回答

1

錯誤是在三個位置(邊距,內容寬度和內容高度)中FO中沒有單位的尺寸規格。另外,上面評論中提到的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圖像。