java中,通过替换word模板中的关键字后输出一个新文档

一、要用到的jar包

我已上传了相关的jar包,需要的可以通过以下链接直接下载:

https://download.csdn.net/download/qq_27387133/88558034

具体jar包截图:

二、实现的代码

注意:文件要用docx格式!!!

word变量替换的方法(replaceWord):

java 复制代码
/**    
	 * @Description: TODO word替换变量的方法
	 * @author: zgx 
	 * @date:   2023年11月20日 下午3:03:42
	 * @param srcPath 模板路径
	 * @param destPath 输出路径
	 * @param map 替换的变量值集合
	 * @return      
	 * @return: boolean       
	 */
	public static boolean replaceWord(String srcPath,String destPath, HashMap<String, Object> map) {
        try {
            // 替换的的关键字存放到Set集合中
            Set<String> set = map.keySet();
            // 读取模板文档
            XWPFDocument document = new XWPFDocument(new FileInputStream(srcPath));
            /**
             * 替换段落中的指定文字
             */
            // 读取文档中的段落,回车符为一个段落。
            // 同一个段落里面会被":"等符号隔开为多个对象
            Iterator<XWPFParagraph> itPara = document.getParagraphsIterator();
            while (itPara.hasNext()) {
                // 获取文档中当前的段落文字信息
                XWPFParagraph paragraph = (XWPFParagraph) itPara.next();
                List<XWPFRun> run = paragraph.getRuns();
                // 遍历段落文字对象
                for (int i = 0; i < run.size(); i++) {
                    // 获取段落对象
                    if (run.get(i) == null) {	//段落为空跳过
                        continue;
                    }
                    String sectionItem = run.get(i).getText(run.get(i).getTextPosition());	//段落内容
                    // 遍历自定义表单关键字,替换Word文档中的内容
                    Iterator<String> iterator = set.iterator();
                    while (iterator.hasNext()) {
                        // 当前关键字
                        String key = iterator.next();
                        // 替换内容
                        sectionItem = sectionItem.replace(key, String.valueOf(map.get(key)));
                    }
                    run.get(i).setText(sectionItem, 0);
                }
            }

            /**
             * 替换表格中的指定文字
             */
            //获取文档中所有的表格,每个表格是一个元素
            Iterator<XWPFTable> itTable = document.getTablesIterator();
            while (itTable.hasNext()) {
                XWPFTable table = (XWPFTable) itTable.next();   //获取表格内容
                int count = table.getNumberOfRows();    //表格的行数
                //遍历表格行的对象
                for (int i = 0; i < count; i++) {
                    XWPFTableRow row = table.getRow(i);    //表格每行的内容
                    List<XWPFTableCell> cells = row.getTableCells();   //每个单元格的内容
                    //遍历表格的每行单元格对象
                    for (int j = 0; j < cells.size(); j++) {
                        XWPFTableCell cell = cells.get(j);	//获取每个单元格的内容
                        List<XWPFParagraph> paragraphs = cell.getParagraphs();      //获取单元格里所有的段落
                        for (XWPFParagraph paragraph : paragraphs) {
                            //获取段落的内容
                            List<XWPFRun> run = paragraph.getRuns();
                            // 遍历段落文字对象
                            for (int o = 0; o < run.size(); o++) {
                                // 获取段落对象
                                if (run.get(o) == null || run.get(o).equals("")) {
                                    continue;
                                }
                                String sectionItem = run.get(o).getText(run.get(o).getTextPosition());	//获取段落内容
                                if (sectionItem == null || sectionItem.equals("")) {	//段落为空跳过
                                    continue;
                                }
                                //遍历自定义表单关键字,替换Word文档中表格单元格的内容
                                for (String key : map.keySet()) {
                                    // 替换内容
                                    sectionItem = sectionItem.replace(key, String.valueOf(map.get(key)));
                                    run.get(o).setText(sectionItem, 0);


                                }
                            }
                        }
                    }
                }
            }
//            设置word不可编辑
//            document.enforceFillingFormsProtection("123", HashAlgorithm.sha512);
            FileOutputStream outStream = null;
            outStream = new FileOutputStream(destPath);
            document.write(outStream);
            outStream.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return true;
    }

具体地方调用replaceWord方法示例:

java 复制代码
public void doReplaceWord(){
    
				String newPath = 路径+"你的新文件.docx";
				String oldPath = 路径+"你的模板文件.docx";
				
				HashMap<String, Object> resultMap = new HashMap<>();
		        //简历名称
				resultMap.put("${resumeName}","我的简历");
				//创建时间
				resultMap.put("${createTime}","2023-10-10");
				//最后修改时间
				resultMap.put("${updateTime}","2023-11-10");				
				
		        replaceWord(oldPath, newPath, resultMap);
}
相关推荐
一晌小贪欢7 分钟前
PyQt5 开发一个 PDF 批量合并工具
开发语言·qt·pdf
神仙别闹7 分钟前
基于 MATLAB 实现的图像信号处理
开发语言·matlab·信号处理
迷藏4947 分钟前
**超融合架构下的Go语言实践:从零搭建高性能容器化微服务集群**在现代云原生时代,*
java·python·云原生·架构·golang
swift1922112 分钟前
Qt多语言问题 —— 静态成员变量
开发语言·c++·qt
それども16 分钟前
Spring Bean @Autowired自注入空指针问题
java·开发语言·spring
如来神掌十八式18 分钟前
Java所有的锁:从基础到进阶
java·
硅基诗人22 分钟前
Java后端高并发核心瓶颈突破(JVM+并发+分布式底层实战)
java·jvm·分布式
沐知全栈开发24 分钟前
JavaScript for 循环
开发语言
星空椰26 分钟前
JavaScript 基础入门:从零开始掌握变量与数据类型
开发语言·前端·javascript·ecmascript
ulias21228 分钟前
Linux中的开发工具
linux·运维·服务器·开发语言·c++·windows