Writing a Servlet to View a Document in a Web Browser

This tech tip demonstrates how to write a simple servlet that allows any document supported by the RasterMaster imaging SDK library to be viewed in a standard Web browser. The documents are converted in real time to PNG images.

package com.snowbound.techtip;

import java.io.IOException;

import javax.servlet.ServletConfig;

import javax.servlet.ServletContext;

import javax.servlet.ServletException;

import javax.servlet.ServletOutputStream;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import Snow.Snowbnd;

public class Document2PNGServlet extends HttpServlet

{

private final static int PNG_FORMAT = 43;

private final static String IMAGE_DIRECTORY = "c:/images/";

public void service(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException

{

ServletConfig config = getServletConfig();

ServletContext application = config.getServletContext();

Snowbnd snow = new Snowbnd();

// get the page number to convert from the page parameter

int pageIndex = Integer.parseInt(request.getParameter("page"));

// get the filename to convert from the filename parameter

String filename = IMAGE_DIRECTORY + request.getParameter("filename");

// create a temporary byte array that is at least as big as the expected output size

byte[] tmpOutputBytes = new byte[15000000];

// decompress the specified page

snow.IMG_decompress_bitmap(filename, pageIndex);

// write out the page to a byte array in PNG format

int outputSize = snow.IMG_save_bitmap(tmpOutputBytes, PNG_FORMAT);

// copy only the data portion to our output array

byte[] outputBytes = new byte[outputSize];

System.arraycopy(tmpOutputBytes, 0, outputBytes, 0, outputSize);

// set the content type of the image data to be sent to the browser

response.setContentType(application.getMimeType(".png"));

response.setContentLength(outputSize);

// send the bytes to the response object

sendBytes(outputBytes, response);

}

/**

* This method will send the contents of the byte array

* to the servlet response output stream.

*

* @param bytes the output byte array

* @param response the HttpServletResponse object to write to

* @throws IOException

*/

protected void sendBytes(byte[] bytes, HttpServletResponse response)

throws IOException

{

ServletOutputStream servletoutputstream = response.getOutputStream();

servletoutputstream.write(bytes);

servletoutputstream.flush();

}

}

Learn More
In addition to our Tech Tips section, our document and image Solutions Section provides business application and industry-specific examples including image conversion and web viewing.

Category:

Online Demo