EasyExcel中对图片大小及位置进行调整(自定义拦截器)

如何对我们导出的图片设置大小和位置

首先我们先丢入一张图片,这里我就直接通过URL的形式进行编写

定义一个存储图片的类

import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.Setter;import java.net.URL;@Getter
@Setter
@EqualsAndHashCode
public class ImageDemoData {/*** 根据url导出**/private URL url;}

需要将图片插入的操作(把图片赛进List中)

            ImageDemoData imageDemoData = new ImageDemoData();imageDemoData.setUrl(new URL("https://img-blog.csdnimg.cn/img_convert/ff9e522ef239408bb54947c4fe64ae0f.png?x-oss-process=image/resize,m_fixed,h_300,image/format,png"));List<ImageDemoData> imageDemoDataList = new ArrayList<>();imageDemoDataList.add(imageDemoData);

在ExcelWriter中对其进行写入操作

ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).build();
excelWriter.write(imageDemoDataList, writeSheet);

下面进入正题(以上操作很正常插入数据的操作是相同的)

package com.mixcloud.mall.ams.interceptor;import cn.hutool.core.util.ObjectUtil;
import com.alibaba.excel.metadata.Head;
import com.alibaba.excel.metadata.data.WriteCellData;
import com.alibaba.excel.write.handler.AbstractCellWriteHandler;
import com.alibaba.excel.write.handler.context.CellWriteHandlerContext;
import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;
import com.alibaba.excel.write.metadata.holder.WriteTableHolder;
import lombok.SneakyThrows;
import org.apache.commons.lang.BooleanUtils;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFDrawing;import java.net.URL;
import java.util.List;public class QuotationCustomCellWriteHandler extends AbstractCellWriteHandler {private int newWidthEMU;private int newHeightEMU;public QuotationCustomCellWriteHandler(int newWidthPixels, int newHeightPixels) {this.newWidthEMU = newWidthPixels;this.newHeightEMU = newHeightPixels;}@Overridepublic void beforeCellCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Row row, Head head, Integer columnIndex, Integer relativeRowIndex, Boolean isHead) {short height = 600;row.setHeight(height);}@SneakyThrows@Overridepublic void afterCellDispose(CellWriteHandlerContext context) {Cell cell = context.getCell();if (context.getOriginalValue().toString().contains("https://img-blog.csdnimg.cn/img_convert/ff9e522ef239408bb54947c4fe64ae0f.png?x-oss-process=image/resize,m_fixed,h_300,image/format,png")) {Sheet sheet = cell.getSheet();Drawing<?> drawingPatriarch = sheet.getDrawingPatriarch();if (drawingPatriarch instanceof XSSFDrawing) {XSSFDrawing xssfDrawing = (XSSFDrawing) drawingPatriarch;for (Shape shape : xssfDrawing.getShapes()) {if (shape instanceof Picture) {Picture picture = (Picture) shape;ClientAnchor anchor = picture.getClientAnchor();// 设置新的图片大小anchor.setDx1(newWidthEMU);anchor.setDy1(newHeightEMU);// 更新图片picture.resize();}}}}super.afterCellDispose(context);}}

这样拦截器就会在当中成功的调整图片的大小

补充:调整位置只需要对anchor进行设置即可,例如下面代码

// 调整图片的行位置
int newRow1 = anchor.getRow1() - 2; // 向上移动两行
int newRow2 = anchor.getRow2() - 2; // 向上移动两行// 设置新的行位置
anchor.setRow1(newRow1);
anchor.setRow2(newRow2);

即可对图片进行自由调整

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/809855.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AI写作软件哪个好?这4款好评如潮

在信息时代&#xff0c;AI技术的发展的日新月异&#xff0c;AI写作软件也因此诞生。特别是人们对于高效、便捷的写作工具需求日益增长&#xff0c;AI写作软件作为一种新兴的工具&#xff0c;在帮助人们提升写作效率、拓展创作思路方面发挥着越来越重要的作用。这些AI写作软件为…

C语言 函数——代码风格

目录 基本的代码规范 程序版式 对齐&#xff08;Alignment&#xff09;与缩进&#xff08;indent&#xff09; 变量的对齐规则 空行——分隔程序段落的作用 代码行内的空格——增强单行清晰度 代码行 长行拆分 标识符命名规则 标识符命名的共性规则 windows应用程序…

PostgreSQL入门到实战-第十八弹

PostgreSQL入门到实战 PostgreSQL中表连接操作(二)官网地址PostgreSQL概述PostgreSQL中表别名命令理论PostgreSQL中表别名命令实战更新计划 PostgreSQL中表连接操作(二) 了解PostgreSQL表别名及其实际应用程序。 官网地址 声明: 由于操作系统, 版本更新等原因, 文章所列内容…

19c数据库/dev/shm/过小导致pga内存不够

pga_aggregate_limit已经设置了120G&#xff0c;alert还是报内存不够 查询select * from v$pgastat&#xff0c;发现MGA占了80G内存 查看/dev/shm: 发现设置了7G&#xff0c;操作系统是512G&#xff0c;正常情况下/dev/shm应该是操作系统的一半&#xff0c;修改为250G后数据库…

微信小程序 django+nodejs电影院票务售票选座系统324kd

小程序Android端运行软件 微信开发者工具/hbuiderx uni-app框架&#xff1a;使用Vue.js开发跨平台应用的前端框架&#xff0c;编写一套代码&#xff0c;可编译到Android、小程序等平台。 前端&#xff1a;HTML5,CSS3 VUE 后端&#xff1a;java(springbootssm)/python(flaskdja…

vue3:菜单、标签页和面包屑联动效果

文章目录 1.整体思路2.实现过程 概要 提示&#xff1a;这里可以添加技术概要 例如&#xff1a; openAI 的 GPT 大模型的发展历程。 1.整体思路 在之前做的后台项目中&#xff0c;菜单、标签页和面包屑之间的联动&#xff0c;自己都是通过在路由前置守卫中&#xff0c;定义b…

微服务面试题二

1.什么是雪崩 微服务之间相互调用&#xff0c;因为调用链中的一个服务故障&#xff0c;引起整个链路都无法访问的情况。 如何解决雪崩&#xff1f; 超时处理&#xff1a;请求超时就返回错误信息&#xff0c;不会无休止等待仓壁模式&#xff1a;限定每个业务能使用的线程数&a…

WPS的JS宏如何批量实现文字的超链接

表格中需要对文字进行超链接&#xff0c;每个链接指引到不同的地址。例如&#xff1a; 实现如下表格中&#xff0c;文件名称超级链接到对应的文件路径上&#xff0c;点击对应的文件名称&#xff0c;即可打开对应的文件。 序号文件名称文件路径1变更申请与处理表.xls文档\系统…

$(obj)/%.bin: $(obj)/*

$(obj)/%.bin: $(obj)/*.bin 是一个Makefile规则&#xff0c;用于指定如何生成.bin文件。这里解释一下这个规则的各个部分&#xff1a; $(obj)/%.bin 是目标文件的模式。%代表任意长度的字符串&#xff0c;$(obj)是一个变量&#xff0c;通常用来表示对象文件的输出目录。例如&a…

第十三届蓝桥杯省赛大学B组编程题(c++)

D.刷题统计 二分(AC): 注意:二分时右边界 right 的确定 #include<iostream> using namespace std; long long a,b,n; bool check(long long x){long long tx/7;x%7;long long temp0;if(x<5) tempx*a;else temp5*a(x-5)*b;long long cntt*(5*a2*b)temp;return cnt&g…

MySOL之旅--------MySQL数据库基础( 2 )

本篇碎碎念:尽自己最大的努力,直到筋疲力尽为止,加油 今日份励志文案: 别人都在前进,我为什么要停下 目录 补上一条博客缺失的内容 常用数据类型 数值类型&#xff1a; 字符串类型&#xff1a; 日期/时间类型&#xff1a; 二进制类型&#xff1a; 其他类型&#xff1a; …

抖音小店入驻有什么条件?资金少,没经验的普通人做得起吗?

大家好&#xff0c;我是电商花花。 在直播电商的推动下&#xff0c;抖音小店独特的电商模式下吸引着众多的商家&#xff0c;吸引着一波又一波的创业者入驻&#xff0c;想要在抖音小店上开垦出属于自己的电商净土。 想要入驻抖音小店还需要一些条件&#xff0c;然后才能入驻成…

Python机器学习学习线路

随着人工智能技术的飞速发展&#xff0c;机器学习已经成为计算机科学领域的热门话题。Python&#xff0c;作为一门功能强大且易于上手的编程语言&#xff0c;成为学习机器学习的理想选择。本文将为您介绍一条Python机器学习的学习线路&#xff0c;帮助您逐步掌握机器学习的基础…

题目 3038: 马走日

题目描述: 马在中国象棋以日字形规则移动。 请编写一段程序&#xff0c;给定nm大小的棋盘&#xff0c;以及马的初始位置(x&#xff0c;y)&#xff0c;要求不能重复经过棋盘上的同一个点&#xff0c;计算马可以有多少途径遍历棋盘上的所有点。 代码: package lanqiao;import …

ARM/X86+FPGA轨道交通/工程车辆行业的解决方案

深圳推出首条无人驾驶地铁—深圳地铁20号线&#xff0c;可以说是深圳地铁的一次开创性的突破。智能交通不断突破的背后&#xff0c;需要很严格的硬件软件等控制系 统&#xff1b;地铁无人驾驶意味着信号系统、通信系统、综合监控系统、站台屏蔽门工程等项目必须严格执行验收。…

Vue3项目搭建及文件结构

一. Vue3项目搭建 # 安装Vue CLI npm install -g vue/cli# 通过Vue CLI创建项目&#xff1a; vue create my-vue3-project# 当问到你想要使用哪个版本的Vue时&#xff0c;选择Vue3 # 完成配置后&#xff0c;CLI会自动安装依赖并创建项目 # 最后&#xff0c;启动你的Vue3项目cd…

C++:弃值表达式

正文 有时候需要利用某些表达式的副作用来实现某些目的&#xff1a; #include <iostream> template <typename... Args> void print(const Args &...args) {Arr{0,(std::cout << args<< ,0)...}; } int main() {print("hello", 1, 2,…

2024.03.31 校招 实习 内推 面经

绿*泡*泡VX&#xff1a; neituijunsir 交流*裙 &#xff0c;内推/实习/校招汇总表格 1、自动驾驶一周资讯 -小米SU7上市24小时&#xff0c;大定达88898台&#xff1b;小鹏汽车正式进入德国市场&#xff1b;地平线递交港股上市申请 自动驾驶一周资讯 -小米SU7上市24小时&…

ping命令返回无法访问目标主机和请求超时浅析

在日常经常用ping命令测试网络是否通信正常&#xff0c;使用ping命令时也经常会遇到这两种情况&#xff0c;那么表示网络出现了问题。 1、请求超时的原因 可以看到“请求超时”没有收到任何回复。要知道&#xff0c;IP数据报是有生存时间的&#xff0c;当其生存时间为零时就会…

goproxy一键安装脚本(稳定易用的proxy软件)

goproxy 官网 https://goproxy.cn/ go语言开发的简单易用高性能proxy 软件 #!/bin/bash # time: 2021-05-11 17:47:39 # by: Chen ##执行脚本需要传入网络设备名 ##例&#xff1a;sh goproxy-install.sh eth0# 0.安装必须要的依赖 yum install wget -y || apt install wget -y…