欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

教你如何用Java替換Word中帶有${}的內(nèi)容

 更新時(shí)間:2021年04月19日 08:51:34   作者:程序員的微笑  
這篇文章主要介紹了教你如何用Java替換Word中帶有${}的內(nèi)容,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)java的小伙伴們有很好的幫助,需要的朋友可以參考下

一、概述

1、因?yàn)橛行┬枨?,需要把word文檔里面的特定數(shù)據(jù),設(shè)置成可變的;所以需要某種方式,把可變量用標(biāo)簽(如${變量名})替換,通過(guò)后端賦值此變量名,重新生成的Word就能根據(jù)后端設(shè)置的內(nèi)容變化。

2、替換方法:準(zhǔn)備一份word模板文檔,如:word_mode.doc(或 word_mode.docx) 文件,把可變內(nèi)容,用標(biāo)簽${變量名}替換(如圖1姓名:${name})

3、轉(zhuǎn)成可讀模板:全部設(shè)置完變量標(biāo)簽后,對(duì)此word文檔進(jìn)行另存為xml格式的文檔(圖2),保存后的文件名:word_mode.xml(即用戶信息.xml)。再通過(guò)修改后綴名,最終生成模板(用于替換標(biāo)簽的):word_mode.ftl

4、word_mode.ftl文件中,生成的標(biāo)簽名可能被樣式隔開,需要手工處理下,如圖3(處理前),圖4(處理后)

 

5、對(duì)于生成的ftl文件,使用Notepad++進(jìn)行xml格式化下,有利于處理EL表達(dá)式標(biāo)簽分開的問(wèn)題。如果有圖片的話,格式化后,無(wú)法正常顯示,可以看看圖片的BASE64碼最后面與標(biāo)簽是否隔開,如果是可去掉空格。

如果還不行的話,找格式化之前的BASE64內(nèi)容替換格式化后的圖片BASE64的內(nèi)容,這應(yīng)該就沒(méi)有問(wèn)題。

 

二、處理含List的內(nèi)容

2.1概述

有多個(gè)用戶信息,需要顯示出來(lái),如圖所示,word文檔處理可變內(nèi)容。

2.2處理方式

因?yàn)榈谝恍惺亲侄握f(shuō)明不可變,第二行是可變參數(shù),根據(jù)List的多少而改變的,可在word_mode.ftl中添加<#list></#list>標(biāo)簽,如圖5(開頭),圖6(結(jié)尾)

 

三、程序處理

3.1引入pom.xml

<!-- 導(dǎo)出word文檔 -->
<dependency>
	<groupId>org.freemarker</groupId>
	<artifactId>freemarker</artifactId>
	<version>2.3.23</version>
</dependency>

3.2實(shí)體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 {
	/** 設(shè)置使用的編碼格式 */
	private static final String CHARSET = "UTF-8";
	/** 設(shè)置使用的版本 */
	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. 獲取替換參數(shù)
			Map<String, Object> wordData = initWordMap();
			
			// 2. 設(shè)置配置內(nèi)容
			// 設(shè)置版本
			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("員工信息導(dǎo)出已完成");
			
		} 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;
	}

到此這篇關(guān)于教你如何用Java替換Word中帶有${}的內(nèi)容的文章就介紹到這了,更多相關(guān)java替換Word中帶有${}的內(nèi)容內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java中實(shí)現(xiàn)時(shí)間類型轉(zhuǎn)換的代碼詳解

    Java中實(shí)現(xiàn)時(shí)間類型轉(zhuǎn)換的代碼詳解

    這篇文章主要為大家詳細(xì)介紹了Java中實(shí)現(xiàn)時(shí)間類型轉(zhuǎn)換的相關(guān)方法,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,有需要的小伙伴可以參考下
    2023-09-09
  • SpringCloud微服務(wù)熔斷器Hystrix使用詳解

    SpringCloud微服務(wù)熔斷器Hystrix使用詳解

    這篇文章主要介紹了Spring Cloud Hyxtrix的基本使用,它是Spring Cloud中集成的一個(gè)組件,在整個(gè)生態(tài)中主要為我們提供服務(wù)隔離,服務(wù)熔斷,服務(wù)降級(jí)功能,本文給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-07-07
  • Java枚舉使用方法詳解

    Java枚舉使用方法詳解

    這篇文章主要為大家詳細(xì)介紹了Java枚舉的使用方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-09-09
  • Docker環(huán)境下Spring Boot應(yīng)用內(nèi)存飆升分析與解決場(chǎng)景分析

    Docker環(huán)境下Spring Boot應(yīng)用內(nèi)存飆升分析與解決場(chǎng)景分析

    當(dāng)運(yùn)行一個(gè)Spring Boot項(xiàng)目時(shí),如果未設(shè)置JVM內(nèi)存參數(shù),Spring Boot默認(rèn)會(huì)采用JVM自身默認(rèn)的配置策略,接下來(lái)通過(guò)本文給大家介紹Docker環(huán)境下Spring Boot應(yīng)用內(nèi)存飆升分析與解決方法,需要的朋友參考下吧
    2021-08-08
  • IDEA如何添加配置文件到classpath中

    IDEA如何添加配置文件到classpath中

    這篇文章主要介紹了IDEA如何添加配置文件到classpath中,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-09-09
  • Java多線程基礎(chǔ)

    Java多線程基礎(chǔ)

    這篇文章主要介紹Java多線程基礎(chǔ),線程是進(jìn)程的一個(gè)實(shí)體,是CPU調(diào)度和分派的基本單位,它是比進(jìn)程更小的能獨(dú)立運(yùn)行的基本單位,多線程指在單個(gè)程序中可以同時(shí)運(yùn)行多個(gè)不同的線程執(zhí)行不同的任務(wù),下面來(lái)學(xué)習(xí)具體的詳細(xì)內(nèi)容
    2021-10-10
  • 源碼解析Spring 數(shù)據(jù)庫(kù)異常抽理知識(shí)點(diǎn)總結(jié)

    源碼解析Spring 數(shù)據(jù)庫(kù)異常抽理知識(shí)點(diǎn)總結(jié)

    在本篇文章里小編給大家分享了關(guān)于源碼解析Spring 數(shù)據(jù)庫(kù)異常抽理知識(shí)點(diǎn)內(nèi)容,對(duì)此有需要的朋友們學(xué)習(xí)參考下。
    2019-05-05
  • HttpClient詳細(xì)使用示例詳解

    HttpClient詳細(xì)使用示例詳解

    這篇文章主要介紹了HttpClient詳細(xì)使用示例詳解,本文給大家介紹的非常想詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-01-01
  • Java性能優(yōu)化之關(guān)于大對(duì)象復(fù)用的目標(biāo)和注意點(diǎn)

    Java性能優(yōu)化之關(guān)于大對(duì)象復(fù)用的目標(biāo)和注意點(diǎn)

    這篇文章主要介紹了Java性能優(yōu)化之關(guān)于大對(duì)象復(fù)用的目標(biāo)和注意點(diǎn),具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • 前后端分離跨域springBoot跨域有效解決問(wèn)題

    前后端分離跨域springBoot跨域有效解決問(wèn)題

    這篇文章主要介紹了前后端分離跨域springBoot跨域有效解決問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01

最新評(píng)論