SpringBoot将HTML文件转为图片并返回给前端,uniapp接收
这里有一个坑,uniapp 的 uni.request和vue的axios 不一样 , axios中应该设置responseType:'blob',但是uni.request要设置的是 responseType:'arraybuffer' , 如果出错,图片就会显示不出来。
·
1.maven依赖
<dependency>
<groupId>com.github.xuwei-k</groupId>
<artifactId>html2image</artifactId>
<version>0.1.0</version>
</dependency>
2.后端代码
//创建HTML模板并转为图片
HtmlImageGenerator imageGenerator = new HtmlImageGenerator();
String htmlTemplate = "<html><body><h1>Hello, World!</h1></body></html>";
imageGenerator.loadHtml(htmlTemplate);
//生成图片流
BufferedImage bufferedImage = imageGenerator.getBufferedImage();
//将图片流返回给前端
ServletOutputStream outputStream = response.getOutputStream();
response.setContentType("image/png");
ImageIO.write(bufferedImage,"png",outputStream);
outputStream.flush();
outputStream.close();
3.前端代码
这里有一个坑,uniapp 的 uni.request和vue的axios 不一样 , axios中应该设置responseType:'blob',但是uni.request要设置的是 responseType:'arraybuffer' , 如果出错,图片就会显示不出来
function downLoadOrder() {
uni.request({
url: 'http://localhost:9999/warrantyOrder/downLoadWarrantyOrderImage',
responseType:'arraybuffer', //这里尤其重要,和vue3的axios 的blob不一样
success: (res) => {
const imageUrl = window.URL.createObjectURL(new Blob([res.data],{type: 'image/png'}))
console.log(imageUrl)
// imageSrc.value=imageUrl;
saveImage(
imageUrl
)
}
})
}
function saveImage(url) {
let oA = document.createElement("a");
oA.download = ''; // 设置下载的文件名,默认是'下载'
oA.href = url;
document.body.appendChild(oA);
oA.click();
oA.remove(); // 下载之后把创建的元素删除
}
更多推荐
所有评论(0)