Hi Dylan,
When you say streaming, do you mean something like streaming animation, or
its just a dynamic document that is rendered on the server side.. The way I
do it in my application I render the SVG on the server side and just stream
the pixels to the client side (application, or a browser window). You could
acheive the same with servlet too. If you would like to do offscreen server
side rendering, take a look at the Batik wiki pages.
Thanks,
Javid
-----Original Message-----
From: Dylan Browne [mailto:dbrowne@mango-solutions.com]
Sent: Monday, June 19, 2006 6:26 AM
To: batik-users@xmlgraphics.apache.org
Subject: Streaming SVG Document without creating temporary file
Hi,
I was looking for way to improve my code where I stream an SVG Document
(created using Batik DOM) to a browser. So basically I need to get from SVG
Document to a byte[] which can be passed via Servlet which sets the Mime
type, and so displayed.
Currently I use my method below, but as part of this method I am creating
a file object and retrieving my byte[] from that. Ideally (it may actually
become a requirement) I'd like to avoid this step and be able to retrieve a
byte[] without creating a file object.
Thanks in advance for any help,
Regards,
Dylan
public static void streamSVGIntoImageFormat(HttpSession session,
Document doc, String mimeType) {
try {
ImageTranscoder t = null;
if (mimeType.equals(Config.JPEG)) {
t = new JPEGTranscoder();
t.addTranscodingHint(JPEGTranscoder.KEY_QUALITY, new
Float(.8));
} else if (mimeType.equals(Config.PNG)) {
t = new PNGTranscoder();
} else if (mimeType.equals(Config.TIFF)) {
t = new TIFFTranscoder();
} else {
System.out.println("ERROR: A request to stream an image
was recieved with an unsupported mime type: " + mimeType);
return;
}
TranscoderInput input = new TranscoderInput(doc);
OutputStream ostream = new FileOutputStream("c:\\out." +
mimeType);
TranscoderOutput output = new TranscoderOutput(ostream);
t.transcode(input, output);
ostream.flush();
ostream.close();
byte[] bytes = getBytesFromFile(new File("c:\\out." +
mimeType));
session.setAttribute("jpegbytes", bytes);
session.setAttribute("mimeType", mimeType);
} catch (Exception e) {
e.printStackTrace();
System.out.println("Error in streaming SVG because " +
e.getMessage());
}
}
|