2017-08-31 60 views
0

我想將SVG文件轉換爲圖像。問題是我的SVG使用外部CSS文件,當我使用Apache Batik時,它無法識別外部CSS文件,並且它只顯示內嵌SVG標籤的樣式。下面是我的示例代碼:

轉換SVG包括外部CSS到圖像java

public static void svg2jpgBatik1() { 
     JPEGTranscoder transcoder = new JPEGTranscoder(); 

     try { 

      // Create a JPEG transcoder 
      JPEGTranscoder t = new JPEGTranscoder(); 
      // Set the transcoding hints. 
      t.addTranscodingHint(JPEGTranscoder.KEY_QUALITY, 
        0.8f); 

      // Create the transcoder input. 
      String svgURI = new File("D:\\SVG_PATH\\map.svg").toURL().toString(); 
      TranscoderInput input = new TranscoderInput(svgURI); 

      // Create the transcoder output. 
      OutputStream ostream = new FileOutputStream("D:\\JPEG_PATH\\map.jpg"); 
      TranscoderOutput output = new TranscoderOutput(ostream); 
      t.addTranscodingHint(JPEGTranscoder.KEY_ALTERNATE_STYLESHEET, "D:\\STYLESHEET_PATH\\style.css"); 
      t.addTranscodingHint(JPEGTranscoder.KEY_BACKGROUND_COLOR, Color.blue); 

      // Save the image. 
      t.transcode(input, output); 

      // Flush and close the stream. 
      ostream.flush(); 
      ostream.close(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

這條線的工作原理:

t.addTranscodingHint(JPEGTranscoder.KEY_BACKGROUND_COLOR, Color.blue); 

,而這條線不工作:

t.addTranscodingHint(JPEGTranscoder.KEY_ALTERNATE_STYLESHEET, "D:\\STYLESHEET_PATH\\style.css"); 

爲我加這個SVG部分:

<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" width="100%" height="100%" viewBox="0 0 10 1000" preserveAspectRatio="xMinYMin meet"> 
<defs> 
    <link href="STYLESHEET_PATH\\style.css" type="text/css" rel="stylesheet" 
      xmlns="http://www.w3.org/1999/xhtml"/> 

    </defs> 

當我在瀏覽器中打開它時應用了SVG,但在蠟染中它不適用。

我也把樣式放到SVG的標籤中,但結果是一樣的。

它可能適用的唯一風格是內聯SVG風格,例如填充=「#FFFFFF」

<text text-anchor="middle" alignment-baseline="middle" x="624" xml:space="preserve" y="123.0" 
     fill="#FFFFFF" >Sample Text</text> 

我在想,如果有人可以幫助我解決這個問題,還是讓我知道任何從獲得SVG樣式的最佳替代方法當我將其轉換爲圖像時,使用外部CSS

在此先感謝。

<?xml-stylesheet type="text/css" href="style.css" ?> 

,而不是SVG標籤後,這部分:

+0

感謝@RobertLongson你的暗示。我找到了解決方案。 – farzad

回答

0

我在我的SVG代碼的頂部添加此行

<defs> 
    <link href="style.css" type="text/css" rel="stylesheet" 
      xmlns="http://www.w3.org/1999/xhtml"/> 

    </defs> 

,現在,它使圖像與風格外部CSS文件。

所以SVG文件將是:

<?xml-stylesheet type="text/css" href="style.css" ?> 
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" width="100%" height="100%" viewBox="0 0 10 1000" preserveAspectRatio="xMinYMin meet">