2017-02-24 6 views
0

SVGへのJavaグラフィックスのエクスポートに誰か助けてくれますか? JavaグラフィックスをSVGに書き出す方法はわかっていますが、シンボルが配置されたボックスを定義する必要がありますので、ジオツールでスタイリングに使用できます。関数の問題は、シンボルが左上(0,0)に配置されるため、QGISでは完全に表示されているものの、四分の一だけ記号がジオツールに表示されることです。私はこのJavaGraphicsからバティック付きSVG

ドロー機能のために使用されるいくつかの例を掲載しています

public void draw(Graphics g){ 
    Graphics2D g2 = (Graphics2D) g; 
    float r = 5*_f; 
    // circle 
    crtajPodlogu(g2,new Ellipse2D.Float(_x-r,_y-r,2*r,2*r)); 
    //point in middle 
    g2.fill(new Ellipse2D.Float(_x-r/5,_y-r/5,2*r/5,2*r/5)); 
    g2.draw(new Ellipse2D.Float(_x-r/5,_y-r/5,2*r/5,2*r/5)); 
    // vert. line 
    g2.draw(new Line2D.Float(_x,_y+r,_x,_y-5*r/2)); 
    //hor. line 
    g2.draw(new Line2D.Float(_x,_y-2*r,_x+r,_y-2*r)); 
    //arrow 
    g2.draw(new Line2D.Float(_x+r,_y-2*r,_x+r/2,_y-5*r/2)); 
    g2.draw(new Line2D.Float(_x+r,_y-2*r,_x+r/2,_y-3*r/2)); 
    } 

変換機能

 // Get a DOMImplementation. 
     DOMImplementation domImpl = 
      GenericDOMImplementation.getDOMImplementation(); 

     // Create an instance of org.w3c.dom.Document. 
     String svgNS = "http://www.w3.org/2000/svg"; 
     Document document = domImpl.createDocument(svgNS, "svg", null); 
     SVGGraphics2D svgGenerator = new SVGGraphics2D(document); 
     String[] myStrings = new String[] { 
       "symbolForSvg", 
       }; 
     List mylist = Arrays.asList(myStrings); 
     Iterator itr= mylist.iterator(); 
     while(itr.hasNext()){ 
      try { 
       Class clazz = Class.forName("key."+itr.next().toString()); 
       java.lang.reflect.Method method = clazz.getMethod("draw", Graphics.class); 
       method.invoke(clazz.newInstance(), svgGenerator); 
       // Finally, stream out SVG to the standard output using 
       // UTF-8 encoding. 
       //boolean useCSS = true; // we want to use CSS style attributes 
       Writer out = null; 
       System.out.println(clazz.getSimpleName()); 
       out = new BufferedWriter(new OutputStreamWriter(
          new FileOutputStream("tkey/"+clazz.getSimpleName()+".svg"), "utf-8")); 
       svgGenerator.stream(out, false); 
      } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | NoSuchMethodException 
        | SecurityException | IllegalArgumentException | InvocationTargetException | UnsupportedEncodingException | FileNotFoundException | SVGGraphics2DIOException e1) { 
       // TODO Auto-generated catch block 
       e1.printStackTrace(); 

     } 
     } 

私はこの

<?xml version="1.0"?> 
<!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.0//EN' 
      'http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd'> 
<svg xmlns:xlink="http://www.w3.org/1999/xlink" style="fill-opacity:1; color-rendering:auto; color-interpolation:auto; text-rendering:auto; stroke:black; stroke-linecap:square; stroke-miterlimit:10; shape-rendering:auto; stroke-opacity:1; fill:black; stroke-dasharray:none; font-weight:normal; stroke-width:1; font-family:'Dialog'; font-style:normal; stroke-linejoin:miter; font-size:12px; stroke-dashoffset:0; image-rendering:auto;" xmlns="http://www.w3.org/2000/svg" 
><!--Generated by the Batik Graphics2D SVG Generator--><defs id="genericDefs" 
    /><g 
    ><g 
    ><circle r="5" style="fill:none;" cx="0" cy="0" 
     /><circle r="1" style="stroke:none;" cx="0" cy="0" 
     /><circle r="1" style="fill:none;" cx="0" cy="0" 
     /><line y2="-12.5" style="fill:none;" x1="0" x2="0" y1="5" 
     /><line y2="-10" style="fill:none;" x1="0" x2="5" y1="-10" 
     /><line y2="-12.5" style="fill:none;" x1="5" x2="2.5" y1="-10" 
     /><line y2="-7.5" style="fill:none;" x1="5" x2="2.5" y1="-10" 
    /></g 
    ></g 
></svg> 

答えて

0

で取得SVGは私が慣れていませんよGeoToolsを使用していますが、生成されたSVGにviewBoxを追加する必要があると思われます。

私は次のことをテストしていませんが、それはのようなものでなければなりません:あなたは正しいビューボックスは、お使いの形状の幾何学に基づいて自分自身を値を計算する必要があります

SVGGraphics2D svgGenerator = new SVGGraphics2D(document); 
// Get the root SVG element 
Element root = svgGenerator.getRoot(); 
// Add a viewBox attribute 
root.setAttributeNS(null, "viewBox", "0 0 800 600"); 

。値の4つの数値はそれぞれminX、minY、width、およびheightです。

関連する問題