java批量导出下方带文字二维码并打包下载

/**
	 * 批量导出摊位二维码
	 */
	@RequestMapping(value="/showListForQrcodeForAll",method=RequestMethod.GET)
	public void showListForQrcodeForAll(HttpServletRequest request,HttpServletResponse response){
	    BufferedImage image;
	    try {
	    	response.setContentType("application/zip"); 
	    	String newName = URLEncoder.encode( "商户二维码.zip", "UTF-8"); 
			response.addHeader("Content-Disposition", "attachment;filename=\"" + newName + "\""); 
	    	OutputStream outputStream = response.getOutputStream(); 
	    	ZipOutputStream zipOutputStream = new ZipOutputStream(outputStream);
	    	String pathServer=request.getRequestURL().toString();
	    	pathServer = pathServer.substring(0,pathServer.indexOf("admin"));
	    	List<MarkBooth> list = this.markBoothService.getAllBooth();
	    	for(MarkBooth mb:list){
	    		String path = pathServer+"admin/workOrder/QRcodeForList?boothnumber="+mb.getBoothnumber();
	    		BufferedImage image1 = this.createQRCodeForBatch(path);
	    		image=addTextForQRCode(image1,mb.getBoothName());
		        //image.flush();
		        //ImageIO.write(image, "png", new File("D:/qrcode/"+mb.getMkname()+"_"+mb.getBoothName()+".png"));
		        ZipEntry entry = new ZipEntry(mb.getBoothName() +System.currentTimeMillis()+ ".png");
		        zipOutputStream.putNextEntry(entry); 
		        ImageIO.write(image, "png", zipOutputStream); 
		        zipOutputStream.flush();
	    	}
	    	zipOutputStream.close();

            outputStream.flush();
            outputStream.close();
	        
	    } catch (Exception e) {
	        e.printStackTrace();
	    }
	}
/**
	 * 生成二维码
	 * @param url
	 * @return
	 */
	public static BufferedImage createQRCodeForBatch(String url) {

	    int width = 1200;
	    int height = 1200;
	    BufferedImage bufferedImage = new BufferedImage(width, height,
	            BufferedImage.TYPE_4BYTE_ABGR);

	    try {
	        Qrcode x = new Qrcode();
	        x.setQrcodeErrorCorrect('M');// 纠错等级(四种等级)
	        x.setQrcodeEncodeMode('B');// N代表数字,A代表a-Z,B代表其他字符
	        x.setQrcodeVersion(7);// 版本

	        Graphics2D gs = bufferedImage.createGraphics();

	        gs.setBackground(Color.WHITE);
	        gs.setColor(Color.BLACK);
	        gs.clearRect(0, 0, width, height);// 清除画板的内容

	        int pixoff = 30;// 添加一个偏移量

	        byte[] d = url.getBytes("utf-8");
	        if (d.length > 0 && d.length < 120) {
	            boolean[][] s = x.calQrcode(d);
	            for (int i = 0; i < s.length; i++) {
	                for (int j = 0; j < s.length; j++) {
	                    if (s[j][i]) {
	                        gs.fillRect(j * 25 + pixoff, i * 25 + pixoff, 25,
	                                25);
	                    }
	                }
	            }
	        }
	        
	        gs.dispose();
	    } catch (Exception e) {
	        e.printStackTrace();
	    }
	    return bufferedImage;
	}
/**
     * @param bim       放在内存中图片
     * @param belowText 二维码下方显示文字
     * @return
     */
    public BufferedImage addTextForQRCode(BufferedImage bim, String belowText) {
        try {
            BufferedImage image = bim;
            if (belowText != null && !belowText.equals("")) {
                BufferedImage outImage = new BufferedImage(1200, 1300, BufferedImage.TYPE_4BYTE_ABGR);
                Graphics2D outg = outImage.createGraphics();
                outg.drawImage(image, 0, 0, image.getWidth(), image.getHeight(), null);
                outg.setColor(Color.BLACK);
                outg.setFont(new Font("宋体", Font.BOLD, 60));
                int strWidth = outg.getFontMetrics().stringWidth(belowText);                
                outg.drawString(belowText, 600 - strWidth / 2, image.getHeight() + (outImage.getHeight() - image.getHeight()) / 2 + 5);
                outg.dispose();
                outImage.flush();
                image = outImage;
            }
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            baos.flush();
            ImageIO.write(image, "png", baos);
            BufferedImage newBufferedImage = new BufferedImage(
                    image.getWidth(), image.getHeight(),
                    BufferedImage.TYPE_INT_RGB);
            newBufferedImage.createGraphics().drawImage(image, 0, 0,
                    Color.WHITE, null);
//            存放本地
            /*ImageIO.write(newBufferedImage, "png", new File(CODEPATH + "SZ-" + System.currentTimeMillis() + "code.png"));
            com.lowagie.text.Image imageByte = com.lowagie.text.Image.getInstance(baos.toByteArray());
            baos.close();
            image.flush();
            return imageByte;*/
            return newBufferedImage;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

猜你喜欢

转载自blog.csdn.net/weixin_42656571/article/details/90606108