2017-08-31 6 views
0

Je veux convertir le fichier SVG en image. Le problème est mon SVG utiliser le fichier CSS externe et quand j'utilise Apache Batik, il ne peut pas reconnaître le fichier CSS externe, et il montre juste les styles qui sont en ligne les balises SVG. Voici mon exemple de code:

Convertir SVG inclure CSS externe à l'image 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(); 
     } 
    } 

Cette ligne fonctionne:

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

alors que cette ligne ne fonctionne pas:

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

dans le SVG J'ai ajouté ce partie:

<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> 

Qui a appliqué le SVG quand je l'ouvre dans le navigateur, mais dans batik il ne s'applique pas.

J'ai également mis les styles dans l'étiquette dans le SVG, mais le résultat était le même.

Le seul style qu'il pourrait appliquer est le style SVG en ligne tels que fill = « # FFFFFF »:

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

Je me demandais si quelqu'un pouvait me aider à résoudre ce problème ou laissez-moi savoir tout meilleures alternatives pour avoir des styles pour SVG de externe CSS lorsque je le convertis en une image.

Merci d'avance.

+0

Merci pour votre @RobertLongson soupçon. J'ai trouvé la solution. – farzad

Répondre

0

J'ai ajouté cette ligne en haut de mon code SVG:

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

au lieu de cette partie après la balise SVG:

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

    </defs> 

et maintenant il fait l'image avec des styles de le fichier CSS externe.

Ainsi, le fichier SVG serait:

<?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">