2009-10-16 62 views
6

我們客戶的要求是使用圓角的PDF格式的表格。我只有Apache FOP處理器,並且它不支持圓角屬性。它也不支持浮動,所以浮動圓形圖像左右無法完成。XSL-FO中的圓角

你有什麼建議如何做到這一點?

回答

5

可以將該表創建爲可縮放矢量圖形(SVG)對象,並將其作爲外部圖像包含在XSL-FO文檔中。 SVG支持圓角,而FOP支持SVG。

我相信你也可以創建一個圓角矩形SVG,並將它用作你的內容的背景,並把它放在它的前面。我想我做了一次,但我似乎無法找到代碼...

0

只要它是固定的寬度,不要期望的東西'動態'像css動態寬度智慧,我已經做到了這一點(由使用垂直'滑動門'技術,如果你還記得老派的CSS):

獲得一個圓角的背景圖像,只要你期望在頁面上就可以了(注意,如果你期望的東西上多個頁面,那麼這將不會工作得那麼好)。我用它在頁眉/頁腳和開始一個新頁面的東西(在身體區域),我知道不會超過1頁。

於是我決定,如果我需要一個固定的高度......如果是這樣,你可以只使用一個背景圖片,沒有fancyness ...

如果高度將發生變化,那麼我只是用圖像的頂部一部分和另一部分圖像的底部。這樣的事情:

<fo:block-container> 
    <fo:block-container background-image="url(images/rounded_corner_image.png)" 
    background-repeat="no-repeat" 
    background-position-horizontal="15px" 
    background-position-vertical="top"    
    background-color="white" 
    > 
    <!-- 
    So it used the top of the image for as long as the block-container exists heightwise. 
    I may have had some whitespace in my image and need to move image into place so think I used background-position-horizontal since i had 15px of whitespace i wanted to cut off 
    Also you may set a height above if definatley know you don't need it to 'auto-expand', just make sure you have content that can't overflow if setting height (like a table with Name: Address: fields) 
    --> 
    <fo:block margin="70px 70px 0px 70px"> 
     Need to add some margins before starting content since dont want to text to touch the top and sides of of the rounded corner/borders plus add whitespace for content. 
    </fo:block> 
    </fo:block-container> 

    <fo:block-container background-image="url(images/rounded_corner_image.png)" 
    background-repeat="no-repeat" 
    background-position-horizontal="15px" 
    background-position-vertical="bottom" 
    padding="0px 0px 20px 0px" 
    background-color="white" 
    > 
    <fo:block margin="0px 70px 70px 70px"> 
     Need to add some margins before starting content since dont want to text to touch bottom and sides of of the rounded corner/borders. 
    </fo:block> 
    </fo:block-container> 

</fo:block-container> 

Theres各種方式去它我認爲。就像我有內容在底部,所以我只是使用底部知道我肯定會有至少70px的內容來顯示我的圓角的底部漸變....你可能會決定把所有的內容放在第一個塊容器,並給第二個塊容器固定的高度爲70px,只顯示底部背景圖像(我認爲這是可能的,即使沒有內容存在於底部容器[忘記xsl-fo規則])。使用FOP中繼並很好地工作。

編輯:我應該注意我使用最新的FOP 1.0(也嘗試過prev版本),它運作良好。此外,我使用的圖形與內容一樣高,因爲我具有邊框......如果您只需要頂部和底部圖形(並使用背景色填充主體,則不需要完整的'as-tall-as - 可能'圖像)。