SVG操作

package rxpe.svg;


import java.awt.Color;
import java.awt.Rectangle;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.StringWriter;
import java.io.UnsupportedEncodingException;
import java.io.Writer;


import javax.swing.JFrame;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;


import org.apache.batik.anim.dom.SAXSVGDocumentFactory;
import org.apache.batik.anim.dom.SVGDOMImplementation;
import org.apache.batik.svggen.SVGGeneratorContext;
import org.apache.batik.svggen.SVGGraphics2D;
import org.apache.batik.svggen.SVGGraphics2DIOException;
import org.apache.batik.swing.JSVGCanvas;
import org.apache.batik.util.XMLResourceDescriptor;
import org.apache.commons.io.FileUtils;
import org.apache.xml.serialize.OutputFormat;
import org.apache.xml.serialize.XMLSerializer;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import org.w3c.dom.DOMImplementation;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.svg.SVGDocument;


/*
 * java -jar batik-rasterizer.jar -m image/png test.svg
 */
public class Main {


 


public static void convert()  
{
File f = new File("E:\\bnwork\\荣信\\SVG相关\\元件库\\svg.svg");
File destFile = new File("src/jxt.png");
SVGUtil svgUtil = new SVGUtil();
try {
svgUtil.convertSVGFile2Png(f, destFile);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}


public static void display( String uri) {
Document doc2=null; 
if(uri==null || uri=="")uri = "http://tongxinmao.com/txm/svg.svg";
//SVG转DOM
try {
   String parser = XMLResourceDescriptor.getXMLParserClassName();
   SAXSVGDocumentFactory f = new SAXSVGDocumentFactory(parser);
   
   doc2 = f.createDocument(uri);
} catch (Exception ex) {
   // ...
}

JSVGCanvas canvas = new JSVGCanvas();
JFrame f = new JFrame();
f.getContentPane().add(canvas);
 
//canvas.setSVGDocument(doc2);
 
canvas.setDocument(doc2);
f.pack();
f.setVisible(true);
}

public static void paint() throws UnsupportedEncodingException,
SVGGraphics2DIOException {
DOMImplementation domImpl = SVGDOMImplementation.getDOMImplementation();
String svgURI = "http://www.w3.org/2000/svg";
String svgNS = SVGDOMImplementation.SVG_NAMESPACE_URI;




// 创建SVG文件
SVGDocument  doc = (SVGDocument) domImpl.createDocument(null, "svg", null);
 
 
//http://www.udel.edu/CIS/software/dist/batik-1.6/docs/svggen.html

SVGGeneratorContext ctx = SVGGeneratorContext.createDefault(doc);
ctx.setComment("Generated by TCM");
SVGGraphics2D svggener = new SVGGraphics2D(ctx, false);

//SVGGraphics2D svggener = new SVGGraphics2D(doc);


svggener.setPaint(Color.red);
// 画一个矩形
svggener.fill(new Rectangle(10, 10, 100, 100));

svggener.drawLine(0, 0, 100, 300);


boolean useCSS = false;
// 输出SVG文件
try {
FileOutputStream fo = new FileOutputStream("MyOut.svg");
Writer out = new OutputStreamWriter(fo, "UTF-8"); //System.out
svggener.stream(out, useCSS);
out.close();

} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}



//convert();
}





public  static void dbg(String msg){
System.out.println(msg);
}


public  static void loadVdrJson(){

File file = new File("vdr.json");
String JSONText="";
try {
JSONText = FileUtils.readFileToString(file);
       } catch (IOException e) {
           e.printStackTrace();
           return;
       }
 

try {  
       JSONObject json = new JSONObject(JSONText);   
       String filepath = json.getString("file");  
       dbg(filepath);
      
       JSONArray components = json.getJSONArray("components");
       JSONArray drawings = json.getJSONArray("drawings");
       
       for(int i=0;i<components.length();i++){
        JSONObject c = (JSONObject)components.getJSONObject(i);
        //dbg(c.getString("script"));
       
       }
       
       for(int i=0;i<drawings.length();i++){
        JSONObject d = (JSONObject)drawings.getJSONObject(i);
        String name = (d.getString("name"));
       
        if(!d.isNull("time")){
       
        }
       
       
       }
       
         
   } catch (JSONException e) {  
       e.printStackTrace();  
   }  
 
}


 /** 
     * Document 转换为 String 并且进行了格式化缩进 
     *  
     * @param doc XML的Document对象 
     * @return String 
     */  
    public static String doc2FormatString(Document doc) {         
        StringWriter stringWriter = null;  
        try {  
            stringWriter = new StringWriter();  
            if(doc != null){  
                OutputFormat format = new OutputFormat(doc,"UTF-8",true);  
                //format.setIndenting(true);//设置是否缩进,默认为true  
                //format.setIndent(4);//设置缩进字符数  
                //format.setPreserveSpace(false);//设置是否保持原来的格式,默认为 false  
                //format.setLineWidth(500);//设置行宽度  
                XMLSerializer serializer = new XMLSerializer(stringWriter,format);  
                serializer.asDOMSerializer();  
                serializer.serialize(doc);  
                return stringWriter.toString();  
            } else {  
                return null;  
            }  
        } catch (Exception e) {  
            return null;  
        } finally {  
            if(stringWriter != null){  
                try {  
                    stringWriter.close();  
                } catch (IOException e) {  
                    return null;  
                }  
            }  
        }  
    }  
      
    
  

public static void dom()
{

String svgNS = SVGDOMImplementation.SVG_NAMESPACE_URI;

DOMImplementation domImpl = SVGDOMImplementation.getDOMImplementation();

SVGDocument  doc = (SVGDocument) domImpl.createDocument(svgNS, "svg", null);

Element svgRoot = doc.getDocumentElement();
 
svgRoot.setAttributeNS(null, "width", "400");
svgRoot.setAttributeNS(null, "height", "450");

Element rect = doc.createElementNS(svgNS, "rect");
rect.setAttributeNS(null, "x", "0");
rect.setAttributeNS(null, "y", "0");
rect.setAttributeNS(null, "width", "100");
rect.setAttributeNS(null, "height", "50");
rect.setAttributeNS(null, "style", "fill:blue");


svgRoot.appendChild(rect);

Element circle = doc.createElementNS(svgNS, "circle");
circle.setAttributeNS(null, "cx", "225");
circle.setAttributeNS(null, "cy", "250");
circle.setAttributeNS(null, "r", "100");
circle.setAttributeNS(null, "style", "fill:green;fill-opacity:.5");
        svgRoot.appendChild(circle);
         
 
       dbg( doc2FormatString(doc));
 

 
JSVGCanvas canvas = new JSVGCanvas();
JFrame f = new JFrame();
f.getContentPane().add(canvas);
 
canvas.setDocument(doc);
 
f.pack();
f.setVisible(true);


}



public static void main(String[] args)
{
//loadVdrJson();
dom();
}

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值