📄 exportimage.java
字号:
package com.esri.solutions.jitk.web.tasks.export.image;
import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;
import java.util.List;
import java.util.ArrayList;
import java.io.InputStream;
import java.net.URL;
import java.io.File;
import java.io.ByteArrayOutputStream;
import com.esri.adf.web.util.ADFDownloadServlet;
import com.esri.adf.web.data.WebNorthArrow;
import com.esri.adf.web.data.WebScaleBar;
import com.esri.adf.web.data.WebMap;
import com.esri.adf.web.data.WebGraphics;
import com.esri.adf.web.util.WebUtil;
import com.esri.adf.web.faces.event.TaskEvent;
import java.text.DateFormat;
import java.util.Date;
/**
* MVS-049: Export Image/Print Task support class. This utility class exports the current
* map view to selected image format.
*/
public class ExportImage{
private static Logger logger = LogManager.getLogger(ExportImage.class.getName());
public ExportImage(){
}
public String exportImageToFile(TaskEvent event, String ext){
List<byte[]> imageList = new ArrayList<byte[]>();
try{
WebMap webMap = event.getWebContext().getWebMap();
byte[] map = webMap.getImageBytes();
imageList.add(map);
String dstr = DateFormat.getDateTimeInstance().format(new Date());
String filename = dstr.replaceAll(" ", "_");
if (ext.equalsIgnoreCase("PNG8")) ext = "PNG";
//This line of code had to be changed when ported to 9.3 because the
//WebContext object did not support the .getId() method. If was replaced
//with .getName()
//String dirname = "jitk_" + event.getWebContext().getId() + "_" + filename.replaceAll(":", "_");
String dirname = "jitk_" + filename.replaceAll(":", "_");
String fulldir = System.getProperty("java.io.tmpdir") + System.getProperty("file.separator") + dirname;
File fdir = new File(fulldir);
fdir.mkdir();
String fullpath = fulldir + System.getProperty("file.separator") + "ExportMapImage." + ext;
ImageMerger imageMerge = new ImageMerger();
WebScaleBar webScaleBar = new WebScaleBar();
webScaleBar.init(event.getWebContext());
WebNorthArrow webNorthArrow = new WebNorthArrow();
webNorthArrow.init(event.getWebContext());
javax.servlet.ServletRequest request = (javax.servlet.ServletRequest)WebUtil.getExternalContext().getRequest();
String urlpath = "";
if (request.isSecure()) urlpath += "https://";
else urlpath += "http://";
urlpath += request.getServerName();
urlpath += ":" + request.getServerPort();
byte[] northArrow = null;
try{
ByteArrayOutputStream baos = new ByteArrayOutputStream();
URL url = new URL(urlpath + "/" + webNorthArrow.getImageUrl());
InputStream is = url.openStream();
int r;
byte[] buffer = new byte[8000];
while ((r = is.read(buffer)) >= 0){
if (r == 0) continue;
baos.write(buffer, 0, r);
}
is.close();
northArrow = baos.toByteArray();
}catch(Exception e){
logger.warn("Unable to get the north arrow image", e);
}
WebGraphics webGraphics = event.getWebContext().getWebGraphics();
if (webGraphics.isEmpty()){
if (northArrow != null) imageList.add(northArrow);
imageMerge.mergeImages(imageList, fullpath, ext, webMap, webScaleBar);
}
else{
byte[] data = webGraphics.exportGraphics();
imageList.add(data);
if (northArrow != null) imageList.add(northArrow);
imageMerge.mergeImages(imageList, fullpath, ext, webMap, webScaleBar);
}
return dirname + "/ExportMapImage." + ext;
} catch(Exception e) {
logger.warn("Unable to export image to file", e);
}
return null;
}
@SuppressWarnings("unchecked")
public String exportImage(TaskEvent event, String ext) {
try {
String filename = exportImageToFile(event, ext);
String id = ADFDownloadServlet.generateId();
WebUtil.getExternalContext().getSessionMap().put(id, filename);
return id;
} catch(Exception e) {
logger.warn("Unable to export image", e);
}
return null;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -