From a2b926f576590289356cffa1a9882b4097375a9b Mon Sep 17 00:00:00 2001 From: AntonyCheng <1911261716@qq.com> Date: Wed, 10 Apr 2024 17:42:05 +0800 Subject: [PATCH] =?UTF-8?q?SpringBoot=E5=88=9D=E5=A7=8B=E5=8C=96=E6=A8=A1?= =?UTF-8?q?=E6=9D=BFv2.1.4=20=E8=AE=BE=E8=AE=A1Apache=20POI=E6=93=8D?= =?UTF-8?q?=E4=BD=9CWord=E6=A8=A1=E5=9D=97=E5=8F=8A=E5=85=B6=E9=85=8D?= =?UTF-8?q?=E5=A5=97=E5=B7=A5=E5=85=B7=E7=B1=BB=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 14 ++++++++------ pom.xml | 6 +++--- .../controller/AuthController.java | 7 ------- .../document/word/file/readable.docx | Bin 639777 -> 641104 bytes .../document/word/file/temp.docx | Bin 569525 -> 569524 bytes .../utils/document/word/WordUtils.java | 13 +++++++++---- src/main/resources/knife4j/README.md | 15 +++++++++------ 7 files changed, 29 insertions(+), 26 deletions(-) diff --git a/README.md b/README.md index e014d950..e25eb528 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ > **作者:[AntonyCheng](https://github.com/AntonyCheng)** > -> **版本号:v2.1.3** +> **版本号:v2.1.4** > > **开源协议:[Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0.html)** @@ -89,7 +89,7 @@ - **MySQL** - mysql-connector-j 8.0.33 == Java 连接 MySQL 依赖 - druid-spring-boot-starter 1.2.22 == Druid 连接池 - - mybatis-plus-boot-starter 3.5.5 == MySQL 操作框架 + - mybatis-plus-boot-starter 3.5.6 == MySQL 操作框架 - shardingsphere-jdbc-core 5.3.2 == 分布式数据库解决方案 - **工具类** - lombok 1.18.32 == POJO 简化工具 @@ -100,12 +100,13 @@ - commons-pool2 2.12.0 == Apache Commons Pool 工具类 - commons-collections4 4.4 == Apache Commons Collections 工具类 - commons-math3 3.6.1 == Apache Commons Math 工具类 + - commons-compress 1.26.1 == Apache Commons Compress 工具类 - okhttp 4.12.0 == OK Http 工具类 - okio 3.9.0 == OK IO 工具类 - fastjson2 2.0.48 == Fast JSON 工具类 - ip2region 2.7.0 == 离线 IP 地址定位库 - **权限校验** - - sa-token-spring-boot-starter == SaToken 认证鉴权框架 + - sa-token-spring-boot-starter 1.37.0 == SaToken 认证鉴权框架 - sa-token-core 1.37.0 == SaToken 认证鉴权框架核心依赖 - sa-token-jwt 1.37.0 == SaToken 认证鉴权框架 JWT 依赖 - sa-token-redis-jackson 1.37.0 == SaToken 认证鉴权框架 Redis 依赖 @@ -124,11 +125,12 @@ - elasticsearch-rest-high-level-client 7.14.0 == ES 高级别客户端依赖 - logstash-logback-encoder 7.3 == Logstash 依赖 - **对象存储(OSS)** - - cos_api 5.6.208 == 腾讯云 COS + - cos_api 5.6.210 == 腾讯云 COS - aliyun-sdk-oss 3.17.4 == 阿里云 OSS - minio 8.5.9 == Minio 对象存储 - **文件操作** - poi 5.2.5 == 操作 Word + - poi-tl 1.12.2 == 操作 Word 模板 - easyexcel 3.3.4 == 操作 Excel - itext-core 8.0.3 == 操作 PDF - **接口文档 & API调试** @@ -161,7 +163,7 @@ - JSON 长整型精度处理 - 自动字段填充器 - 基于 Netty 的 WebSocket 全双工通信设计示例 -- 对象存储、消息队列、缓存、分布式锁、限流、国际化、网络、Excel 等工具类 +- 对象存储、消息队列、缓存、分布式锁、限流、国际化、网络、Excel、Word 等工具类 ## 业务功能 @@ -1450,7 +1452,7 @@ Deployer 只能监听一个 MySQL 的增量日志。 ## 下一步开发计划 -* 设计方便简单的操作 Office 以及 PDF 的工具类 +* 设计方便简单的操作 PDF 的工具类 * 集成 Prometheus 和 Grafana 监控报警平台(选做) * 集成 Apache SkyWalking 链路追踪(选做) * ...... \ No newline at end of file diff --git a/pom.xml b/pom.xml index 31d6d9c0..c90cd54b 100644 --- a/pom.xml +++ b/pom.xml @@ -12,7 +12,7 @@ top.sharehome spring-boot-init-template - 2.1.3 + 2.1.4 spring-boot-init-template spring-boot-init-template https://github.com/AntonyCheng/spring-boot-init-template @@ -59,7 +59,7 @@ 8.0.33 1.2.22 - 3.5.5 + 3.5.6 5.3.2 1.18.32 @@ -86,7 +86,7 @@ 7.3 2.0.0-beta7 - 5.6.208 + 5.6.210 3.17.4 2.3.1 1.1.1 diff --git a/src/main/java/top/sharehome/springbootinittemplate/controller/AuthController.java b/src/main/java/top/sharehome/springbootinittemplate/controller/AuthController.java index 24b0bd82..2b383d54 100644 --- a/src/main/java/top/sharehome/springbootinittemplate/controller/AuthController.java +++ b/src/main/java/top/sharehome/springbootinittemplate/controller/AuthController.java @@ -34,13 +34,6 @@ public class AuthController { @Resource private AuthService authService; - @GetMapping("/test") - @SaIgnore - public R test(HttpServletResponse response) { - ExcelUtils.exportTemplateHttpServletResponse("test", response); - return R.empty(); - } - /** * 注册 * todo 模板默认不使用该接口,但保留该接口,因为该模板中真实增加用户的接口应该是管理员增加用户 diff --git a/src/main/java/top/sharehome/springbootinittemplate/document/word/file/readable.docx b/src/main/java/top/sharehome/springbootinittemplate/document/word/file/readable.docx index fd8e2d7b3ae090667249920f1521e1c4be618645..90085cd60272ce05a9baeb34587fe15605b3170c 100644 GIT binary patch delta 12344 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 delta 10951 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 O3;*rzcRTp)>3;#Mkc=t- diff --git a/src/main/java/top/sharehome/springbootinittemplate/document/word/file/temp.docx b/src/main/java/top/sharehome/springbootinittemplate/document/word/file/temp.docx index df9c6e9f0f9257f9cdbfb27d5dbc845506009dd1..a2d0a64426410cc340adf5d7ddcb534f57860ec6 100644 GIT binary patch delta 1914 zcmZWq3pCX07XQy9{)!35n=l$3nPL_3i!Jzx92;z1RBo*F0g;G-09w z`5=%Q00@FWOb)$4B@%{^?v2SX9l68IgFlo3%m@UA{G(5&wMLG_yF0VEvc$%11l{Wj z891Iu)n*XzaV}n0M^|shmS{e0#k?mP?jJi!e2Q2GjM9!B?MtGo>BI&lywKY@(fO9_oCES9JNL3W+%#-0BnB*QT6^-e%X5`suvG+B`RX~T^$)3I|x&`$0V?_P*J8xAl?(zCk`8q3Ivhd(ydX?l$ zjOTnj?t>jR%vtrpQ{WQ=kw?hO6N)t4^5B+Okd$?VOP z?{zCX^nFIT=Y1rSX8Zo3>RX}l?`hFtrl7lhL=1~rI-*=&*+O)Qif|3sT4OPd&dt3M zn8sOF*ff4IgGwANcvR3psz%Oswmh49S*QEli)4N)IAYKGfEPqXhDo&gIfXFZQp2IQ zs+9|_8;)Nqo6GPVhDq)F?>9XmX|15!oyCfWDLwn*jtE|@L zKPJU>hsRgMvt=RU`ku!}=PE-M{myt|(YJle4@RStrYXm62L@d>7i3VHduPb!;q8Ll zVKty18QkgRhz?qI=@ae4zpftoc=LNZo?W(OT+@!$4{((5RA)kSg&QjT)5|lb>Ww0& zz5CE9*iCxZ*Bji+C!A_?^kCqW@B6qll=e0S{?oYtN5eft87;u7LemUt_m&u6xN@V? z$oNvs&@M`_LnwD0FE4ni(U#s%;hXbmvt0=)KqIA=;d$16x7-msRUi#|Bf+Du>HU{_1!tt@>|+C#F)xgZ@e1mP!Xq5 z5%&}drtq8gmAH!Mf4n0)0)m`@~^bW(~nXq_zz24B}q1Xq|JCO|9 zt=3zf!&hfjvd*9 z9r>PliDStdyj(aNN9!p*<$vLo*_VS^@c8~ZD;>(&dC;N-7{zWEzoSb7Cd2b{Cm?~Ua zbyAp@K~#J!XIRq?73evY>PBQ0szkJo9BKISX+%+ zO1AQe$0NG|XNwS&eYF_zE~sy+sJAAqC!|brAJy!cov3uFxF$71$vt>{P(b z%K_<-s+T*g8qh`VJgWii7novYKhsSgA0*}=YHC1v%DS4js$?^jBg952~cD!)`KQ; gZEvLK!*g!2_tyVUY=W#2gY5J5AVwj(29%ckC$iHu%>V!Z delta 1928 zcmZ9N3p|wh8pq$c81FE03A+q3h_Rzwa=#2l#BefHmZesr+?|n#YUXHV;;1Qumr>$V zqL@LJN$a+>t(i<(L?Yq1WRpv@gO)jC&ar*A_w#u^|L6I>&-?s;|L61hKktv@dJW@x z3KVYyQWXF}5Qxmks#6GuAtY;k66|ZK!(zgpZ2?v&!hn9{n0zX$HX!4 z2v_RZ{-t2gXN@lnaaqZqM0d{wP;k3)&)qurFr>*2+NqP-od|FBcH;WW2s8SD;ZbEtEfMK zOS77_q}D7t3U_Kw3xy$N>4vHpCY$%N{Q2%tZ;m?4=OO2)F4~UaQ7GqF7n@Z&b~+rV z*cx0()#|G&Y_j!3^`!6=mlwS%D%!m7oJsXRJxf6zHjq1O`|4rt!sNY&k46)sZr1;4 za(pRdZixLAp@egcy!yf!-8TQ^1w_T|$$h;ce7whCN@cUUX%k8DmIc3+JNH-?1^{&u z`&$R0u_{oV^%F9f?nETgKCX5tvJlL9ld$RT%ZCpymJGjKKFau~2}xk&BpUuy@qO}$ z!$yy@13Seny~2F_Rl0J>nHeXWUi;a!k`Cpp>#ugA$DiA%TX<-)6DNe1FguOS{N#`) zrmZftz5nHMq7CGA|80hfa1d!7;TwC3i?0H+mkPrYbN|7=PbYU=%e1JxY$$l&nRh@h zgq@O0d=|b=+L>sAPD}D}xn{dOkEtt>zsNnce&nKAID+P3H`^ox$kEuDL#Q2=FFG>) zbx1vhj^(_!JcrgQX;J8waxm?PIBBuV;0}aVeQL6w8v=5m`vU)|65rZ@p+6J+ z#zY0?4)AuLP^+Abo&Mzuo#$Wo+kYSQDRAA3t5HQQ|5uXAUqIR<`TUxhNlobsdYQBw5$RQzse6W<~Z*00!xuu5Z|HR!vFJ#@FB`(-0u_+oc_u~lAvsR^gApbQg@Pf-yBC<_7ai>e=oN8N1f4zJjBXkt-xRLdMI>1EZ(2nobY9aoq-NE$LG4c*&D z5uG*nMoRsefqw|NyK-K-0r5LNIc_XCw5==erCdLN8BvOAF`EnQy5^bRxIb66Xqc4q zQrF|jqi)5}m`ait^A4*r37pE#oE#M%Rph3m7DuJMt8esePF;2vnVKGJzVN|~PcN4@ zWwsJewl|DD{YiP8RVe*$AXC+~h^x7G#CzMUY{*qp>561|HT%J+cX&OHVxi|-G+vYJT{z{$400rY$F`RWW!~6 zy%h-AwZ9n5inm#cbR&EQ){K+gNQuetPIjXxjL$D@c*BQe8^S*WTVBIMS^V;6U{@a} zx4I&YC8MfV>aeOoqSWcH2Cb!z0ta+JOSA_{2OZ?c0jxUA^i0=~*&;Y_x5H4^;812{xu!_^_B8W5wqC2Fc-v3EBC0G>F0xkr5! zNU&L2n?3^)Kt?C(mjg9zwfHK3j}t#IAk5DEu?_48jAyLJo(bxP8tQV6vY zDbbxM2vrN}Nmay;Wvjee0f15!*cbJAjgV*U|4$Y#`3}|(W!HiRs7uwLq!a%I#HKXh diff --git a/src/main/java/top/sharehome/springbootinittemplate/utils/document/word/WordUtils.java b/src/main/java/top/sharehome/springbootinittemplate/utils/document/word/WordUtils.java index ce17e9bf..ad3207c0 100644 --- a/src/main/java/top/sharehome/springbootinittemplate/utils/document/word/WordUtils.java +++ b/src/main/java/top/sharehome/springbootinittemplate/utils/document/word/WordUtils.java @@ -702,11 +702,12 @@ public static Map getTablesText(InputStream inputStream) { * 从Word数据流中获取段落Byte[] * * @param inputStream Word数据流 - * @return 返回图片Byte[]集合 + * @return 返回段落Byte[]集合 */ private static List getParagraphs(InputStream inputStream) { try (XWPFDocument doc = new XWPFDocument(inputStream); inputStream) { - return doc.getParagraphs().stream() + return doc.getParagraphs() + .stream() .map(paragraph -> paragraph.getText().getBytes()) .filter(ObjectUtils::isNotEmpty) .collect(Collectors.toList()); @@ -723,7 +724,10 @@ private static List getParagraphs(InputStream inputStream) { */ private static List getPictures(InputStream inputStream) { try (XWPFDocument doc = new XWPFDocument(inputStream); inputStream) { - return doc.getAllPictures().stream().map(XWPFPictureData::getData).collect(Collectors.toList()); + return doc.getAllPictures() + .stream() + .map(XWPFPictureData::getData) + .collect(Collectors.toList()); } catch (IOException e) { throw new CustomizeReturnException(ReturnCode.WORD_FILE_ERROR); } @@ -734,7 +738,7 @@ private static List getPictures(InputStream inputStream) { * 注意:封装后得到xlsx文件不支持“合并”或者“拆分”的表格,即要求表格每行的列数和每列的行数均相同,否则导出得到的表格会不尽人意,如有这样的需求请使用getTablesText()拿到文本数据后自行填充 * * @param inputStream Word输入流 - * @return 返回Word中所有表格数据,每个表格均封装成Map,key值为行号,从0开始,value为该行每个单元格内容,最后所有Map装进List中返回 + * @return 返回XLSX文件byte[]集合 */ private static List getTables(InputStream inputStream, ExcelTypeEnum excelType) { try (XWPFDocument doc = new XWPFDocument(inputStream); inputStream) { @@ -800,6 +804,7 @@ private static void handleZipResponse(String fileName, HttpServletResponse respo response.setHeader("download-filename", encodeName); response.setContentType("application/x-zip-compressed;charset=UTF-8"); } + } /** diff --git a/src/main/resources/knife4j/README.md b/src/main/resources/knife4j/README.md index 3e6bdf3e..976448af 100644 --- a/src/main/resources/knife4j/README.md +++ b/src/main/resources/knife4j/README.md @@ -1,6 +1,6 @@ > **作者:[AntonyCheng](https://github.com/AntonyCheng)** > -> **版本号:v2.1.3** +> **版本号:v2.1.4** > > **开源协议:[Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0.html)** @@ -56,6 +56,7 @@ * [搭建Deployer&Client系统](#搭建deployerclient系统) * [兼容Java8](#兼容java8) * [申明&联系我](#申明联系我) + * [模板预览](#模板预览) * [下一步开发计划](#下一步开发计划) ## 模板特点 @@ -82,7 +83,7 @@ - **MySQL** - mysql-connector-j 8.0.33 == Java 连接 MySQL 依赖 - druid-spring-boot-starter 1.2.22 == Druid 连接池 - - mybatis-plus-boot-starter 3.5.5 == MySQL 操作框架 + - mybatis-plus-boot-starter 3.5.6 == MySQL 操作框架 - shardingsphere-jdbc-core 5.3.2 == 分布式数据库解决方案 - **工具类** - lombok 1.18.32 == POJO 简化工具 @@ -93,12 +94,13 @@ - commons-pool2 2.12.0 == Apache Commons Pool 工具类 - commons-collections4 4.4 == Apache Commons Collections 工具类 - commons-math3 3.6.1 == Apache Commons Math 工具类 + - commons-compress 1.26.1 == Apache Commons Compress 工具类 - okhttp 4.12.0 == OK Http 工具类 - okio 3.9.0 == OK IO 工具类 - fastjson2 2.0.48 == Fast JSON 工具类 - ip2region 2.7.0 == 离线 IP 地址定位库 - **权限校验** - - sa-token-spring-boot-starter == SaToken 认证鉴权框架 + - sa-token-spring-boot-starter 1.37.0 == SaToken 认证鉴权框架 - sa-token-core 1.37.0 == SaToken 认证鉴权框架核心依赖 - sa-token-jwt 1.37.0 == SaToken 认证鉴权框架 JWT 依赖 - sa-token-redis-jackson 1.37.0 == SaToken 认证鉴权框架 Redis 依赖 @@ -117,11 +119,12 @@ - elasticsearch-rest-high-level-client 7.14.0 == ES 高级别客户端依赖 - logstash-logback-encoder 7.3 == Logstash 依赖 - **对象存储(OSS)** - - cos_api 5.6.208 == 腾讯云 COS + - cos_api 5.6.210 == 腾讯云 COS - aliyun-sdk-oss 3.17.4 == 阿里云 OSS - minio 8.5.9 == Minio 对象存储 - **文件操作** - poi 5.2.5 == 操作 Word + - poi-tl 1.12.2 == 操作 Word 模板 - easyexcel 3.3.4 == 操作 Excel - itext-core 8.0.3 == 操作 PDF - **接口文档 & API调试** @@ -154,7 +157,7 @@ - JSON 长整型精度处理 - 自动字段填充器 - 基于 Netty 的 WebSocket 全双工通信设计示例 -- 对象存储、消息队列、缓存、分布式锁、限流、国际化、网络、Excel 等工具类 +- 对象存储、消息队列、缓存、分布式锁、限流、国际化、网络、Excel、Word 等工具类 ## 业务功能 @@ -1403,7 +1406,7 @@ Deployer 只能监听一个 MySQL 的增量日志。 ## 下一步开发计划 -* 设计方便简单的操作 Office 以及 PDF 的工具类 +* 设计方便简单的操作 PDF 的工具类 * 集成 Prometheus 和 Grafana 监控报警平台(选做) * 集成 Apache SkyWalking 链路追踪(选做) * ...... \ No newline at end of file