packagecom.foxconn.highcharts.demo;importjava.io.IOException;importjava.io.OutputStreamWriter;importjava.io.StringReader;importjavax.servlet.ServletException;importjavax.servlet.ServletOutputStream;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importorg.apache.batik.transcoder.Transcoder;importorg.apache.batik.transcoder.TranscoderException;importorg.apache.batik.transcoder.TranscoderInput;importorg.apache.batik.transcoder.TranscoderOutput;importorg.apache.batik.transcoder.image.JPEGTranscoder;importorg.apache.batik.transcoder.image.PNGTranscoder;//import org.apache.fop.svg.PDFTranscoder;
public class SaveAsImage extendsHttpServlet {/****/
private static final long serialVersionUID = 1L;/*** Constructor of the object.*/
publicSaveAsImage() {super();
}/*** Destruction of the servlet.
*/
public voiddestroy() {super.destroy(); //Just puts "destroy" string in log
}public voiddoGet(HttpServletRequest request, HttpServletResponse response)throwsServletException, IOException {
doPost(request, response);
}public voiddoPost(HttpServletRequest request, HttpServletResponse response)throwsServletException, IOException {/*导成pdf做了很久,但还是没能做出来,因为一直报
* java.lang.NoSuchMethodError: org.apache.avalon.framework.configuration.DefaultConfiguration.(Ljava/lang/String;)V的错误,
* 如果你知道如何解决这个错误,请告诉我一下,在此先谢过了。现在已经可以正确地将图片导成pdf了,程序是没有问题的
**/request.setCharacterEncoding("utf-8");//设置编码,解决乱码问题
String type = request.getParameter("type");
String svg= request.getParameter("svg");
String filename= request.getParameter("filename");
filename= filename==null?"chart":filename;
ServletOutputStream out=response.getOutputStream();if (null != type && null !=svg) {
svg= svg.replaceAll(":rect", "rect");
String ext= "";
Transcoder t= null;if (type.equals("image/png")) {
ext= "png";
t= newPNGTranscoder();
}else if (type.equals("image/jpeg")) {
ext= "jpg";
t= newJPEGTranscoder();
}else if (type.equals("application/pdf")) {
ext= "pdf";
t=(Transcoder) new PDFTranscoder();//我将这儿的注释去掉了,因为导成pdf的问题已经解决
} else if(type.equals("image/svg+xml"))
ext= "svg";
response.addHeader("Content-Disposition", "attachment; filename="+ filename + "."+ext);
response.addHeader("Content-Type", type);if (null !=t) {
TranscoderInput input= new TranscoderInput(newStringReader(svg));
TranscoderOutput output= newTranscoderOutput(out);try{
t.transcode(input, output);
}catch(TranscoderException e) {
out.print("Problem transcoding stream. See the web logs for more details.");
e.printStackTrace();
}
}else if (ext.equals("svg")) {//out.print(svg);
OutputStreamWriter writer = new OutputStreamWriter(out, "UTF-8");
writer.append(svg);
writer.close();
}elseout.print("Invalid type: " +type);
}else{
response.addHeader("Content-Type", "text/html");
out.println("Usage:\n\tParameter [svg]: The DOM Element to be converted." +
"\n\tParameter [type]: The destination MIME type for the elment to be transcoded.");
}
out.flush();
out.close();
}/*** Initialization of the servlet.
*
*@throwsServletException if an error occurs*/
public void init() throwsServletException {//Put your code here
}
}