Package org.openmeetings.servlet.outputhandler

Source Code of org.openmeetings.servlet.outputhandler.ExportToImage

package org.openmeetings.servlet.outputhandler;

import java.awt.Color;
import java.awt.Font;
import java.awt.Image;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.OutputStream;
import java.io.RandomAccessFile;
import java.io.Writer;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Iterator;

import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.batik.dom.GenericDOMImplementation;
import org.apache.batik.dom.svg.SVGDOMImplementation;
import org.apache.batik.svggen.SVGGraphics2D;
import org.openmeetings.app.batik.beans.PrintBean;
import org.openmeetings.app.data.basic.Sessionmanagement;
import org.openmeetings.app.data.record.BatikMethods;
import org.openmeetings.app.data.record.WhiteboardMapToSVG;
import org.openmeetings.app.data.user.Usermanagement;
import org.openmeetings.app.documents.GenerateImage;
import org.openmeetings.app.remote.PrintService;
import org.openmeetings.app.remote.red5.ScopeApplicationAdapter;
import org.openmeetings.utils.geom.GeomPoint;
import org.openmeetings.utils.math.CalendarPatterns;
import org.slf4j.Logger;
import org.red5.logging.Red5LoggerFactory;
import org.w3c.dom.DOMImplementation;
import org.w3c.dom.Document;
import org.w3c.dom.Element;

public class ExportToImage extends HttpServlet {
  
  private static final Logger log = Red5LoggerFactory.getLogger(ExportToImage.class, ScopeApplicationAdapter.webAppRootKey);

  /*
   * (non-Javadoc)
   *
   * @see javax.servlet.http.HttpServlet#doPost(javax.servlet.http.HttpServletRequest,
   *      javax.servlet.http.HttpServletResponse)
   */
  @Override
  protected void service(HttpServletRequest httpServletRequest,
      HttpServletResponse httpServletResponse) throws ServletException,
      IOException {

    try {
     
     
      String sid = httpServletRequest.getParameter("sid");
      if (sid == null) {
        sid = "default";
      }
      log.debug("sid: " + sid);
     
      String hash = httpServletRequest.getParameter("hash");
      if (hash == null) {
        hash = "";
      }
      log.debug("hash: " + hash);
     
      String fileName = httpServletRequest.getParameter("fileName");
      if (fileName == null) {
        fileName = "file_xyz";
      }
     
      String exportType = httpServletRequest.getParameter("exportType");
      if (exportType == null) {
        exportType = "svg";
      }

      Long users_id = Sessionmanagement.getInstance().checkSession(sid);
      Long user_level = Usermanagement.getInstance().getUserLevelByID(users_id);

      log.debug("users_id: "+users_id);
      log.debug("user_level: "+user_level);
     
      if (user_level!=null && user_level > 0 && hash != "") {
       
       
        PrintBean pBean = PrintService.getPrintItemByHash(hash);
       
        //Whiteboard Objects
        List whiteBoardMap = pBean.getMap();
       
        // Get a DOMImplementation.
            DOMImplementation domImpl =
                GenericDOMImplementation.getDOMImplementation();

            // Create an instance of org.w3c.dom.Document.
            //String svgNS = "http://www.w3.org/2000/svg";
            String svgNS = SVGDOMImplementation.SVG_NAMESPACE_URI;

            Document document = domImpl.createDocument(svgNS, "svg", null);
           
            // Get the root element (the 'svg' element).
            Element svgRoot = document.getDocumentElement();

           
            // Set the width and height attributes on the root 'svg' element.
            svgRoot.setAttributeNS(null, "width", ""+pBean.getWidth());
            svgRoot.setAttributeNS(null, "height", ""+pBean.getHeight());
           
            log.debug("pBean.getWidth(),pBean.getHeight()"+pBean.getWidth()+","+pBean.getHeight());
           

            // Create an instance of the SVG Generator.
            SVGGraphics2D svgGenerator = new SVGGraphics2D(document);
           
            svgGenerator = WhiteboardMapToSVG.getInstance().convertMapToSVG(svgGenerator, whiteBoardMap);
           
            // Finally, stream out SVG to the standard output using
            // UTF-8 encoding.
            boolean useCSS = true; // we want to use CSS style attributes
            //Writer out = new OutputStreamWriter(System.out, "UTF-8");
           
           
            String requestedFile = fileName+"_"+CalendarPatterns.getTimeForStreamId(new Date())+".svg";
           
            if (exportType.equals("svg")) {
              //OutputStream out = httpServletResponse.getOutputStream();
          //httpServletResponse.setContentType("APPLICATION/OCTET-STREAM");
          //httpServletResponse.setHeader("Content-Disposition","attachment; filename=\"" + requestedFile + "\"");
              Writer out = httpServletResponse.getWriter();
             
              svgGenerator.stream(out, useCSS);
             
             
            } else if (exportType.equals("png") || exportType.equals("jpg")
                || exportType.equals("gif") || exportType.equals("tif")
                || exportType.equals("pdf")){
             
              String current_dir = getServletContext().getRealPath("/");
              String working_dir = current_dir + "uploadtemp" + File.separatorChar;
             
              String requestedFileSVG = fileName+"_"+CalendarPatterns.getTimeForStreamId(new Date())+".svg";
              String resultFileName = fileName+"_"+CalendarPatterns.getTimeForStreamId(new Date())+"."+exportType;
             
              log.debug("current_dir: "+current_dir);
              log.debug("working_dir: "+working_dir);
              log.debug("requestedFileSVG: "+requestedFileSVG);
              log.debug("resultFileName: "+resultFileName);
             
              File svgFile = new File(working_dir + requestedFileSVG);
              File resultFile = new File(working_dir + resultFileName);
             
              log.debug("svgFile: "+svgFile.getAbsolutePath());
              log.debug("resultFile: "+resultFile.getAbsolutePath());
              log.debug("svgFile P: "+svgFile.getPath());
              log.debug("resultFile P: "+resultFile.getPath());
             
              FileWriter out = new FileWriter(svgFile);
              svgGenerator.stream(out, useCSS);
             
              HashMap<String,Object> returnError = GenerateImage.getInstance().convertImageByTypeAndSize(
                  svgFile.getAbsolutePath(), resultFile.getAbsolutePath(),
                  pBean.getWidth(), pBean.getHeight());
             
              //Get file and handle download
          RandomAccessFile rf = new RandomAccessFile(resultFile.getAbsoluteFile(), "r");

          httpServletResponse.reset();
          httpServletResponse.resetBuffer();
          OutputStream outStream = httpServletResponse.getOutputStream();
          httpServletResponse.setContentType("APPLICATION/OCTET-STREAM");
          httpServletResponse.setHeader("Content-Disposition","attachment; filename=\"" + resultFileName + "\"");
          httpServletResponse.setHeader("Content-Length", ""+ rf.length());

          byte[] buffer = new byte[1024];
          int readed = -1;

          while ((readed = rf.read(buffer, 0, buffer.length)) > -1) {
            outStream.write(buffer, 0, readed);
          }

          rf.close();

          out.flush();
          out.close();
             
            }
       
      }
     
     
    } catch (Exception er) {
      log.error("ERROR ", er);
      System.out.println("Error exporting: " + er);
      er.printStackTrace();
    }
  }
}
TOP

Related Classes of org.openmeetings.servlet.outputhandler.ExportToImage

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.