使用Batik操作SVG

Batik简介

Batik是为想使用SVG来实现各种功能的应用程序的JAVA工具包。通过Batik,可以在任何使用JAVA的地方操作SVG文档,也可以利用Batik模块来在应用程序中或者Applet中来生成、操作以及转换SVG图像。

 

有了Batik之后,操作SVG内容变得非常轻松,可以通过Batik的SVGGernerate模块让java应用程序简单的输出图像的格式为SVG,使用Batik的SVG viewing component让java应用程序整合SVG查看和交互能力,另外可以利用Batik的模块将SVG格式转换为其他格式,例如JPEG和PDF等格式。

 

Batik使用

使用实例一:利用Batik生成SVG文档

 

package test;
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import java.io.Writer;
 
import org.apache.batik.dom.GenericDOMImplementation;
import org.apache.batik.svggen.SVGGraphics2D;
import org.apache.batik.svggen.SVGGraphics2DIOException;
import org.w3c.dom.DOMImplementation;
import org.w3c.dom.Document;
 
 
public class TestSvgGener {
 
public void paint(Graphics2D g2d){
g2d.setPaint(Color.red);
//画一个矩形
g2d.fill(new Rectangle(10,10,100,100));
}
public static void main(String[] args) throws UnsupportedEncodingException, SVGGraphics2DIOException {
DOMImplementation domImpl=GenericDOMImplementation.getDOMImplementation();
String svgURI="http://www.w3.org/2000/svg";
//创建SVG文件
Document doc=domImpl.createDocument(svgURI, "svg", null);
SVGGraphics2D svggener=new SVGGraphics2D(doc);
TestSvgGener test=new TestSvgGener();
test.paint(svggener);
boolean useCSS=true;
//输出SVG文件
Writer out =new OutputStreamWriter(System.out,"UTF-8");
svggener.stream(out,useCSS);
}
}
 


结果:

 

使用Batik操作SVG_第1张图片

 

使用实例二:利用Batik将SVG文档转换为PDF和PNG

 

package test;
 
import java.io.BufferedOutputStream;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
 
import org.apache.batik.transcoder.Transcoder;
import org.apache.batik.transcoder.TranscoderException;
import org.apache.batik.transcoder.TranscoderInput;
import org.apache.batik.transcoder.TranscoderOutput;
import org.apache.batik.transcoder.image.PNGTranscoder;
import org.apache.fop.svg.PDFTranscoder;
 
public class SvgUtil {
 
public static void convertSVGFile2Pdf(File svg,File pdf) throws IOException{
InputStream in =new FileInputStream(svg);
OutputStream out =new FileOutputStream(pdf);
out =new BufferedOutputStream(out);
convert2Pdf(in,out);
}
public static void convert2Pdf(InputStream in,OutputStream out) throws IOException{
Transcoder tr=new PDFTranscoder();
try {
TranscoderInput input=new TranscoderInput(in);
try {
TranscoderOutput output=new TranscoderOutput(out);
tr.transcode(input, output);
} catch (TranscoderException e) {
e.printStackTrace();
}finally{
out.close();
}
} catch (Exception e) {
e.printStackTrace();
}finally{
in.close();
}
}
public static void convertSVGFile2Png(File svg,File pdf) throws IOException{
InputStream in =new FileInputStream(svg);
OutputStream out =new FileOutputStream(pdf);
out=new BufferedOutputStream(out);
convert2PNG(in,out);
}
public static void convert2PNG(InputStream in,OutputStream out) throws IOException{
Transcoder tr=new PNGTranscoder();
try {
TranscoderInput input =new TranscoderInput(in);
try {
TranscoderOutput output=new TranscoderOutput(out);
tr.transcode(input, output);
} catch (Exception e) {
e.printStackTrace();
}finally{
out.close();
}
} catch (Exception e) {
e.printStackTrace();
}finally{
in.close();
}
}
public static void convertStr2Pdf(String svg,File pdf) throws IOException{
InputStream in=new ByteArrayInputStream(svg.getBytes());
OutputStream out=new FileOutputStream(pdf);
out=new BufferedOutputStream(out);
convert2Pdf(in,out);
}
public static void main(String[] args) throws IOException {
File f=new File("src/barChart.svg");
File destFile=new File("src/sun.png");
SvgUtil svgUtil=new SvgUtil();
svgUtil.convertSVGFile2Png(f, destFile);
}
}


 结果:


使用Batik操作SVG_第2张图片

你可能感兴趣的:(J2SE)