教你如何用Java替换Word中带有${}的内容

一、概述

1、因为有些需求,需要把word文档里面的特定数据,设置成可变的;所以需要某种方式,把可变量用标签(如${变量名})替换,通过后端赋值此变量名,重新生成的Word就能根据后端设置的内容变化。

2、替换方法:准备一份word模板文档,如:word_mode.doc(或 word_mode.docx) 文件,把可变内容,用标签${变量名}替换(如图1姓名:${name})

3、转成可读模板:全部设置完变量标签后,对此word文档进行另存为xml格式的文档(图2),保存后的文件名:word_mode.xml(即用户信息.xml)。再通过修改后缀名,最终生成模板(用于替换标签的):word_mode.ftl

4、word_mode.ftl文件中,生成的标签名可能被样式隔开,需要手工处理下,如图3(处理前),图4(处理后)

 

5、对于生成的ftl文件,使用Notepad++进行xml格式化下,有利于处理EL表达式标签分开的问题。如果有图片的话,格式化后,无法正常显示,可以看看图片的BASE64码最后面与标签是否隔开,如果是可去掉空格。

如果还不行的话,找格式化之前的BASE64内容替换格式化后的图片BASE64的内容,这应该就没有问题。

 

二、处理含List的内容

2.1概述

有多个用户信息,需要显示出来,如图所示,word文档处理可变内容。

2.2处理方式

因为第一行是字段说明不可变,第二行是可变参数,根据List的多少而改变的,可在word_mode.ftl中添加<#list></#list>标签,如图5(开头),图6(结尾)

 

三、程序处理

3.1引入pom.xml

<!-- 导出word文档 -->
<dependency>
	<groupId>org.freemarker</groupId>
	<artifactId>freemarker</artifactId>
	<version>2.3.23</version>
</dependency>

3.2实体bean:UserBean

public class UserBean {
	private String username;
	private String userAge;
	private String userHigh;
	private String userSex;

	public UserBean(String username, String userAge, String userHigh, String userSex) {
		this.username = username;
		this.userAge = userAge;
		this.userHigh = userHigh;
		this.userSex = userSex;
	}
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String getUserAge() {
		return userAge;
	}
	public void setUserAge(String userAge) {
		this.userAge = userAge;
	}
	public String getUserHigh() {
		return userHigh;
	}
	public void setUserHigh(String userHigh) {
		this.userHigh = userHigh;
	}
	public String getUserSex() {
		return userSex;
	}
	public void setUserSex(String userSex) {
		this.userSex = userSex;
	}
}

3.3替换工具类:WordUtils

package com.jtr.hutool.main;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.jtr.hutool.bean.UserBean;

import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;
import freemarker.template.Version;

public class WordUtils {
	/** 设置使用的编码格式 */
	private static final String CHARSET = "UTF-8";
	/** 设置使用的版本 */
	private static final String VERSION = "2.3.0";

	public static void main(String[] args) {
		downloadWord("C:\\Users\\Think\\Desktop\\temp\\", "word_mode.ftl");
	}

