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


    一、要用到的jar包

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

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

    具体jar包截图:

    二、实现的代码

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

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

    1. /**
    2. * @Description: TODO word替换变量的方法
    3. * @author: zgx
    4. * @date: 2023年11月20日 下午3:03:42
    5. * @param srcPath 模板路径
    6. * @param destPath 输出路径
    7. * @param map 替换的变量值集合
    8. * @return
    9. * @return: boolean
    10. */
    11. public static boolean replaceWord(String srcPath,String destPath, HashMap map) {
    12. try {
    13. // 替换的的关键字存放到Set集合中
    14. Set set = map.keySet();
    15. // 读取模板文档
    16. XWPFDocument document = new XWPFDocument(new FileInputStream(srcPath));
    17. /**
    18. * 替换段落中的指定文字
    19. */
    20. // 读取文档中的段落,回车符为一个段落。
    21. // 同一个段落里面会被“:”等符号隔开为多个对象
    22. Iterator itPara = document.getParagraphsIterator();
    23. while (itPara.hasNext()) {
    24. // 获取文档中当前的段落文字信息
    25. XWPFParagraph paragraph = (XWPFParagraph) itPara.next();
    26. List run = paragraph.getRuns();
    27. // 遍历段落文字对象
    28. for (int i = 0; i < run.size(); i++) {
    29. // 获取段落对象
    30. if (run.get(i) == null) { //段落为空跳过
    31. continue;
    32. }
    33. String sectionItem = run.get(i).getText(run.get(i).getTextPosition()); //段落内容
    34. // 遍历自定义表单关键字,替换Word文档中的内容
    35. Iterator iterator = set.iterator();
    36. while (iterator.hasNext()) {
    37. // 当前关键字
    38. String key = iterator.next();
    39. // 替换内容
    40. sectionItem = sectionItem.replace(key, String.valueOf(map.get(key)));
    41. }
    42. run.get(i).setText(sectionItem, 0);
    43. }
    44. }
    45. /**
    46. * 替换表格中的指定文字
    47. */
    48. //获取文档中所有的表格,每个表格是一个元素
    49. Iterator itTable = document.getTablesIterator();
    50. while (itTable.hasNext()) {
    51. XWPFTable table = (XWPFTable) itTable.next(); //获取表格内容
    52. int count = table.getNumberOfRows(); //表格的行数
    53. //遍历表格行的对象
    54. for (int i = 0; i < count; i++) {
    55. XWPFTableRow row = table.getRow(i); //表格每行的内容
    56. List cells = row.getTableCells(); //每个单元格的内容
    57. //遍历表格的每行单元格对象
    58. for (int j = 0; j < cells.size(); j++) {
    59. XWPFTableCell cell = cells.get(j); //获取每个单元格的内容
    60. List paragraphs = cell.getParagraphs(); //获取单元格里所有的段落
    61. for (XWPFParagraph paragraph : paragraphs) {
    62. //获取段落的内容
    63. List run = paragraph.getRuns();
    64. // 遍历段落文字对象
    65. for (int o = 0; o < run.size(); o++) {
    66. // 获取段落对象
    67. if (run.get(o) == null || run.get(o).equals("")) {
    68. continue;
    69. }
    70. String sectionItem = run.get(o).getText(run.get(o).getTextPosition()); //获取段落内容
    71. if (sectionItem == null || sectionItem.equals("")) { //段落为空跳过
    72. continue;
    73. }
    74. //遍历自定义表单关键字,替换Word文档中表格单元格的内容
    75. for (String key : map.keySet()) {
    76. // 替换内容
    77. sectionItem = sectionItem.replace(key, String.valueOf(map.get(key)));
    78. run.get(o).setText(sectionItem, 0);
    79. }
    80. }
    81. }
    82. }
    83. }
    84. }
    85. // 设置word不可编辑
    86. // document.enforceFillingFormsProtection("123", HashAlgorithm.sha512);
    87. FileOutputStream outStream = null;
    88. outStream = new FileOutputStream(destPath);
    89. document.write(outStream);
    90. outStream.close();
    91. } catch (Exception e) {
    92. e.printStackTrace();
    93. }
    94. return true;
    95. }

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

    1. public void doReplaceWord(){
    2. String newPath = 路径+"你的新文件.docx";
    3. String oldPath = 路径+"你的模板文件.docx";
    4. HashMap resultMap = new HashMap<>();
    5. //简历名称
    6. resultMap.put("${resumeName}","我的简历");
    7. //创建时间
    8. resultMap.put("${createTime}","2023-10-10");
    9. //最后修改时间
    10. resultMap.put("${updateTime}","2023-11-10");
    11. replaceWord(oldPath, newPath, resultMap);
    12. }

  • 相关阅读:
    这就叫“面试造火箭,工作拧螺丝!”
    Rust:多线程并发编程
    Docker安装canal、mysql进行简单测试与实现redis和mysql缓存一致性
    树莓集团的全球化征程:数字媒体产业的本土与国际布局
    setContentView详解
    Docker13:容器互联----link (给新手玩的,进阶方法是 自定义网络)
    洛谷刷题C语言:BAZA、YODA、SPAVANAC、COKOLADA、KINO
    [Database] MySQL 5.7+ JSON 字段的使用的处理
    信息安全实验二 :使用X-SCANNER扫描工具
    机器学习 | MATLAB实现MLP多层感知机模型设计
  • 原文地址:https://blog.csdn.net/qq_27387133/article/details/134536355