需求:
要求后台数据导出时,增加一列二维码对应相应的记录
引入maven
<dependency>
<groupId>org.iherus</groupId>
<artifactId>qrext4j</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-base</artifactId>
<version>3.3.0</version>
</dependency>
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-web</artifactId>
<version>3.3.0</version>
</dependency>
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-annotation</artifactId>
<version>3.3.0</version>
</dependency>
创建导出Excel需要的模板
import cn.afterturn.easypoi.excel.annotation.Excel;
import cn.afterturn.easypoi.excel.annotation.ExcelTarget;
/**
* 导出数据模板
*
* @author zhy
* @date 2019/6/20 11:54
*/
@ExcelTarget(value = "slaughterDataModel")
public class QRcodeModel implements java.io.Serializable {
@Excel(name = "兑换码", height = 40, width = 30)
private String earTag;
@Excel(name = "二维码", type = 2, width = 20, height = 40, imageType = 2)
private byte[] qrCode;
public String getEarTag() {
return earTag;
}
public void setEarTag(String earTag) {
this.earTag = earTag;
}
public byte[] getQrCode() {
return qrCode;
}
public void setQrCode(byte[] qrCode) {
this.qrCode = qrCode;
}
}
创建实体
public class QRcode {
private Integer id;
private String earTag;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getEarTag() {
return earTag;
}
public void setEarTag(String earTag) {
this.earTag = earTag;
}
}
创建工具类
import cn.afterturn.easypoi.excel.ExcelExportUtil;
import cn.afterturn.easypoi.excel.entity.ExportParams;
import com.wqh.wqh_demo.QR.entity.QRcodeModel;
import com.wqh.wqh_demo.QR.entity.QRcode;
import org.apache.poi.ss.usermodel.Workbook;
import org.iherus.codegen.qrcode.QrcodeGenerator;
import org.iherus.codegen.qrcode.SimpleQrcodeGenerator;
import javax.imageio.ImageIO;
import javax.servlet.http.HttpServletResponse;
import java.awt.image.BufferedImage;
import java.io.BufferedOutputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.List;
/**
* excel工具类
*
* @author zhy
* @date 2019/6/19 17:16
*/
public class ExcelUtil {
/**
* 导出excel
*
* @param response HttpServletResponse
* @param fileName 文件名字
* @param workbook 通过exportPicture()方法获取
* @author zhy
*/
public static void writeExcel(HttpServletResponse response, String fileName, Workbook workbook) {
// 判断数据
if (workbook == null) {
System.out.println("错误!");
}
// 重置响应对象
response.reset();
try {
OutputStream outputStream = getOutputStream(fileName, response);
BufferedOutputStream bufferedOutPut = new BufferedOutputStream(outputStream);
workbook.write(bufferedOutPut);
bufferedOutPut.flush();
bufferedOutPut.close();
outputStream.close();
} catch (IOException e) {
System.out.println(e.getMessage());
}
}
/**
* 导出文件时为Writer生成OutputStream
*
* @param fileName 文件名字
* @param response response
* @return 输出流
* @author zhy
*/
private static OutputStream getOutputStream(String fileName, HttpServletResponse response) {
try {
fileName = URLEncoder.encode(fileName, "UTF-8");
response.setContentType("application/vnd.ms-excel");
response.setCharacterEncoding("utf8");
response.setHeader("Content-Disposition", "attachment; filename=" + fileName + ".xls");
response.setHeader("Pragma", "public");
response.setHeader("Cache-Control", "no-store");
response.addHeader("Cache-Control", "max-age=0");
return response.getOutputStream();
} catch (IOException e) {
System.out.println("导出excel表格失败!");
}
return null;
}
/**
* 获取Workbook对象
*
* @param pigList 查询黑猪对象列表
* @return 文件下载
* @author zhy
*/
public static Workbook exportPicture(List<QRcode> pigList) {
List<QRcodeModel> list = new ArrayList<>();
pigList.forEach(item -> {
QRcodeModel e = new QRcodeModel();
e.setEarTag(item.getEarTag());
String s = item.getEarTag();
QrcodeGenerator generate = new SimpleQrcodeGenerator().generate( s);
BufferedImage image = generate.getImage();
byte[] pngs = imageToBytes(image);
e.setQrCode(pngs);
list.add(e);
});
return ExcelExportUtil.exportExcel(new ExportParams(), QRcodeModel.class, list);
}
/**
* BufferedImage转byte[]
*
* @param bImage BufferedImage对象
* @return byte[]
* @auth zhy
*/
private static byte[] imageToBytes(BufferedImage bImage) {
ByteArrayOutputStream out = new ByteArrayOutputStream();
try {
ImageIO.write(bImage, "png", out);
} catch (IOException e) {
System.out.println(e.getMessage());
}
return out.toByteArray();
}
}
开始执行
@Controller
public class ExcelTest {
@Autowired
public BlackpigpigService blackpigpigService;
@GetMapping("list")
@ResponseBody
public String list(HttpServletRequest request, HttpServletResponse response){
List<blackpigpig> blackpigpigs = blackpigpigService.querylist();
String fileName = "测试";
ExcelUtil.writeExcel(response, fileName, ExcelUtil.exportPicture(blackpigpigs));
return "操作成功";
}
}
执行效果
支持原创,在这里自己只是学习记录下来.
原文地址:https://blog.csdn.net/qq_27721169/article/details/93046947