	public static void downloadWord(String wordModePath, String wordModeFile) {
		try {
			// 1. 获取替换参数
			Map<String, Object> wordData = initWordMap();

			// 2. 设置配置内容
			// 设置版本
			Configuration configuration = new Configuration(new Version(VERSION));
			// 指定加载Word模板的路径
			configuration.setDirectoryForTemplateLoading(new File(wordModePath));
			// 以UTF-8的编码格式,读取模板文档
			Template template = configuration.getTemplate(wordModeFile, CHARSET);

			// 3. 输出文档路径及名称
			File outFile = new File(wordModePath + wordData.get("username") + "_员工信息.doc");
			Writer writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile), CHARSET), 10240);
			// 输出
			template.process(wordData, writer);
			writer.flush();
			writer.close();
			System.out.println("员工信息导出已完成");

		} catch (TemplateException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	private static Map<String, Object> initWordMap() {
		List<UserBean> userList = new ArrayList<UserBean>();
		userList.add(new UserBean("用户1", "10", "171", "男"));
		userList.add(new UserBean("用户2", "20", "172", "女"));
		userList.add(new UserBean("用户3", "30", "173", "男"));
		userList.add(new UserBean("用户4", "40", "174", "女"));
		userList.add(new UserBean("用户3", "50", "175", "男"));

		Map<String, Object> wordData = new HashMap<String, Object>();
		wordData.put("name", "作者1");
		wordData.put("age", "60");
		wordData.put("high", "177");
		wordData.put("userList", userList);

		return wordData;
	}

到此这篇关于教你如何用Java替换Word中带有${}的内容的文章就介绍到这了,更多相关java替换Word中带有${}的内容内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 如何利用JAVA正则表达式轻松替换JSON中的大字段

    (一)背景 在软件开发工作中我们经常用JSON来传输数据,根据业务需要不免会在JSON数据中传输比较大的数据,有时传输一个图片数据会达到几百K或者几M,而这些大字段数据在记录日志时,不论是文件日志还是数据库日志,都会造成大量的IO处理,使接口的响应速度大幅下降,同时会增加服务的负载,降低系统的性能.这时我们可以选择不输出这个JSON数据,但往往这样会造成更大的问题,因此我们会想如果只不输出大字段数据,而其他数据正常输出就好了,但从技术上往往不易实现.本文就是给大家提供一种方法,利用JAVA的正则

  • Java 在 Word 文档中使用新文本替换指定文本的方法

    创作一份文案,经常会高频率地使用某些词汇,如地名.人名.人物职位等,若表述有误,就需要整体撤换.文本将介绍如何使用Spire.Doc for Java,在Java程序中对Word文档中的指定文本进行替换. 工具/原料 Free Spire.Doc for Java(免费版) IntelliJ IDEA Jar文件获取及导入 方法1:先从官网下载jar包. 导入步骤: 下载后,解压文件,并将lib文件夹下的Spire.Doc.jar文件导入java程序.参考如下导入效果: 方法2:可通过maven

  • Java利用StringBuffer替换特殊字符的方法实现

    在本实例中为保证学生输入的 Java 文件名合格,将利用 StringBuffer 类实现对 Java 文件名中的特殊符号进行替换,包括将中文状态下的"."和全角状态下的"."替换为英文状态下的".". 在本例实现过程中主要使用了 StringBuffer 类的字符查找和替换方法,实现代码如下: import java.util.Scanner; public class test2 { public static void main(Strin

  • Java 替换word文档文字并指定位置插入图片

    先说下 需要的依赖包 <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-excelant</artifactId> <version>3.12</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <arti

  • java 查找替换pdf中的指定文本

    本文介绍通过Java程序批量替换PDF中的指定文本内容. 程序环境准备如下: 程序使用环境如图,需要注意的是,本文使用了免费版的PDF jar工具:另外JDK版本建议使用高版本更佳. jar文件导入后,可调用Spire.PDF提供的接口.方法等操作PDF,参考如下导入结果: 注:可手动下载jar包.下载后,解压文件,将lib文件夹下的Spire.Pdf.jar文件导入Java程序. Java 代码示例 import com.spire.pdf.*; import com.spire.pdf.ge

  • Java 添加、删除、替换、格式化Word中的文本的步骤详解(基于Spire.Cloud.SDK for Java)

    Spire.Cloud.SDK for Java提供了TextRangesApi接口可通过addTextRange()添加文本.deleteTextRange()删除文本.updateTextRangeText()替换文本.updateTextRangeFormat()格式化文本等.本文将从以上方法介绍如何来实现对文本的操作.可参考以下步骤进行准备: 一.导入jar文件 创建Maven项目程序,通过maven仓库下载导入.以IDEA为例,新建Maven项目,在pom.xml文件中配置maven仓

  • java 替换docx文件中的字符串方法实现

    替换docx文件里面的 ${} 字符串 public class Main { public static void main(String[] args) throws Exception { String template = "C:\\Users\\lzh\\Desktop\\模板.docx"; String outSrc = "C:\\Users\\lzh\\Desktop\\简历.docx"; var is = new FileInputStream(te

  • 教你如何用Java替换Word中带有${}的内容

    一.概述 1.因为有些需求,需要把word文档里面的特定数据,设置成可变的:所以需要某种方式,把可变量用标签(如${变量名})替换,通过后端赋值此变量名,重新生成的Word就能根据后端设置的内容变化. 2.替换方法:准备一份word模板文档,如:word_mode.doc(或 word_mode.docx) 文件,把可变内容,用标签${变量名}替换(如图1姓名:${name}) 3.转成可读模板:全部设置完变量标签后,对此word文档进行另存为xml格式的文档(图2),保存后的文件名:word_

  • Java实现替换Word中文本和图片功能

    目录 前言 1.指定字符串内容替换文本 2.获取文档内容替换文本 3.图片替换文本 4.图片替换图片 前言 Word中的替换功能以查找指定文本然后替换为新的文本,可单个替换或全部替换.以下将要介绍的内容,除常见的以文本替换文本外,还将介绍使用不同对象进行替换的方法,具体可包括: 1. 指定字符串内容替换文本(通过方法replce(matchString, newValue, caseSensitive, wholeWord );直接指定替换的新字符串内容) 2. 获取文档内容替换文本(通过方法r

  • 教你如何用Java根据日期生成流水号

    前言 生成流水号,在企业中可以说是比较常见的需求,尤其是订单类业务. 一般来说,需要保证流水号的唯一性. 如果没有长度和字符的限制,那么直接使用UUID生成一个唯一字符串即可,也可以直接使用数据库表中的主键,主键就是唯一的. 那么,如果限制了流水号必须多少位,这种怎么生成呢? 可以采用"前缀+日期+数字"的方式(ps:此方式是需要用到缓存的) 前缀:为了更好的标识这个流水号是属于哪种类型: 日期:为了防止重复: 数字:为了表示当前的流水所处序号. 需求:生成一个17位数的唯一流水号,&

  • 教你如何用Java简单爬取WebMagic

    一.Java爬虫--WebMagic 1.1 WebMagic总体架构图 1.2 WebMagic核心组件 1.2.1 Downloader 该组件负责从互联网上下载页面.WebMagic默认使用Apache HttpClient作为下载工具. 1.2.2 PageProcessor 该组件负责解析页面,根据我们的业务进行抽取信息.WebMagic使用Jsoup作为HTML解析工具,并基于其开发了解析Xpath的工具Xsoup. 1.2.3 Scheduler 该组件负责管理待抓取的URL,以及

  • Java 获取Word中所有的插入和删除修订的方法

    目录 ​​引入Jar​​ ​​方法1​​ ​​方法2​​ ​​获取插入.删除的修订​​ 在 Word 文档中启用跟踪更改功能后,会记录文档中的所有编辑行为,例如插入.删除.替换和格式更改.对插入或删除的内容,可通过本文中介绍的方法来获取. ​​引入Jar​​ ​​方法1​​ 手动引入:将Free Spire.Doc for Java下载到本地,解压,找到lib文件夹下的Spire.Doc.jar文件.在IDEA中打开如下界面,将本地路径中的jar文件引入Java程序:​ ​​方法2​​ 通过Ma

  • python实现替换word中的关键文字(使用通配符)

    环境:Python3.6 本文主要是通过win32com操作word,对word中进行常用的操作.本文以替换为例,讲解一下如何使用Python在word中使用"通配符模式"(类似于正则表达式)替换文本内容. #!/usr/bin/env python # -*- coding:utf-8 -*- import os import win32com from win32com.client import Dispatch # 处理Word文档的类 class RemoteWord:  

  • Java在Word中添加多行图片水印

    Word中设置水印效果时,不论是文本水印或者是图片水印都只能添加单个文字或者图片到Word页面,效果比较单一,本文通过Java代码示例介绍如何在页面中添加多行图片水印效果,即水印效果以多个图片平铺到页面.(添加多行文字水印效果,可以查看这篇文章中的方法) 程序环境:使用spire.doc.jar,版本:3.9.0 Java代码: import com.spire.doc.*; import com.spire.doc.documents.Paragraph; import com.spire.d

  • Java 在Word中创建邮件合并模板并合并文本和图片的操作方法

    Word里面的邮件合并功能是一种可以快速批量操作同类型数据的方式,常见的如数据填充.打印等.其中必不可少的步骤包括用于填充的模板文档.填充的数据源以及实现邮件合并的功能.下面,通过Java程序展示如何来实现创建模板,并通过邮件合并功能来合并文本数据和图片数据的方法,分别以2个示例来展示,即: 1. 创建Word填充模板 2. 邮件合并文本和图片 本次程序运行环境如下: 代码编译工具:IDEA Jdk版本:1.8.0 Word测试文档:.docx 2013 Word jar包工具:Free Spi

  • PHP替换Word中变量并导出PDF图片的实现方法

    在线生成合同信息,一个 word 文件里面有些信息需要通过数据库读取计算出并填写到 word 文档中最终显示在线 pdf 预览功能,接下来我交大家如果实现该需求 2.接下来实现如何替换文档内容 我们新建一个 aa.docx 的文档,里面放了一个变量信息 3.接下来使用 php 来替换这个变量信息 代码如下 ... use PhpOffice\PhpWord\TemplateProcessor; ... $path = storage_path('aa.docx'); // 生成world 存放目

随机推荐