Java 在線預覽並右鍵下載

項目中有涉及到在線預覽生成圖片的需求,因剛學習web知識,在此做個記錄,以便後續方便查看。
一.在jsp頁面設置點擊按鈕

<button onclick="viewAdvice('+ rows.userid + ');">預覽</button>';

點擊預覽按鈕,調用方法

function viewAdvice(userId){
    	window.open("/xx/xx/pic?userId="+userId);
    }

二.在controller類中接收

@RequestMapping(path="/pic")
	public void pic(HttpServletRequest request, HttpServletResponse response,Integer  userId) throws Exception {
	//此爲項目具體需求邏輯,可以按需使用
		User user=userService.get(userId);
		Notice notice = noticeService.findByUserId(userId);
		if(notice==null ) {
			WebUtil.responseOut(response,ResponseObject.newErrorResponseObject(ErrorInfo.EMPTY_ERROR));
			return;
		}
		if(!StringUtils.hasText(notice.getNoticeCode())||!StringUtils.hasText(user.getName())||!StringUtils.hasText(user.getIdentityCard()) 
				|| notice.getReportTime()==null ||notice.getCreateDate()==null) {
			WebUtil.responseOut(response,"信息不全,請聯繫系統管理員!");
			return ;
		}
		
		//設置響應頭,使下載格式爲jpg類型
        String fileName="自定義名稱.jpg";
        String agent = request.getHeader("User-Agent").toUpperCase(); //獲得瀏覽器信息並轉換爲大寫
        if(agent.indexOf("MSIE") > 0 || (agent.indexOf("GECKO")>0 && agent.indexOf("RV:11")>0)){//IE瀏覽器和Edge瀏覽器
            fileName = URLEncoder.encode(fileName, "UTF-8");
        }else {
            fileName = new String(fileName.getBytes("UTF-8"), "iso-8859-1");
        }

        response.setHeader("Content-Disposition", "filename=" + fileName);
		String webpath = request.getSession().getServletContext().getRealPath("/");
		File file =new File(webpath,"/template/底板圖片.jpg"); //這兩張圖片放在了webapp文件夾下的template子文件夾,可替換
		File srcImgFile = new File(webpath,"/template/水印圖片.png");
		BufferedImage image =ImageUtil.adviceNote(student, notice, file,srcImgFile);
        ImageIO.write(image, "JPEG", response.getOutputStream());
        response.getOutputStream().flush();
	}

其中adviceNote方法爲

public static BufferedImage adviceNote(Student student,Notice notice,File file,File srcImgFile) throws Exception{
		Calendar  createTime  =Calendar.getInstance(); 
		createTime.setTime(notice.getCreateDate());
		Calendar  reportTime   =Calendar.getInstance(); 
		reportTime.setTime(notice.getReportTime());
        //生成緩衝區image類
        BufferedImage image =ImageIO.read(file);
        //產生image類的Graphics用於繪製操作
        Graphics g = image.getGraphics();
        g.setFont(new Font("黑體", Font.BOLD, 18));
        g.setColor(new Color(0,102,162));
        //圖片上的文字,後兩個參數爲x ,y 座標
        g.drawString(notice.getNoticeCode(), 805, 128);
        g.drawString(user.getName(), (250-user.getName().length()*20), 330);
        g.drawString(user.getIdentityCard(), 405, 330);
        g.drawString("xxxxx", 405, 387);
        g.drawString(CommonUtil.toHanStr(reportTime.get(Calendar.MONTH)+1), 405, 440);//
        g.drawString(CommonUtil.toHanStr(reportTime.get(Calendar.DAY_OF_MONTH)), 495, 440);
        g.drawString(CommonUtil.toHanStr(createTime.get(Calendar.MONTH)+1), 755, 525);
        g.drawString(CommonUtil.toHanStr(createTime.get(Calendar.DAY_OF_MONTH)), 835, 525);
        // 增加水印
        Image srcImg = ImageIO.read(srcImgFile);
        int srcImgWidth = srcImg.getWidth(null);
        int srcImgHeight = srcImg.getHeight(null); 
        g.drawImage(srcImg, 710, 450, srcImgWidth, srcImgHeight, null);
        g.dispose();
        return image;
	}

CommonUtil的toHanStr方法

   private static String[] hanArr = { "零", "一", "二", "三", "四", "五", "六", "七","八", "九" };
   private static String[] unitArr = { "十", "百", "千", "萬", "十", "白", "千", "億", "十", "百", "千" };


/*
	* @Title: toHanStr
	* @Description: 數字轉中文
	* @param @param number
	* @param @return    
	* @return String    
	* @throws
	*/ 
	public static String toHanStr(Integer number) {
		   String numStr = number + "";
		   String result = "";
		   int numLen = numStr.length();
		   for (int i = 0; i < numLen; i++) {
			   int num = numStr.charAt(i) - 48;
			   if (i != numLen - 1 && num != 0) {
				   result += hanArr[num] + unitArr[numLen - 2 - i];
				   if (number >= 10 && number < 20) {
				   result = result.substring(1);
				   }
			   } else {
				   if (!(number >= 10 && number % 10 == 0)) {
					   result += hanArr[num];
				   }
			   }
		   }
		   return result;
	}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章