当前位置: 首页 > news >正文

java使用word模板填充内容,再生成pdf

1.word模板填充内容

使用EasyPoi写入Word文档。

import cn.afterturn.easypoi.word.WordExportUtil;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
import org.apache.poi.xwpf.usermodel.XWPFDocument;import java.io.File;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;public class WriteWordtemplate {public static void main(String[] args) throws Exception {Map<String, Object> params = createDate();String sourceFile = "d:/temp/模版word3.docx";String targetFile = "d:/temp/输出结果3.docx";FileOutputStream fos = null;try {//获取模板文档File templateFile = new File(sourceFile);System.out.println(templateFile.getName());// 写入wordXWPFDocument doc = WordExportUtil.exportWord07(templateFile.getPath(), params);fos = FileUtils.openOutputStream(new File(targetFile));doc.write(fos);} catch (Exception e) {System.out.println(e);} finally {IOUtils.closeQuietly(fos);}}private static Map<String, Object> createDate() {//填充数据List<WordExportBatch> resultList = new ArrayList<>();WordExportBatch wordExport = new WordExportBatch();WordExportBatch wordExport1 = new WordExportBatch();wordExport.setCreateDate("2022/9/30");wordExport1.setCreateDate("2022/9/28");wordExport.setNumber("11");wordExport.setExMoneny("11");wordExport.setExFunc("支付宝");wordExport1.setNumber("15");wordExport.setAmount("1234.5");wordExport1.setAmount("2345.77");wordExport.setEndDate("2022/12/31");wordExport1.setEndDate("2022/11/30");wordExport.setType("支付宝");wordExport1.setType("微信");wordExport1.setExMoneny("22");wordExport1.setExFunc("微信");resultList.add(wordExport);resultList.add(wordExport1);//准备数据Map<String, Object> params = new HashMap<>();params.put("number", "112");params.put("amount", "1234.5");params.put("endDate", "2022/11/30");params.put("resultList", resultList);return params;}}

pom依赖可以参考https://blog.csdn.net/u011067966/article/details/134293480#comments_36351020

把word转换为pdf

word生成pdf的方法比较多,调研了常用的方式

  1. 一种方式是部署一台windowserver,对外提供接口来进行生成,能最大程度还原格式。
  2. 第二种方式就是利用jodconverter,会有少许的失真。

现在介绍的是基于jodconverter把word转换为PDF。首先引入jar包

        <dependency><groupId>org.jodconverter</groupId><artifactId>jodconverter-local</artifactId><version>4.2.2</version></dependency><dependency><groupId>org.jodconverter</groupId><artifactId>jodconverter-spring-boot-starter</artifactId><version>4.2.2</version></dependency>

在配置文件中加入如下配置

jodconverter:local:enabled: true             # 启用本地模式office-home: /opt/libreoffice7.5    # LibreOffice 的安装路径max-tasks-per-process: 10 # 每个 Office 进程处理的最大任务数port-numbers: 8202        # LibreOffice 后台服务使用的端口号,可修改

在处理类中注入,之所以使用@Lazy是因为加载的使用会报错,让它延迟加载。

 	@Lazy@Autowiredprivate DocumentConverter converter;public void wordConvertToPdf(File wordFile, File pdfFile) {try {logger.info("word转换pdf开始");converter.convert(wordFile).to(pdfFile).execute();logger.info("word转换pdf结束");} catch (Exception e) {logger.error("word转pdf异常", e);}}

后续使用

之前写过word模板生成段落和生成表格的段落。
结合起来就能生成相对完整的word了。后续如果需要盖章什么的直接拿生成的pdf文件就可以了。

相关文章:

java使用word模板填充内容,再生成pdf

1.word模板填充内容 使用EasyPoi写入Word文档。 import cn.afterturn.easypoi.word.WordExportUtil; import org.apache.commons.io.FileUtils; import org.apache.commons.io.IOUtils; import org.apache.poi.xwpf.usermodel.XWPFDocument;import java.io.File; import java…...

回归实战详细代码+解析:预测新冠感染人数

回归实战&#xff1a;预测新冠感染人数 先回顾下回归是个啥玩意 首先需要一组训练集&#xff0c;说人话就是通过一系列x[x1,x2…xn]通过神秘计算得到y的过程&#xff0c;当然人和机器现在都不知道什么计算是什么&#xff0c;这是一个黑箱。 黑箱比喻&#xff1a;把模型想象成自…...

AI人工智能机器学习之聚类分析

1、概要 本篇学习AI人工智能机器学习之聚类分析&#xff0c;以KMeans、AgglomerativeClustering、DBSCAN为例&#xff0c;从代码层面讲述机器学习中的聚类分析。 2、聚类分析 - 简介 聚类分析是一种无监督学习的方法&#xff0c;用于将数据集中的样本划分为不同的组&#xff…...

(下:补充——五个模型的理论基础)深度学习——图像分类篇章

目录 1.1 卷积神经网络基础 3.1 AlexNet网络结构详解与花分类数据集下载 4.1 VGG网络详解及感受野的计算 5.1 GoogLeNet网络详解 6.1 ResNet网络结构&#xff0c;BN以及迁移学习详解 总结&#xff08;可以直接看总结&#xff09; 1.1 卷积神经网络基础 视频讲解&#xf…...

使用Python自动生成图文并茂的网页分析报告

在数据分析中&#xff0c;不管是市场研究还是科学分析&#xff0c;经常需要使用Python进行数据分析并生成图表报告。一般使用Python生成和展示图表时都是使用matplotlib 库生成静态图片文件&#xff0c;这种方式不便之处是不方便跟动态文字段落结合在一起&#xff0c;也不方便分…...

uniapp-原生android插件开发摘要

uni-app在App侧的原生扩展插件&#xff0c;支持使用java、object-c等原生语言编写&#xff0c;从HBuilderX 3.6起&#xff0c;新增支持了使用uts来开发原生插件。 基础项目 UniPlugin-Hello-AS工程请在App离线SDK中查找 基础项目(App离线SDK)已经配置好了自定义插件所需要的…...

GIT工具学习【1】:基本操作

目录 0.本地代码分区1.配置自己的个人信息&#xff08;设置一次即可&#xff09;2.新建仓库3.提交代码到暂存区&#xff08;加入购物车&#xff09;4.从暂存区撤回&#xff08;不会改变工作区文件&#xff09;5.恢复指定版本&#xff08;会改变工作区文件&#xff09;5.1&#…...

《国密算法开发实战:从合规落地到性能优化》

前言 随着信息技术的飞速发展,信息安全已成为全球关注的焦点。在数字化时代,数据的保密性、完整性和可用性直接关系到国家、企业和个人的利益。为了保障信息安全,密码技术作为核心支撑,发挥着至关重要的作用。国密算法,即国家密码算法,是我国自主设计和推广的一系列密码…...

【语法】C++中string类中的两个问题及解答

贴主在学习string类时遇到过两个困扰我的问题&#xff0c;今天拿出来给大家分享一下我是如何解决的 一、扩容时capacity的增长问题 在string的capacity()接口中&#xff0c;调用的是这个string对象的容量(可以存多少个有效字符)&#xff0c;而size()是调用的string对象现在有…...

LeetCode-154. 寻找旋转排序数组中的最小值 II

1、题目描述&#xff1a; 已知一个长度为 n 的数组&#xff0c;预先按照升序排列&#xff0c;经由 1 到 n 次 旋转 后&#xff0c;得到输入数组。例如&#xff0c;原数组 nums [0,1,4,4,5,6,7] 在变化后可能得到&#xff1a; 若旋转 4 次&#xff0c;则可以得到 [4,5,6,7,0,…...

2.数据结构:1.Tire 字符串统计

1.Tire 字符串统计 #include<algorithm> #include<cstring> #include<iostream>using namespace std;const int N100010; int son[N][26];//至多 N 层&#xff0c;每一层至多 26 个节点&#xff08;字母&#xff09; int cnt[N];//字符串至多 N 个&#xff…...

C语言复习4:有关数组的基础常见算法

# 数组的常见算法 - 查找算法 1. 基本查找/顺序查找 2. 二分查找/折半查找 3. 插值查找 4. 分块查找 5. 哈希查找 6. 树表查找 7. 斐波那契查找 - 排序算法&#xff08;顾名思义&#xff0c;就是把没有顺序的…...

Ubuntu从零创建Hadoop集群

目录 前言 前提准备 1.设置网关和网段 2.查看虚拟机IP及检查网络 3.Ubuntu相关配置 镜像源配置 下载 vim编辑器 4.设置静态IP和SSH免密(可选) 设置静态IP SSH免密 5.JDK环境部署 6.Hadoop环境部署 7.配置 Hadoop 配置文件 HDFS集群规划 HDFS集群配置 1.配…...

GPIO概念

GPIO通用输入输出口 在芯片内部存在多个GPIO&#xff0c;每个GPIO用于管理多个芯片进行输入&#xff0c;输出工作 引脚电平 0v ~3.3v&#xff0c;部分引脚可容任5v 输出模式下可控制端口输出高低电平&#xff0c;可以驱动LED&#xff0c;控制蜂鸣器&#xff0c;模拟通信协议&a…...

Node.js, Bun, Deno 比较概述

以下是 Node.js、Bun 和 Deno 的对比分析 概览 对比维度Node.jsDenoBun首次发布200920202022创始人Ryan DahlRyan Dahl&#xff08;Node.js 原作者&#xff09;Jarred Sumner运行时引擎V8&#xff08;Chrome&#xff09;V8&#xff08;Chrome&#xff09;JavaScriptCore&#…...

C# 类库打包dll文件

目录 前言操作流程注意事项 前言 在C#中&#xff0c;有多种方式可以对代码进行加密&#xff0c;以保护源代码不被轻易查看或修改&#xff0c;这篇文章主要介绍将C# cs类文件加密为dll文件的方式进行保护。 操作流程 在 Visual Studio 中&#xff0c;选择“创建新项目”。 选…...

Linux中的UDP编程接口基本使用

UDP编程接口基本使用 本篇介绍 在前面网络基础部分已经介绍了网络的基本工作模式&#xff0c;有了这些理论基础之后&#xff0c;下面先从UDP编程开始从操作部分深入网络 在本篇中&#xff0c;主要考虑下面的内容&#xff1a; 创建并封装服务端&#xff1a;了解创建服务端的…...

RAG项目实战:金融问答系统

需求痛点 私有知识很多&#xff0c;如何让大模型只选择跟问题有关的知识进行参考呢&#xff1f; 需求分析 是否可以使用关键词匹配呢&#xff1f;以前的搜索主要使用关键词匹配&#xff0c;这个要求太高了&#xff0c;需要提前抽取准备好关键词&#xff0c;有点像以前SEO的工…...

大白话React第十一章React 相关的高级特性以及在实际项目中的应用优化

假设我们已经对 React 前端框架的性能和可扩展性评估有了一定了解&#xff0c;接下来的阶段可以深入学习 React 相关的高级特性以及在实际项目中的应用优化&#xff0c;以下是详细介绍及代码示例&#xff1a; 1. React 高级特性的深入学习 1.1 React 并发模式&#xff08;Con…...

虚拟机Linux操作(持续更新ing)

虚拟机操作(持续更新ing) 虚拟机基本操作(Linux) # Linux # 立刻关机 poweroff # 立刻关机&#xff0c;可以选择数字或者具体时间 shutdown -h now # 立刻重启&#xff0c;可以选择数字或者具体时间 shutdown -r now # 立刻重启 reboot # cd 切换目录,下面用根目录举例 cd /…...

ServerTrust 并非唯一

NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...

Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!

一、引言 在数据驱动的背景下&#xff0c;知识图谱凭借其高效的信息组织能力&#xff0c;正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合&#xff0c;探讨知识图谱开发的实现细节&#xff0c;帮助读者掌握该技术栈在实际项目中的落地方法。 …...

Matlab | matlab常用命令总结

常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...

三体问题详解

从物理学角度&#xff0c;三体问题之所以不稳定&#xff0c;是因为三个天体在万有引力作用下相互作用&#xff0c;形成一个非线性耦合系统。我们可以从牛顿经典力学出发&#xff0c;列出具体的运动方程&#xff0c;并说明为何这个系统本质上是混沌的&#xff0c;无法得到一般解…...

.Net Framework 4/C# 关键字(非常用,持续更新...)

一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...

Selenium常用函数介绍

目录 一&#xff0c;元素定位 1.1 cssSeector 1.2 xpath 二&#xff0c;操作测试对象 三&#xff0c;窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四&#xff0c;弹窗 五&#xff0c;等待 六&#xff0c;导航 七&#xff0c;文件上传 …...

Python 训练营打卡 Day 47

注意力热力图可视化 在day 46代码的基础上&#xff0c;对比不同卷积层热力图可视化的结果 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader import matplotlib.pypl…...

协议转换利器,profinet转ethercat网关的两大派系,各有千秋

随着工业以太网的发展&#xff0c;其高效、便捷、协议开放、易于冗余等诸多优点&#xff0c;被越来越多的工业现场所采用。西门子SIMATIC S7-1200/1500系列PLC集成有Profinet接口&#xff0c;具有实时性、开放性&#xff0c;使用TCP/IP和IT标准&#xff0c;符合基于工业以太网的…...

华为OD最新机试真题-数组组成的最小数字-OD统一考试(B卷)

题目描述 给定一个整型数组,请从该数组中选择3个元素 组成最小数字并输出 (如果数组长度小于3,则选择数组中所有元素来组成最小数字)。 输入描述 行用半角逗号分割的字符串记录的整型数组,0<数组长度<= 100,0<整数的取值范围<= 10000。 输出描述 由3个元素组成…...

Modbus RTU与Modbus TCP详解指南

目录 1. Modbus协议基础 1.1 什么是Modbus? 1.2 Modbus协议历史 1.3 Modbus协议族 1.4 Modbus通信模型 🎭 主从架构 🔄 请求响应模式 2. Modbus RTU详解 2.1 RTU是什么? 2.2 RTU物理层 🔌 连接方式 ⚡ 通信参数 2.3 RTU数据帧格式 📦 帧结构详解 🔍…...