/**
* 批量导出摊位二维码
*/
@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;
}