Condivisione della tecnologia

Java utilizza il motore del modello poi-tl per esportare il rendering dei dati del loop dell'elenco di parole

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina


Nel motore del modello poi-tl, se il valore di una coppia di blocchi è una raccolta non vuota, gli elementi del documento nel blocco verranno visualizzati in modo iterativo una o N volte, a seconda della dimensione della raccolta, in modo simile alla sintassi foreach .

1. Creazione del modello

Crea un nuovo exportWord.docx nella directory resources/static/templates delle risorse statiche e scrivi il seguente contenuto del modello:

Inserisci qui la descrizione dell'immagine

2. Attiva l'espressione primaverile

(1) Introdurre le dipendenze

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-expression</artifactId>
    <version>5.3.18</version>
</dependency>
  • 1
  • 2
  • 3
  • 4
  • 5

(2) Attiva le espressioni nel codice

ConfigureBuilder builder = Configure.builder();
// 开启spring表达式
builder.useSpringEL();
  • 1
  • 2
  • 3

3. Scrivere le interfacce del codice chiave

@GetMapping("/exportWord")
public void exportWord(HttpServletResponse response) throws FileNotFoundException {
    //存放数据,也就是填充在word里面的值
    Map<String, Object> params = new HashMap<>();
    params.put("title","测试使用poi-tl模版导出word");

    List<Map<String, Object>> list = new ArrayList<>();
    Map<String, Object> map = new HashMap<>();
    map.put("a","测试");
    map.put("b","米");
    map.put("c","201312");
    list.add(map);
    Map<String, Object> map1 = new HashMap<>();
    map1.put("a","测试2");
    map1.put("b","千米");
    map1.put("c","2012312");
    list.add(map1);

    params.put("list",list);

    ConfigureBuilder builder = Configure.builder();
    // 开启spring表达式
    builder.useSpringEL();

    // 或模板在静态资源的相对路径
    File rootFile = new File((ResourceUtils.getURL("classpath:").getPath()));
    File templateFile = new File(rootFile, "/static/templates/exportWord.docx");
    //jar包获取不到文件路径`
    //URLDecoder.decode() 解决获取中文名称文件路径乱码
    String templatePath = URLDecoder.decode(templateFile.getPath());
    //生成文件名
    String fileName = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()) + "_" + System.currentTimeMillis();
    // 导出wold
    try {
        // 导出Word文档为文件
        XWPFTemplate template = XWPFTemplate.compile(templatePath,builder.build()).render(params);
        // 将导出的Word文件转换为流
        response.setContentType("application/octet-stream");
        response.setHeader("Content-disposition","attachment;filename=""+fileName+".docx"+""");
        // HttpServletResponse response
        OutputStream out = response.getOutputStream();
        BufferedOutputStream bos = new BufferedOutputStream(out);
        template.write(bos);
        bos.flush();
        out.flush();
        // 最后不要忘记关闭这些流。
        PoitlIOUtils.closeQuietlyMulti(template, bos, out);
    } catch (Exception e) {
        System.out.println("导出Word文档时出现异常:" + e.getMessage());
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51

4. Esporta i risultati

Inserisci qui la descrizione dell'immagine