You are viewing a plain text version of this content. The canonical link for it is here.
Posted to batik-users@xmlgraphics.apache.org by Dylan Browne <db...@mango-solutions.com> on 2006/06/19 13:25:57 UTC
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());
}
}
RE: Streaming SVG Document without creating temporary file
Posted by Dylan Browne <db...@mango-solutions.com>.
Thanks Javid and Thomas for the replies,
Have got it working now after reading your suggestions.... just to close the
thread in case anyone else is looking for similar in the future, required
code looks something like this (of course adding the flushing/closing of
streams).....
TranscoderInput input = new TranscoderInput(doc);
OutputStream ostream = new ByteArrayOutputStream();
TranscoderOutput output = new TranscoderOutput(ostream);
t.transcode(input, output);
ByteArrayOutputStream result =
(ByteArrayOutputStream)output.getOutputStream();
byte[] bytes = result.toByteArray();
Thanks as ever for the help,
Cheers,
Dylan.
-----Original Message-----
From: thomas.deweese@kodak.com [mailto:thomas.deweese@kodak.com]
Sent: 19 June 2006 21:07
To: batik-users@xmlgraphics.apache.org
Cc: batik-users@xmlgraphics.apache.org
Subject: Re: Streaming SVG Document without creating temporary file
Hi Dylan,
"Dylan Browne" <db...@mango-solutions.com> wrote on 06/19/2006 07:25:57
AM:
> 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.
Well the transcoder can take _any_ OutputStream. Usually the
servlet provides an output stream that could be passed directly to
the Transcoder. Alternately you can use java.io.ByteArrayOutputStream
which simply stores all the content in memory which you can retrieve
as a byte[].
> 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.
> OutputStream ostream = new FileOutputStream("c:\\out." +
mimeType);
> TranscoderOutput output = new TranscoderOutput(ostream);
---------------------------------------------------------------------
To unsubscribe, e-mail: batik-users-unsubscribe@xmlgraphics.apache.org
For additional commands, e-mail: batik-users-help@xmlgraphics.apache.org
Re: Streaming SVG Document without creating temporary file
Posted by th...@kodak.com.
Hi Dylan,
"Dylan Browne" <db...@mango-solutions.com> wrote on 06/19/2006 07:25:57
AM:
> 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.
Well the transcoder can take _any_ OutputStream. Usually the
servlet provides an output stream that could be passed directly to
the Transcoder. Alternately you can use java.io.ByteArrayOutputStream
which simply stores all the content in memory which you can retrieve
as a byte[].
> 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.
> OutputStream ostream = new FileOutputStream("c:\\out." +
mimeType);
> TranscoderOutput output = new TranscoderOutput(ostream);
---------------------------------------------------------------------
To unsubscribe, e-mail: batik-users-unsubscribe@xmlgraphics.apache.org
For additional commands, e-mail: batik-users-help@xmlgraphics.apache.org
RE: Streaming SVG Document without creating temporary file
Posted by Javid Alimohideen <ja...@gmail.com>.
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());
}
}