GroupDocsGists
10/24/2017 - 8:22 AM

AttachmentImageServlet.java

package com.groupdocs.ui;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.groupdocs.viewer.converter.options.ImageOptions;
import com.groupdocs.viewer.domain.AttachmentBase;
import com.groupdocs.viewer.domain.containers.DocumentInfoContainer;
import com.groupdocs.viewer.domain.image.PageImage;
import com.groupdocs.viewer.handler.ViewerImageHandler;

/**
 * Query String parameters:
 * file: string: The name of input file in storage folder.
 * width: Integer: The width of output image.
 * height: Integer: The height of output image.
 * page: Integer: The page number that needs to be viewed.
 */
@WebServlet("/attachment/image")
public class AttachmentImageServlet
        extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("image/png");
        ViewerImageHandler handler = Utils.createViewerImageHandler();

        ImageOptions o = new ImageOptions();
        int pageNumber = Integer.valueOf(request.getParameter("page"));
        /*if (request.getParameterMap().containsKey("width"))
            o.setWidth(Integer.valueOf(request.getParameter("width")));
        if (request.getParameterMap().containsKey("height"))
            o.setHeight(Integer.valueOf(request.getParameter("height")));*/
        String watermarkText = request.getParameter("watermarkText");
        if(watermarkText!=null && watermarkText.length()>0)
        	o.setWatermark(Utils.getWatermark(watermarkText,request.getParameter("watermarkColor"),
        			request.getParameter("watermarkPosition"),request.getParameter("watermarkWidth")));
        
        String filename = request.getParameter("file");
        String attachmentName = request.getParameter("attachment");  
		try {
			DocumentInfoContainer documentInfo = handler.getDocumentInfo(filename);			
			List<AttachmentBase> attachments = documentInfo.getAttachments();
			attachments.stream().filter(attachmentBase  -> attachmentBase.getName().equalsIgnoreCase(attachmentName)
					).findAny().ifPresent(attachment ->{
		        List<PageImage> pages = Utils.loadPageImageListFromAttachment(handler,attachment, o);
		        pages.stream().filter(
		                predicate -> predicate.getPageNumber() == pageNumber
		        ).findAny().ifPresent(pageImage -> {
		        	Utils.writeToResponse(pageImage.getStream(), response);		        	
		        });
			});
			
		} catch (Exception e) {
			throw new FileNotFoundException();
		}
    }
}