java freemarker動態替換word文檔中占位符


1.使用map替換

public static  void createWord(Map<String,Object> dataMap, String templateName, ByteArrayOutputStream outputStream){
      try {
         //創建配置實例
         Configuration configuration = new Configuration();
         //設置編碼
         configuration.setDefaultEncoding("UTF-8");

         //設置編碼
         configuration.setDefaultEncoding("UTF-8");

         File exportTemplate = ResourceFinder.getResources("exportTemplate")[0].getFile();
         configuration.setDirectoryForTemplateLoading(exportTemplate);// 本地模板路徑
         //獲取模板
         Template template = configuration.getTemplate(templateName);
         Writer out = new OutputStreamWriter(outputStream);
         //生成文件
         template.process(dataMap, out);
         //關閉流
         out.flush();
         out.close();
      } catch (Exception e) {
         e.printStackTrace();
      }
   }

2.使用

public void exportDutyLog(String ownerId, LocalDate date, HttpServletResponse response) throws IOException {
      String fileName = "值班日志-".concat(date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))).concat(".docx");
      ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
      HashMap<String, Object> stringMaps = Maps.newHashMap();
      try {
         process(ownerId, date, stringMaps);
      }
      catch(Exception e) {
         e.printStackTrace();
      }
      createWord(stringMaps,"dutylog.ftl",outputStream);
      response.setCharacterEncoding("utf-8");
      // 設置編碼格式
      response.setHeader("Content-Disposition", "attachment;fileName=" + URLEncoder.encode(fileName, "UTF-8"));
      ServletOutputStream servletOutputStream = response.getOutputStream();
      servletOutputStream.write(outputStream.toByteArray());
   }

3.使用時需要將word導出為xml,修改錯亂的占位符位置,方法調用即可成功

4.依賴

compile group: 'org.freemarker', name: 'freemarker', version: '2.3.28'


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM