Java查询数据放入word模板中并在前端导出下载

需求:查询数据放入word模板中并在前端导出下载

解决方法:在模板的位置定义参数如 {{name}}  {{age}}等等,使用 poi 处理

伪代码:

    @PostMapping("/practiceAppr")public AjaxResult practiceAppr(OutputStream outputStream, @RequestBody ExportToExcelParamDto paramDto) {//查询数据  ExportToWordByPracticeApprDto 为定义的模板中的参数ExportToWordByPracticeApprDto app= baseService.practiceApprExport(paramDto);try {//获取模板文件try (InputStream is = TrActivityGroupServiceImpl.class.getClassLoader().getResourceAsStream("word/导出模板A4.docx")) {try (XWPFDocument doc = new XWPFDocument(is)) {Map<String, Object> replaceMap = BeanUtil.beanToMap(app);Map<String, Object> resultMap = new HashMap<>();//word中的占位符格式是{{}}replaceMap.forEach((placeholder, replacement) -> resultMap.put("{{" + placeholder + "}}", replacement));//处理文件替换参数为实际值replacePlaceholders(doc, resultMap);doc.write(outputStream);outputStream.close();is.close();}}} catch (Exception e) {logger.error("文件导出错误{}", e.getMessage());}return null;}private void replacePlaceholders(XWPFDocument document, Map<String, Object> placeholders) throws IOException, InvalidFormatException {//处理普通word文字 不包含表格for (XWPFParagraph paragraph : document.getParagraphs()) {List<XWPFRun> runs = paragraph.getRuns();for (XWPFRun run : runs) {String text = run.getText(0);if (text != null) {for (Map.Entry<String, Object> entry : placeholders.entrySet()) {if (text.contains(entry.getKey())) {text = text.replace(entry.getKey(), entry.getValue() != null ? (String) entry.getValue() : "");run.setText(text, 0);}}}}}// 处理替换表格中的占位符for (XWPFTable table : document.getTables()) {for (XWPFTableRow row : table.getRows()) {for (XWPFTableCell cell : row.getTableCells()) {for (XWPFParagraph paragraph : cell.getParagraphs()) {List<XWPFRun> runs = paragraph.getRuns();for (XWPFRun run : runs) {String text = run.getText(0);if (text != null) {for (Map.Entry<String, Object> entry : placeholders.entrySet()) {if (text.contains(entry.getKey())) {//获取、处理图片略......int format = XWPFDocument.PICTURE_TYPE_PNG;//图片地址BufferedImage image = ImageIO.read(new URL(value));ByteArrayOutputStream outputStream = new ByteArrayOutputStream();//suffix为图片的后缀 .pngImageIO.write(image, suffix, outputStream);byte[] imageBytes = outputStream.toByteArray();//后两个参数是宽高run.addPicture(new ByteArrayInputStream(imageBytes), format, fileName, Units.toEMU(80), Units.toEMU(40));//替换文字  图片和文字如果都展示text = text.replace(entry.getKey(), entry.getValue() != null ? (String) entry.getValue() : "");run.setText(text, 0);}}}}}}}}}

最后前端处理进行下载即可。

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

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

相关文章

TensorFlow实战教程(十八)-Keras搭建卷积神经网络及CNN原理详解

从本专栏开始,作者正式研究Python深度学习、神经网络及人工智能相关知识。前一篇文章详细讲解了Keras实现分类学习,以MNIST数字图片为例进行讲解。本篇文章详细讲解了卷积神经网络CNN原理,并通过Keras编写CNN实现了MNIST分类学习案例。基础性文章,希望对您有所帮助! 一…

linux中实现自己的bash

&#x1f436;博主主页&#xff1a;ᰔᩚ. 一怀明月ꦿ ❤️‍&#x1f525;专栏系列&#xff1a;线性代数&#xff0c;C初学者入门训练&#xff0c;题解C&#xff0c;C的使用文章&#xff0c;「初学」C &#x1f525;座右铭&#xff1a;“不要等到什么都没有了&#xff0c;才下…

c语言编程题经典100例

以下是一些经典的C语言编程题目&#xff0c;这些题目可以帮助你提高C语言编程技能&#xff1a; 交换两个变量的值判断一个数是否为素数反转一个字符串计算一个数的阶乘计算一个数的平方计算一个数的立方计算一个数的对数计算一个数的倒数求一个数组中所有元素的和求一个数组中…

大语言模型领域的重要术语解释

前言 本人对人工智能非常感兴趣&#xff0c;目前是一名初学者&#xff0c;在研究大语言模型的一些内容。很多模型都是用英文提出的&#xff0c;其中也包括很多概念&#xff0c;有些概念的中文翻译和其想表达的意思不完全一样&#xff0c;所以在这里&#xff0c;想更加精准地帮…

vite vue3配置axios

准备 参考 安装axios yarn add axios中文官网 src下新建request文件夹&#xff0c;该文件下新建index.ts import axios from axios; import { ElMessage } from element-plus;// const errorCodeType function (code: number): string { // let errMessage: string 未知…

SAP的一些当说不说的常识

ABAP中的WDA与FRMbopf restful和odata postman软件 SAP中MM模块相关 SAP 物料 移动类型 https://www.cnblogs.com/rainysblog/p/4133259.html T移动类型文本含义一般用途T-code101GR 收货直接收货工单入库&#xff0c;购买成品入库MIGO/CO11N102用于PO冲销的收货冲销直接…

一阶低通滤波器(一阶巴特沃斯滤波器)

连续传递函数G(s) 离散传递函数G(z) 转换为差分方程形式 一阶巴特沃斯滤波器Filter Designer参数设计&#xff1a;参考之前的博客Matlab的Filter Designer工具设计二阶低通滤波器 设计采样频率100Hz&#xff0c;截止频率20Hz。 注意&#xff1a;设计参数使用在离散系统中&…

【性能测试】稳定性/并发压力测试的TPS计算+5W并发场景设计...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、稳定性测试TPS…

AI生成技术威胁版权保护,水印技术和法律完善是关键/安圭拉小岛以.ai域名注册赚得3000万美元 |魔法半周报

我有魔法✨为你劈开信息大海❗ 高效获取AIGC的热门事件&#x1f525;&#xff0c;更新AIGC的最新动态&#xff0c;生成相应的魔法简报&#xff0c;节省阅读时间&#x1f47b; &#x1f525;资讯预览 AI生成技术威胁版权保护&#xff0c;水印技术和法律完善是关键 Sam Altman对…

软件外包开发的验收流程

软件外包开发的验收流程是确保项目符合预期标准并满足客户需求的关键步骤。以下是一个通用的软件外包开发验收流程&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作。 1.明确验收标准&#xff1a; 在项目…

jmeter接口自动化部署jenkins教程详解

首先&#xff0c;保证本地安装并部署了jenkins&#xff0c;jmeter&#xff0c;xslproc 我搭建的自动化测试框架是jmeterjenkinsxslproc 注意&#xff1a;原理是&#xff0c;jmeter自生成的报告jtl文件&#xff0c;通过xslproc工具&#xff0c;再结合jmeter自带的模板修改&…

【C语言】条件变量(pthread_cond_t)

一、概述 条件变量(pthread_cond_t)是POSIX线程&#xff08;也称为pthread&#xff09;库中用于线程同步的一种机制。在多线程程序中&#xff0c;条件变量通常与互斥锁(pthread_mutex_t)一起使用&#xff0c;以防止并发问题&#xff0c;如竞态条件和死锁。 二、条件变量(pthre…

渲染器之挂载与更新

讲解渲染器的核心功能&#xff1a;挂载与更新。 1、挂载子节点和元素的属性 当 vnode.children 的值是字符串类型时&#xff0c;会把它设置为元素的文本内容。一个元素除了具有文本子节点外&#xff0c;还可以包含其他元素子节点&#xff0c;并且子节点可以是很多个。为了描述…

IonQ、Rigetti、D-Wave公布2023年第三季度财报!

近期&#xff0c;量子计算公司Rigetti、IonQ和D-Wave均公布了各自在2023年第三季度的盈利收益。 这三家公司在近期均实现了收入增长&#xff0c;并助力客户实现相应的业务增长。然而&#xff0c;在追求实现量子霸权和超越经典硅基计算机系统的同时&#xff0c;这些公司仍面临着…

ECharts零基础使用思路 图表案例网站推荐

1、用npm安装echarts npm i echarts -S 2、引入 &#xff08;1&#xff09;可以在mian.js里全局引入 import echarts from ‘echarts’ Vue.prototype.$echarts echarts 将echarts挂载在Vue原型上 用时直接this.$echarts即可 &#xff08;2&#xff09;也可以在组件中按需引入…

安卓毕业设计:基于安卓android微信小程序的在线医生答疑系统

项目介绍 在线医生答疑开发使系统能够更加方便快捷&#xff0c;同时也促使在线医生答疑变的更加系统化、有序化。系统界面较友好&#xff0c;易于操作。具体在系统设计上&#xff0c;客户端使用微信开发者&#xff0c;后台也使用java技术在动态页面上进行了设计&#xff0c;My…

音视频项目—基于FFmpeg和SDL的音视频播放器解析(十五)

介绍 在本系列&#xff0c;我打算花大篇幅讲解我的 gitee 项目音视频播放器&#xff0c;在这个项目&#xff0c;您可以学到音视频解封装&#xff0c;解码&#xff0c;SDL渲染相关的知识。您对源代码感兴趣的话&#xff0c;请查看基于FFmpeg和SDL的音视频播放器 如果您不理解本…

windows系统 phpstudy 安装 imagick 扩展

其他博客 https://blog.csdn.net/json_ligege/article/details/130227725 1. 下载 imagemagick.org 注意版本对应 官网 https://imagemagick.org/script/download.php#windows github地址 //老版本需要自己编译 https://github.com/ImageMagick/ImageMagick/releases 其他地址…

Linux C 基于tcp多线程在线聊天室

多线程在线聊天室 概述客户端服务端 概述 客户端实现了判单用户登录结果、防止单回车字符发送、保存和显示历史聊天记录&#xff08;仅自己&#xff09;、退出聊天室功能。   服务端实现了验证用户是否已经存在&#xff08;支持最大64用户连接&#xff09;支持广播用户进入退…

自定义类型转换函数operator MyInt()

/*** * 结论&#xff1a;对pass-by-value传参的常规调用&#xff0c;会用实参拷贝构造形参&#xff0c;实参与形参相互无影响&#xff1b; * 当对实参调用类型转换函数(返回形参类型)&#xff0c;编译器会优化代码使类型转换函数返回值直接构造在调用作用域的接受对象上 */ …