public void service(HttpServletRequest request,
HttpServletResponse response) throws IOException, ServletException {
byte[] imageData = null;
String imageMimeType = null;
String imageName = request.getParameter(IMAGE_NAME_REQUEST_PARAMETER);
if ("px".equals(imageName))
{
try
{
JRRenderable pxRenderer =
JRImageRenderer.getInstance("net/sf/jasperreports/engine/images/pixel.GIF");
imageData = pxRenderer.getImageData();
imageMimeType = JRRenderable.MIME_TYPE_GIF;
}
catch (JRException e)
{
throw new ServletException(e);
}
}
else
{
List jasperPrintList = BaseHttpServlet.getJasperPrintList(request);
if (jasperPrintList == null)
{
throw new ServletException("No JasperPrint documents found on the HTTP session.");
}
JRPrintImage image = JRHtmlExporter.getImage(jasperPrintList, imageName);
JRRenderable renderer = image.getRenderer();
if (renderer.getType() == JRRenderable.TYPE_SVG)
{
renderer =
new JRWrappingSvgRenderer(
renderer,
new Dimension(image.getWidth(), image.getHeight()),
JRElement.MODE_OPAQUE == image.getMode() ? image.getBackcolor() : null
);
}
imageMimeType = JRTypeSniffer.getImageMimeType(renderer.getImageType());
try
{
imageData = renderer.getImageData();
}
catch (JRException e)
{
throw new ServletException(e);
}
}
if (imageData != null && imageData.length > 0)
{
if (imageMimeType != null)
{
response.setHeader("Content-Type", imageMimeType);
}
response.setContentLength(imageData.length);
ServletOutputStream ouputStream = response.getOutputStream();
ouputStream.write(imageData, 0, imageData.length);
ouputStream.flush();
ouputStream.close();
}
}
|