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(); // 下载之后把创建的元素删除
	}

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