怎么建设品牌网站/网络营销案例实例
-
java向Word模板中替换书签数据,插入图片,插入复选框,插入Word中表格的行数据,删除表格行数据
-
使用插件:spire.doc
-
创建工具类,上代码:
import com.spire.doc.Document; import com.spire.doc.Table; import com.spire.doc.TableCell; import com.spire.doc.TableRow; import com.spire.doc.documents.*; import com.spire.doc.fields.DocPicture; import com.spire.doc.fields.TextRange; import org.apache.commons.collections4.map.LinkedMap; import org.springframework.stereotype.Component;import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map;/*** 向插入Word数据工具类* @author yyds*/ @Component public class WordInsertDataUtil {/*** 根据书签向Word插入数据; type=1插入文本,type=2插入图片, type=3插入复选框。。。。* @param bookmarks* @param bookMarkDatas*/public void insertDataByBookmarks(Document doc, BookmarksNavigator bookmarks, List<Map<String, String>> bookMarkDatas){for (int i = 0; bookMarkDatas.size() > 0 && i < bookMarkDatas.size(); i++) {Map<String, String> bookMarkData = bookMarkDatas.get(i);if ("1".equals(bookMarkData.get("type"))){bookmarks.moveToBookmark(bookMarkData.get("bookMark"));bookmarks.replaceBookmarkContent(bookMarkData.get("value"), true);} else if ("2".equals(bookMarkData.get("type"))){bookmarks.moveToBookmark(bookMarkData.get("bookMark"));Paragraph para = new Paragraph(doc);//图片位置DocPicture picture = para.appendPicture(bookMarkData.get("picPath"));//图片高picture.setHeight(Float.parseFloat(bookMarkData.get("heigth")));//图片宽picture.setWidth(Float.parseFloat(bookMarkData.get("width")));picture.setTextWrappingStyle(TextWrappingStyle.Through);bookmarks.insertParagraph(para);} else if ("3".equals(bookMarkData.get("type"))){bookmarks.moveToBookmark(bookMarkData.get("bookMark"));bookmarks.replaceBookmarkContent(bookMarkData.get("value"), true);TextSelection selection = doc.findString(bookMarkData.get("check"),true,true);TextRange tr1 = selection.getAsOneRange();tr1.getCharacterFormat().setFontName("Wingdings");//除了16进制,也可以用10进制来表示这个符号,复选框打勾是82doc.replace(selection.getSelectedText(), "\uF0FE", true, true);} else if("4".equals(bookMarkData.get("type"))){bookmarks.moveToBookmark(bookMarkData.get("bookMark"));bookmarks.replaceBookmarkContent(bookMarkData.get("value"), true);TextSelection selection = doc.findString(bookMarkData.get("uncheck"),true,true);TextRange tr1 = selection.getAsOneRange();tr1.getCharacterFormat().setFontName("Wingdings");//除了16进制,也可以用10进制来表示这个符号,复选框打勾是82doc.replace(selection.getSelectedText(), "\uF0A8", true, true);}}}/*** 向Word中的表格插入行* @param table* @param dataList* @param startRow*/public void insertTable(Table table, List<String[]> dataList, int startRow){for (int i = startRow; i < startRow + dataList.size(); i++) {TableRow row = table.getRows().get(i - 1).deepClone();table.getRows().insert(i, row);TableRow jtcyRow = table.getRows().get(i);for (int j = 0; j < dataList.get(i - startRow).length; j++) {TableCell cell = jtcyRow.getCells().get(j);cell.getChildObjects().clear();TextRange range = cell.addParagraph().appendText(dataList.get(i - startRow)[j]);range.getOwnerParagraph().getFormat().setHorizontalAlignment(HorizontalAlignment.Center);range.getCharacterFormat().setFontName("宋体");range.getCharacterFormat().setFontSize(11);jtcyRow.getRowFormat().setHorizontalAlignment(RowAlignment.Center);jtcyRow.getCells().get(j).getCellFormat().setVerticalAlignment(VerticalAlignment.Middle);}}}/*** 删除行* @param table 表格* @param startRow 起始行* @param removeNum 删除几行*/public void removeTableRows(Table table, int startRow, int removeNum){for (int i = 0; i < removeNum; i++) {TableRow jtcyRow = table.getRows().get(startRow - 1);table.getRows().remove(jtcyRow);}}public Map<String, String> generalCheckBox(LinkedMap<String, String> dictMap, String bookMark, String checkValue){//todo 多选未开发List<String> valueList = Arrays.asList(checkValue.split(","));StringBuilder sbd = new StringBuilder();int startNum = 1;String checkSymbol = "";for(Map.Entry<String, String> entry : dictMap.entrySet()){String symbol = "symbol" + startNum;sbd.append(symbol);if (valueList.contains(entry.getValue())){checkSymbol = symbol;}startNum++;}Map<String, String> bookMarkMap = new HashMap<>();bookMarkMap.put("bookMark", bookMark);bookMarkMap.put("value", sbd.toString());bookMarkMap.put("type", "3");bookMarkMap.put("check", checkSymbol);return bookMarkMap;} }
-
使用方法(仅供参考,自行调试):
-
根据书签插入数据
//打开Word模板 Document doc = new Document(new FileInputStream(templatePath)); //获取所有书签 BookmarksNavigator bookmarks = new BookmarksNavigator(doc); //业务数据 List<Map<String, String>> bookMarkDatas = new ArrayList<>(); //年-插入文本 Map<String, String> nian = new HashMap<>(); nian.put("bookMark", "NIAN"); nian.put("value", bdcdjPermit2.getNian()); nian.put("type", "1"); bookMarkDatas.add(nian); //图片-插入图片 String tpPath = objectMap.get("TP").toString(); Map<String, String> tp = new HashMap<>(); tp.put("bookMark", "TP"); tp.put("picPath", tpPath); tp.put("heigth", "18"); tp.put("width", "13"); tp.put("type", "2"); bookMarkDatas.add(tp); //向Word模板中插入数据 wordInsertDataUtil.insertDataByBookmarks(doc, bookmarks, bookMarkDatas);
-
Word中插入表格
//打开Word模板 Document doc = new Document(new FileInputStream(templatePath)); //获取所有书签 BookmarksNavigator bookmarks = new BookmarksNavigator(doc); //获取第一个section Section section = doc.getSections().get(0);//获取表格 Table table = section.getTables().get(0); //业务数据 JSONObject result; //直接替换书签数据 bookmarks.moveToBookmark("TEST"); if (Utils.notEmpty(result.get("test"))) {bookmarks.replaceBookmarkContent(result.getString("test"), true); } //插入表格行的起始位置 int startNum = 22; //插入的行数 int insertNum = 0; //放表格数据列表 List<String[]> tableDataList = new ArrayList<>(); String[] insertData = {test, tset, etst, etts}; tableDataList.add(insertData); insertNum++; //插入行数据 wordInsertDataUtil.insertTable(table, dyDataList, startNum); //删除行数据 wordInsertDataUtil.removeTableRows(table, startNum, 1);
-
相关文章:

java向Word模板中替换书签数据,插入图片,插入复选框,插入Word中表格的行数据,删除表格行数据
java向Word模板中替换书签数据,插入图片,插入复选框,插入Word中表格的行数据,删除表格行数据 使用插件:spire.doc 创建工具类,上代码: import com.spire.doc.Document; import com.spire.doc.…...

Java基础知识快速盘点(二)
一,类型转换 隐式转换 将一个类型转换为另一个类型时,系统默认转换常量优化机制算术运算时类型的隐式转换(byte,short在算术运算时都会转换为int)char类型在进行运算时会根据其编码值进行运算 显式转换 二࿰…...

企业降本增效的催化剂:敏捷迭代
伴随着开源技术的大爆发,新一代的软件技术如雨后春笋般层出不穷。每家企业在硬件及软件开发上都有许多开源技术可选,目的还是在于提高效率,降低开发成本。 本篇文章,带大家了解下促进企业降本增效的重要理念:敏捷迭代…...

MySQL入门篇-MySQL高级窗口函数简介
备注:测试数据库版本为MySQL 8.0 这个blog我们来聊聊MySQL高级窗口函数 窗口函数在复杂查询以及数据仓库中应用得比较频繁 与sql打交道比较多的技术人员都需要掌握 如需要scott用户下建表及录入数据语句,可参考:scott建表及录入数据sql脚本 分析函数有3个基本组成…...

什么是 API(应用程序接口)?
API(应用程序接口)是一种软件中介,它允许两个不相关的应用程序相互通信。它就像一座桥梁,从一个程序接收请求或消息,然后将其传递给另一个程序,翻译消息并根据 API 的程序设计执行协议。API 几乎存在于我们…...

如何在外网访问内网的 Nginx 服务?
计算机业内人士对Nginx 并不陌生,它是一款轻量级的 Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,除了nginx外,类似的apache、tomcat、IIS这几种都是主流的中间件。 Nginx 是在 BSD-like 协议下发行的&…...

vue2中defineProperty和vue3中proxy区别
区别一:defineProperty 是对属性劫持,proxy 是对代理对象 下面我们针对一个对象使用不同的方式进行监听,看写法上有什么不同。 // 原始对象 const data {name: Jane,age: 21 }defineProperty defineProperty 只能劫持对象的某一个属性&…...

将bean注入Spring容器的五种方式
前言 我们在项目开发中都用到Spring,知道对象是交由Spring去管理。那么将一个对象加入到Spring容器中,有几种方法呢,我们来总结一下。 ComponentScan Component ComponentScan可以放在启动类上,指定要扫描的包路径;…...

C生万物 | 常量指针和指针常量的感性理解
文章目录📚引言✒常量指针🔍介绍与分析📰小结与记忆口诀✒指针常量🔍介绍与分析📰小结与记忆口诀👉一份凉皮所引发的故事👈总结与提炼📚引言 本文我们来说说大家很困惑的两个东西&am…...

python 打包工具 pyinstaller和Nuitka区别
1.1 使用需求 这次也是由于项目需要,要将python的代码转成exe的程序,在找了许久后,发现了2个都能对python项目打包的工具——pyintaller和nuitka。 这2个工具同时都能满足项目的需要: 隐藏源码。这里的pyinstaller是通过设置key来…...
Python解题 - CSDN周赛第28期
上一期周赛问哥因为在路上,无法参加,但还是抽空登上来看了一下题目。4道题都挺简单的,有点遗憾未能参加。不过即使参加了,手速也未必能挤进前十。 本期也是一样,感觉新增的题目都偏数学类,基本用不到所谓的…...

DNS记录类型有哪些,分别代表什么含义?
DNS解析将域名指向IP地址,是互联网中的一项重要服务。而由于业务场景不同,在设置DNS解析时,需要选择不同的记录类型。网站管理人员需要准确了解每一种DNS记录类型所代表的含义和用途,才能满足不同场景的解析需求。本文中科三方简单…...

ICLR 2022—你不应该错过的 10 篇论文(上)
CV - 计算机视觉 | ML - 机器学习 | RL - 强化学习 | NLP 自然语言处理 ICLR 2023已经放榜,但是今天我们先来回顾一下去年的ICLR 2022! ICLR 2022将于2022年 4 月 25 日星期一至 4 月 29 日星期五在线举行(连续第三年!…...

HydroD 实用教程(三)环境数据
目 录一、前言二、Location三、Wind Profile四、Directions五、Water5.1 Wave Spectrums5.2 Current Profile5.3 Frequency Set5.4 Phase Set5.5 Wave Height5.6 Regular Wave Set六、参考文献一、前言 SESAM (Super Element Structure Analysis Module)…...

第四章 统计机器学习
机器学习:从数据中学习知识; 原始数据中提取特征;学习映射函数f;通过映射函数f将原始数据映射到语义空间,即寻找数据和任务目标之间的关系; 机器学习: 监督学习:数据有标签&#x…...

Redis第一讲
目录 一、Redis01 1.1 NoSql 1.1.1 NoSql介绍 1.1.2 NoSql起源 1.1.3 NoSql的使用 1.2 常见NoSql数据库介绍 1.3 Redis简介 1.3.1 Redis介绍 1.3.2 Redis数据结构的多样性 1.3.3 Redis应用场景 1.4 Redis安装、配置以及使用 1.4.1 Redis安装的两种方式 1.4.2 Redi…...

Java面试题-消息队列
消息队列 1. 消息队列的使用场景 六字箴言:削峰、异步、解耦 削峰:接口请求在某个时间段内会出现峰值,服务器在达到峰值的情况下会奔溃;通过消息队列将请求进行分流、限流,确保服务器在正常环境下处理请求。异步&am…...

基于离散时间频率增益传感器的P级至M级PMU模型的实现(Matlab代码实现)
👨🎓个人主页:研学社的博客💥💥💞💞欢迎来到本博客❤️❤️💥💥🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密…...

9个相见恨晚的提升办公效率的网站!
推荐9个完全免费的神器网站,每一个都是功能强大,完全免费,良心好用,让你相见恨晚。 1:知犀思维导图 https://www.zhixi.com/ 知犀思维导图是一个完全免费的宝藏在线思维导图工具。它完全免费,界面简洁唯美…...

java的双亲委派模型-附源码分析
1、类加载器 1.1 类加载的概念 要了解双亲委派模型,首先我们需要知道java的类加载器。所谓类加载器就是通过一个类的全限定名来获取描述此类的二进制字节流,然后把这个字节流加载到虚拟机中,获取响应的java.lang.Class类的一个实例。我们把实…...

Docker 笔记
Docker docker pull redis:5.0 docker images [image:57DAAA3E-CC88-454B-B8AC-587E27C9CD3A-85324-0001A93C6707F2A4/93F703D2-5F44-49AB-83C7-05E2E22FB226.png] Docker有点类似于虚拟机 区别大概: docker:启动 Docker 相当于启动宿主操…...

用户认证-cookie和session
无状态&短链接 短链接的概念是指:将原本冗长的URL做一次“包装”,变成一个简洁可读的URL。 什么是短链接-> https://www.cnblogs.com/54chensongxia/p/11673522.html HTTP是一种无状态的协议 短链接:一次请求和一次响应之后&#…...

UUID的弊端以及雪花算法
目录 一、问题 为什么需要分布式全局唯一ID以及分布式ID的业务需求 ID生成规则部分硬性要求 ID号生成系统的可用性要求 二、一般通用方案 (一)UUID (二)数据库自增主键 (三)Redis生成全局id策略 三…...

使用netty+springboot打造的tcp长连接通讯方案
文章目录项目背景正文一、项目架构二、项目模块三、业务流程四、代码详解1.消息队列2.执行类3.客户端五、测试六、源码后记项目背景 最近公司某物联网项目需要使用socket长连接进行消息通讯,捣鼓了一版代码上线,结果BUG不断,本猿寝食难安&am…...

【正点原子FPGA连载】第十章PS SYSMON测量温度电压实验 摘自【正点原子】DFZU2EG_4EV MPSoC之嵌入式Vitis开发指南
1)实验平台:正点原子MPSoC开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id692450874670 3)全套实验源码手册视频下载地址: http://www.openedv.com/thread-340252-1-1.html 第十章PS SYSMON…...

AcWing《蓝桥杯集训·每日一题》—— 1460 我在哪?
AcWing《蓝桥杯集训每日一题》—— 1460. 我在哪? 文章目录AcWing《蓝桥杯集训每日一题》—— 1460. 我在哪?一、题目二、解题思路三、代码实现本次博客我是通过Notion软件写的,转md文件可能不太美观,大家可以去我的博客中查看&am…...

AcWing《蓝桥杯集训·每日一题》—— 3729 改变数组元素
AcWing《蓝桥杯集训每日一题》—— 3729. 改变数组元素 文章目录AcWing《蓝桥杯集训每日一题》—— 3729. 改变数组元素一、题目二、解题思路三、代码实现本次博客我是通过Notion软件写的,转md文件可能不太美观,大家可以去我的博客中查看:北天…...

如何熟练掌握Python在气象水文中的数据处理及绘图【免费教程】
pythonPython由荷兰数学和计算机科学研究学会的吉多范罗苏姆于1990年代初设计,作为一门叫做ABC语言的替代品。Python提供了高效的高级数据结构,还能简单有效地面向对象编程。Python语法和动态类型,以及解释型语言的本质,使它成为多…...

Leetcode详解JAVA版
目录1. 两数之和14. 最长公共前缀15. 三数之和18. 四数之和19. 删除链表的倒数第 N 个结点21. 合并两个有序链表28. 找出字符串中第一个匹配项的下标36. 有效的数独42. 接雨水43. 字符串相乘45. 跳跃游戏 II53. 最大子数组和54. 螺旋矩阵55. 跳跃游戏62. 不同路径70. 爬楼梯73.…...

LeetCode 83. 删除排序链表中的重复元素
原题链接 难度:easy\color{Green}{easy}easy 题目描述 给定一个已排序的链表的头 headheadhead , 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。 示例 1: 输入:head [1,1,2] 输出:…...