对于我一个前端来说,做这个也是醉了;搜了好多都是对已有的文件打包下载的,这里自己组合了下;先看代码吧!
Controller方法(springMVC)
/**
* 二维码
*
* @param code
* @param request
* @param response
*/
@ResponseBody
@RequestMapping(value = "createCode", method = RequestMethod.GET)
public void createCode(Integer size) {
QRCodeWriter writer = new QRCodeWriter();
getResponse().setHeader("Pragma", "No-cache");
getResponse().setHeader("Cache-Control", "no-cache");
getResponse().setDateHeader("Expires", 0);
getResponse().setContentType("application/zip");
List<BufferedImage> buffImgs = new ArrayList<BufferedImage>();
BitMatrix bitMatrix = null;
try {
for (int j = 1; j < 10; j++) {
bitMatrix = writer.encode(
Property.getProperty("system.qrcodeURL"),
BarcodeFormat.QR_CODE, size, size);
BufferedImage buffImg = MatrixToImageWriter
.toBufferedImage(bitMatrix);
Graphics g = buffImg.getGraphics();
g.setColor(Color.red);
// 最后一个参数用来设置字体的大小
Font f = new Font("宋体", Font.BOLD, 20);
g.setFont(f);
// 10,20 表示这段文字在图片上的位置(x,y) .第一个是你设置的内容。
g.drawString("箱" + j, 10, 30);
g.dispose();
buffImgs.add(buffImg);
}
ZipOutputStream zos = new ZipOutputStream(getResponse()
.getOutputStream());
int i = 1;
for (BufferedImage buf : buffImgs) {
ZipEntry entry = new ZipEntry("箱" + i + ".jpeg");
// 设置压缩包的入口
zos.putNextEntry(entry);
JPEGImageEncoder en = JPEGCodec.createJPEGEncoder(zos);
en.encode(buf);
zos.flush();
i++;
}
zos.close();
// MatrixToImageWriter.writeToStream(bitMatrix, "jpeg",
// getResponse()
// .getOutputStream());
getResponse().getOutputStream().flush();
getResponse().getOutputStream().close();
} catch (WriterException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
网页前端JS
这里需要做兼容处理,IE内核支持iframe请求触发下载;但是火狐和谷歌可以使用a标签h5的download属性
<pre name="code" class="javascript"> function DoSaveAsIMG() {
if (document.all.IframeReportImg.src != "about:blank")
window.frames['IframeReportImg'].document.execCommand("SaveAs");
}
var _size=$("#qrcode").val();
var b_name = navigator.appName;
if (b_name == "Microsoft Internet Explorer") {
//如果隐藏IFRAME不存在,则添加
if (!document.getElementById("IframeReportImg"))
$('<iframe style="display:none;" id="IframeReportImg" name="IframeReportImg" οnlοad="DoSaveAsIMG();" width="0" height="0" src="about:blank"></iframe>').appendTo("body");
if (document.all.IframeReportImg.src != opts.createQRCodeURL+"?size="+_size) {
//加载图片
document.all.IframeReportImg.src = opts.createQRCodeURL+"?size="+_size;
}
else {
//图片直接另存为
DoSaveAsIMG();
}
}else{
var newA = document.createElement("a");
newA.download = "code";
newA.href = opts.createQRCodeURL+"?size="+_size;
document.body.appendChild(newA);
newA.click();
document.body.removeChild(newA);
}