我已上传了相关的jar包,需要的可以通过以下链接直接下载:
https://download.csdn.net/download/qq_27387133/88558034
具体jar包截图:
注意:文件要用docx格式!!!
word变量替换的方法(replaceWord):
- /**
- * @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
map) { - try {
- // 替换的的关键字存放到Set集合中
- Set
set = map.keySet(); - // 读取模板文档
- XWPFDocument document = new XWPFDocument(new FileInputStream(srcPath));
- /**
- * 替换段落中的指定文字
- */
- // 读取文档中的段落,回车符为一个段落。
- // 同一个段落里面会被“:”等符号隔开为多个对象
- Iterator
itPara = document.getParagraphsIterator(); - while (itPara.hasNext()) {
- // 获取文档中当前的段落文字信息
- XWPFParagraph paragraph = (XWPFParagraph) itPara.next();
- List
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
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
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
cells = row.getTableCells(); //每个单元格的内容 - //遍历表格的每行单元格对象
- for (int j = 0; j < cells.size(); j++) {
- XWPFTableCell cell = cells.get(j); //获取每个单元格的内容
- List
paragraphs = cell.getParagraphs(); //获取单元格里所有的段落 - for (XWPFParagraph paragraph : paragraphs) {
- //获取段落的内容
- List
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方法示例:
- public void doReplaceWord(){
-
- String newPath = 路径+"你的新文件.docx";
- String oldPath = 路径+"你的模板文件.docx";
-
- HashMap
resultMap = new HashMap<>(); - //简历名称
- resultMap.put("${resumeName}","我的简历");
- //创建时间
- resultMap.put("${createTime}","2023-10-10");
- //最后修改时间
- resultMap.put("${updateTime}","2023-11-10");
-
- replaceWord(oldPath, newPath, resultMap);
- }