2014-11-20 89 views
0

在參考this postJava和SVG使用img標籤

我創建一個圖表引擎,我所擁有的一切設置,其中一個GET請求返回SVG。我使用JFreeSVG(與蠟染非常相似)。我可以使用iframe和對象HTML標記呈現SVG。我想用一個img標籤來創建svg圖像,但它給了我一個空白的框。我已經搜遍了網絡,卻找不到任何東西,而你是我最後的希望。

這裏是我的請求返回的內容的示例:

<?xml version="1.0" standalone="no"?> 
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> 
<svg 
xmlns="http://www.w3.org/2000/svg" 
xmlns:xlink="http://www.w3.org/1999/xlink" 
xmlns:jfreesvg="http://www.jfree.org/jfreesvg/svg" width="423" height="452" text-rendering="auto" shape-rendering="auto"> 
<rect x="0" y="0" width="423" height="452" style="fill: rgb(255,255,255); fill-opacity: 1.0" transform="matrix(1,0,0,1,0,0)" clip-path="url(#4989619974245clip-0)"/> 
<g transform="matrix(1,0,0,1,0,0)"> 
    <text x="8" y="446.14" style="fill: rgb(0,0,0); fill-opacity: 1.0; font-family: Tahoma; font-size: 9px; " clip-path="url(#4989619974245clip-0)">November 19, 2014</text> 
<g style="fill: url(#4989619974245gp0); fill-opacity: 1.0; stroke: none" transform="matrix(1,0,0,1,0,0)" clip-path="url(#4989619974245clip-1)"> 
<rect x="5" y="8" width="386.62" height="412.27" style="stroke-width: 1.0;stroke: rgb(204,204,204);stroke-opacity: 1.0;; fill: none" transform="matrix(1,0,0,1,0,0)" clip-path="url(#4989619974245clip-0)"/> 
</svg> 

回答

0

最好的解決方法是通過使用URI圖像爲Base64。 Base64是期望的,因爲其與瀏覽器兼容性(IE9)

 //g2.getSVGEleemnt returns a SVG in string eg. <svg> ... </svg> 
     String imageString = g2.getSVGElement(); 
     //encode it in Base64 
     byte[] imageData = Base64.encodeBase64(imageString.getBytes()); 
     //indicate mime type && base64 
     String header = "data:image/svg+xml;base64,"; 
     byte[] headerData = header.getBytes(); 

的一旦你,你必須流的順序的標題,然後該圖像數據。把你的數據或你的電話,獲取數據在img標籤和中提琴!

<img src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaH........">