java 导出word模板

这篇博客介绍了如何在Java中使用FreeMarker模板引擎从Word XML文件生成模板,并通过Spring Boot和MyBatis Plus实现后台导出。前端部分使用Vue.js调用接口下载生成的Word文档。
摘要由CSDN通过智能技术生成

一、模板
模板样式:
这个是我自己用word手画的模板
第一步:在需要传入参数的地方写入参数
在这里插入图片描述
然后将word另存为xml文件。
第二步:用Notepad++打开(其他编辑器也可以,用着notepad因为方便编辑),然后将里面的参数修改成 “${参数}”这个样式,如下图
在这里插入图片描述
根据自己的所写入的参数,依次对比修改
第三步:保存,然后将XML文件的后缀,修改成ftl,这样模板就生成好了。
注意:不要在word中修改参数的形式,要在xml中修改,因为在word中修改,另存为xml的时候,参数会被分离或者丢失(我踩过的坑),一旦丢失或者分离,你就要重头再来一遍。

二、代码实现
第一步:后端代码实现
用的是freemarker导出的word,所以这个jar包可以之前去maven的仓库中去下载,也可以在pom.xml中写好依赖,然后直接更新
在这里插入图片描述
用的框架式spring boot + mybatis plus。
controller层的实现:
/**
* 下载word文档
*/
@GetMapping("/downLoadWord")
@ApiOperation(“下载word文档”)
@ApiImplicitParams({
@ApiImplicitParam(paramType = “query”, name = “marketId”, value = “商贸城id”, dataType = “String”),
@ApiImplicitParam(paramType = “query”, name = “shopCode”, value = “商铺编号”, dataType = “String”),
@ApiImplicitParam(paramType = “query”, name = “copyMeterDate”, value = “抄表时间”, dataType = “String”),
@ApiImplicitParam(paramType = “query”, name = “electricChargeState”, value = “mark”, dataType = “String”),
@ApiImplicitParam(paramType = “query”, name = “startDate”, value = “开始时间”, dataType = “String”),
@ApiImplicitParam(paramType = “query”, name = “endDate”, value = “结束时间”, dataType = “String”),
@ApiImplicitParam(paramType = “query”, name = “ids”, value = “ids”, dataType = “String”)
})
public R downLoadWord(
@RequestParam(name = “marketId”, required = false) String marketId,
@RequestParam(name = “shopCode”, required = false) String shopCode,
@RequestParam(name = “copyMeterDate”, required = false) String copyMeterDate,
@RequestParam(name = “electricChargeState”, required = false) String electricChargeState,
@RequestParam(name = “startDate”, required = false) String startDate,
@RequestParam(name = “endDate”, required = false) String endDate,
@RequestParam(name = “ids”, required = false) String ids,
HttpServletResponse resp
) throws Exception{
SimpleDateFormat sdt = new SimpleDateFormat(“yyyy-MM-dd”);
j = j+1;
int num = 0;
List list1 = new ArrayList();
if(ids == null || ids.equals("")) {
List list = new ArrayList();
if(startDate!=null&&!startDate.equals("")&&endDate!=null&&!endDate.equals("")) {
list = electricChargeService.list(
new QueryWrapper()
.eq(StringUtils.isNotBlank(marketId), “market_id”, marketId)
.eq(StringUtils.isNotBlank(co

导出 Word 模板并设置只读属性,可以使用 Apache POI 库中的 XWPF 模块。以下是一个简单的示例代码: ```java import java.io.FileOutputStream; import org.apache.poi.xwpf.usermodel.XWPFDocument; import org.apache.poi.xwpf.usermodel.XWPFParagraph; import org.apache.poi.xwpf.usermodel.XWPFRun; public class WordTemplateExporter { public static void main(String[] args) throws Exception { // 创建一个空白的 Word 文档对象 XWPFDocument document = new XWPFDocument(); // 创建一个段落对象,用于添加文本内容 XWPFParagraph paragraph = document.createParagraph(); // 创建一个文本对象,用于设置文本内容和样式 XWPFRun run = paragraph.createRun(); run.setText("这是一个只读模板"); run.setBold(true); run.setFontSize(16); // 将文档保存为只读模板 FileOutputStream fos = new FileOutputStream("template.docx"); document.enforceReadonlyProtection("password"); // 设置只读属性并设置密码 document.write(fos); fos.close(); // 关闭文档对象 document.close(); } } ``` 在上面的示例代码中,我们创建了一个空白的 Word 文档对象,然后添加了一个段落对象和文本对象,用于设置文本内容和样式。接着,我们通过 `enforceReadonlyProtection` 方法设置了只读属性,并为其设置了密码。最后,我们将文档保存到本地文件中,并关闭了文档对象。 需要注意的是,只读属性只是一种保护措施,无法完全防止用户对文档进行修改。如果需要更加安全的保护措施,可以考虑使用数字签名等技术。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值