Hi,

Can anyone please help me with displaying the
multipage tiff in PDF? I spent so much time on this
but still stuck by this.

I tried to use JAI to get each page from a multipage
tiff image and then use FOP and XSL to display all the
pages. But it always displayed the first page(even if
I just want to display second page, or third page by
setting pageNumber). This tiff image has total 3
pages. My servlet did display 3 pages but they are all
same content from the first page.  I think something
wrong with my JAI part, but I just cannot see where
the problem is. Can anyone please take a look at
following codes for me? Many thanks in advance.


Jerry
*********************************************


//main servlet
private void DisplayImage(HttpServletResponse res,
                                  HttpServletRequest
req, byte[] bt){
                                        

SeekableStream tiffStream =
SeekableStream.wrapInputStream(new
ByteArrayInputStream(bt), true);
                
                //how many pages in one tiff 
                int pageNumber =
TIFFDirectory.getNumDirectories(tiffStream);
                
                TIFFDecodeParam decodeParam = new TIFFDecodeParam();
                decodeParam.setDecodePaletteAsShorts(true);

                ImageDecoder tiffDecoder =
ImageCodec.createImageDecoder("tiff", tiffStream,
decodeParam);
                        
                ByteArrayOutputStream out = new
ByteArrayOutputStream();

           
            Driver driver = new Driver();
            driver.setLogger(log);
            driver.setRenderer(Driver.RENDER_PDF);
            
            
            File xsltfile = new
File("C:/workspace/ViewImage/Web
Content/html/Tiff2Pdf.xsl");

                        res.setContentType("application/pdf");
            driver.setOutputStream(out);
            
            
             //Setup XSLT
            TransformerFactory factory =
TransformerFactory.newInstance();
            Transformer transformer =
factory.newTransformer(new StreamSource(xsltfile));
        
                for (int p = 0; p < pageNumber; p ++) {

                String
GetByteStreamServletURL="http://localhost:9080/Download/GetByteStreamForSpecifiedPage?";
+ req.getQueryString() + "&pageNumber=" + p;
                        
                //*assign ByteArrayInputStream bais to image
variable in xsltfile
                transformer.setParameter("image"+ p,
GetByteStreamServletURL);

                }
 
            try {

                        //Resulting SAX events (the generated
FO) must be piped through to FOP
                Result result = new
SAXResult(driver.getContentHandler());

                //Start XSLT transformation and FOP
processing
                transformer.transform(new
StreamSource("c:/temp/DummyXML.xml"), result);
            
                  
                byte[] content = out.toByteArray();


                res.setContentLength(content.length);
                res.getOutputStream().write(content);
                res.getOutputStream().flush();

            
                } finally {
                out.close();
                }  
 

       } catch (Exception ex) {
            //throw new ServletException(ex);
        }
}       

//Below the snippet of GetByteStreamForSpecifiedPage
servlet which to return a byte stream associated with
specific page

private void
sendByteStreamResponse(HttpServletResponse res,
                                  HttpServletRequest
req, byte[] bt,
                                  String
sContTypeHeader,
                                  String
sEncodingHeader, String encoding) {
byte[] ImageByteData=null;
int
p=Integer.parseInt(req.getParameter("pageNumber").trim());
                                        
                
if (p >= 0) {
        try{
                        
                                
                SeekableStream tiffStream =
SeekableStream.wrapInputStream(new
ByteArrayInputStream(bt), true);
                                
                TIFFDecodeParam decodeParam = new TIFFDecodeParam();
                decodeParam.setDecodePaletteAsShorts(true);
                
                ImageDecoder tiffDecoder =
ImageCodec.createImageDecoder("tiff", tiffStream,
decodeParam);
                
                RenderedImage tiffPage =
tiffDecoder.decodeAsRenderedImage(p);
                                
                bt=(byte[])tiffPage.getSources().elementAt(0);
                                                
                }catch (Exception ex) {
                      //throw new ServletException(ex);
                }

        }

  
    res.addHeader("Expires", "Wed, 26 Feb 1970
08:21:57 GMT");
    res.addHeader("Cache-Control", "no-cache");

    res.setContentType("image/tiff");
    
      OutputStream out = null;
        res.setContentType(sContTypeHeader);

      
      if (encoding == COMPRESS_TYPE_NONE) {
        if (sEncodingHeader != null) {
          res.setHeader("Content-Encoding",
sEncodingHeader);
        }
        res.setContentLength(bt.length);
        
        
        out = res.getOutputStream();
        
        
        
        
        out.write(bt);
        //out.write(ImageByteData);
        
      }
}





        
                
__________________________________
Do you Yahoo!?
Yahoo! Tax Center - File online by April 15th
http://taxes.yahoo.com/filing.html

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to