国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

springboot基礎(chǔ)(78):Freemarker模板生成word文檔

這篇具有很好參考價(jià)值的文章主要介紹了springboot基礎(chǔ)(78):Freemarker模板生成word文檔。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

前言

利用Freemarker模板生成word文檔。示例,將左側(cè)的模板生成為右側(cè)的文檔并下載。
springboot基礎(chǔ)(78):Freemarker模板生成word文檔

如何使用Freemakrer生成word文檔

1. 制作模板

1.編輯一份addr.docx文檔
springboot基礎(chǔ)(78):Freemarker模板生成word文檔
2. 另存為addr.xml文檔

springboot基礎(chǔ)(78):Freemarker模板生成word文檔
3. 打開addr.xml文件,修改內(nèi)容,由于table表格,需要遍歷list集合,需要添加

<#list users as user>
表格內(nèi)容
</#list>

springboot基礎(chǔ)(78):Freemarker模板生成word文檔

  1. 將addr.xml后綴更改為addr.ftl文件,存放到resources/templates下
    springboot基礎(chǔ)(78):Freemarker模板生成word文檔

2. 編寫工具類

導(dǎo)入依賴

<!--springboot項(xiàng)目依賴的freemarker-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-freemarker</artifactId>
        </dependency>
<!--maven項(xiàng)目依賴freemarker-->        
		<dependency>
		    <groupId>org.freemarker</groupId>
		    <artifactId>freemarker</artifactId>
		    <version>2.3.32</version>
		</dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
                <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.13.0</version>
        </dependency>

package com.example.demo01.util;

import freemarker.template.Configuration;
import freemarker.template.Template;
import lombok.extern.slf4j.Slf4j;

import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.util.Map;

/**
 * word導(dǎo)出工具
 */
@Slf4j
public class WordUtils {
    private static Configuration configuration = null;//配置

    private static  String templateFolder;

    static {
        templateFolder = WordUtils.class.getResource("/templates").getPath();
        configuration = new Configuration();
        configuration.setDefaultEncoding("utf-8");
        try {
            log.info("模板配置路徑:" + templateFolder);
            configuration.setDirectoryForTemplateLoading(new File(templateFolder));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private WordUtils() {
        throw new AssertionError();
    }

    /**
     * 導(dǎo)出word
     *
     * @param request
     * @param response
     * @param map      參數(shù)
     * @param wordName 模板名,示例xxx.ftl
     * @param fileName 要到處的word文件名稱,示例:test.doc
     * @param name     臨時(shí)文件名
     * @throws IOException
     */
    public static void exportMillCertificateWord(HttpServletRequest request, HttpServletResponse response, Map map, String wordName, String fileName, String name) throws IOException {
        Template freemarkerTemplate = configuration.getTemplate(wordName);
        File file = null;
        InputStream fin = null;
        ServletOutputStream out = null;
        try {
            // 調(diào)用createDoc方法生成Word文檔
            file = createDoc(map, freemarkerTemplate, name);
            fin = new FileInputStream(file);
            response.setCharacterEncoding("utf-8");
            response.setContentType("application/x-download");
            fileName = new String(fileName.getBytes(), "ISO-8859-1");
            response.setHeader("Content-Disposition", "attachment;filename=".concat(String.valueOf(fileName)));
            out = response.getOutputStream();
            byte[] buffer = new byte[512];// 緩沖區(qū)
            int bytesToRead = -1;
            // 通過循環(huán)將讀入的Word文件的內(nèi)容輸出到瀏覽器中
            while ((bytesToRead = fin.read(buffer)) != -1) {
                out.write(buffer, 0, bytesToRead);
            }
        } finally {
            if (fin != null) fin.close();
            if (out != null) out.close();
            if (file != null) file.delete();// 刪除臨時(shí)文件
        }
    }

    private static File createDoc(Map<?, ?> dataMap, Template template, String name) {
        File f = new File(name);
        Template t = template;
        try {
            //這個(gè)地方不能使用FileWriter因?yàn)樾枰付ň幋a類型否則生成的Word文檔會(huì)因?yàn)橛袩o法識(shí)別的編碼而無法打開
            Writer w = new OutputStreamWriter(new FileOutputStream(f), "utf-8");
            t.process(dataMap, w);
            w.close();
        } catch (Exception ex) {
            ex.printStackTrace();
            throw new RuntimeException(ex);
        }
        return f;
    }
}
package com.example.demo01.model;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {

    private String name;

    private String dept;

    private String phone;

    private String addr;
}
  1. 編寫controller 下載
package com.example.demo01.controller;

import com.example.demo01.model.User;
import com.example.demo01.util.WordUtils;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@RestController
@RequestMapping("/word")
public class WordController {

    @GetMapping("/downloadWord")
    public void downloadWord(HttpServletRequest request, HttpServletResponse response) throws IOException {
        List<User> list = new ArrayList<>();
        list.add(new User("王小魚", "三(1)班", "1380000000", "北京市朝陽(yáng)區(qū)幸福小區(qū)101號(hào)"));
        list.add(new User("李一一", "三(3)班", "1360000000", "北京市朝陽(yáng)區(qū)湯臣一品61號(hào)"));

        Map<String, Object> map = new HashMap<>();
        map.put("users", list);
        map.put("date", "2023年1月2日");
        map.put("company", "保護(hù)傘公司");

        String wordName = "addr.ftl";
        String fileName = "通訊錄11.doc";
        String name = "test";
        WordUtils.exportMillCertificateWord(request, response, map, wordName, fileName, name);
    }
}
  1. 啟動(dòng)服務(wù)器,訪問下載路徑 http://localhost:8080/word/downloadWord
    springboot基礎(chǔ)(78):Freemarker模板生成word文檔
    springboot基礎(chǔ)(78):Freemarker模板生成word文檔

遇到的問題

下載失敗

請(qǐng)檢查模板是否正確,并且保證所有的參數(shù)必須存在。

如何只生成文件不下載

只要在createDoc后,將file保存下來即可。

<dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.13.0</version>
        </dependency>
    file = createDoc(map, freemarkerTemplate, name);
    File targetFile =  new File("D:\\test\\1.doc");
    FileUtils.copyFile(file, targetFile);//復(fù)制文件到指定目錄

springboot基礎(chǔ)(78):Freemarker模板生成word文檔文章來源地址http://www.zghlxwxcb.cn/news/detail-511607.html

到了這里,關(guān)于springboot基礎(chǔ)(78):Freemarker模板生成word文檔的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 基于Java+freemarker實(shí)現(xiàn)動(dòng)態(tài)賦值以及生成Word文檔

    基于Java+freemarker實(shí)現(xiàn)動(dòng)態(tài)賦值以及生成Word文檔

    有一個(gè)需求就是給定一個(gè)正確格式的 Word 文檔模板,要求通過動(dòng)態(tài)賦值方式,寫入數(shù)據(jù)并新生成 該模板格式的 Word 文檔。這很明顯使用 Java+freemarker 方式來實(shí)現(xiàn)頗為簡(jiǎn)單。 (1)準(zhǔn)備好一個(gè)正確格式的 Word 文檔(測(cè)試文檔 - 原版.docx) (2)將其另存為xml文件(測(cè)試文檔?- 原版

    2024年02月09日
    瀏覽(25)
  • JAVA利用Freemarker模版動(dòng)態(tài)生成并導(dǎo)出word文檔(全網(wǎng)最詳細(xì))

    JAVA利用Freemarker模版動(dòng)態(tài)生成并導(dǎo)出word文檔(全網(wǎng)最詳細(xì))

    公司的某個(gè)需求,需要根據(jù)接口的信息生成一份word接口文檔信息并支持導(dǎo)出功能。以前沒做過這種需求,于是搜羅各種資料,最終發(fā)現(xiàn)java利用freemarker模版可以實(shí)現(xiàn)這個(gè)功能。 1、需要的環(huán)境 2、創(chuàng)建模板 1)展示word文檔如下所示: 2)將word文檔動(dòng)態(tài)的參數(shù)替換成占位符,如下

    2024年02月16日
    瀏覽(23)
  • 若依框架中使用FreeMarker使用word動(dòng)態(tài)模板生成pdf給前端展示(模板中并沒用使用到圖片,所以沒有圖片的方法,只用了表格展示數(shù)據(jù),模板里面只涉及到了循環(huán)判斷和日期格式)

    若依框架中使用FreeMarker使用word動(dòng)態(tài)模板生成pdf給前端展示(模板中并沒用使用到圖片,所以沒有圖片的方法,只用了表格展示數(shù)據(jù),模板里面只涉及到了循環(huán)判斷和日期格式)

    首先使用word創(chuàng)建動(dòng)態(tài)模板 ?下方兩組信息是通過循環(huán)展示的,在生成模板時(shí)注意,如果不點(diǎn)擊里面表格,選擇居中表格打印出來可能還有偏差,兩邊距離頁(yè)面拒了可能不一樣 存儲(chǔ)需要的模板時(shí)注意 ? ? ?存成這個(gè)格式,如果不是2003可能會(huì)有坑,找到你生成的.xml文件,把后綴改成ftl ?

    2024年02月04日
    瀏覽(26)
  • freemarker 使用word模板賦值

    freemarker 使用word模板賦值

    這里貼上自己測(cè)試的ftl文件 生成的效果 參考: https://blog.csdn.net/weixin_46174854/article/details/116855252 https://blog.csdn.net/weixin_45853881/article/details/129298494 https://blog.csdn.net/qq_42851623/article/details/122879852 https://blog.csdn.net/weixin_45103378/article/details/118395284 https://www.cnblogs.com/ayueC/p/15118381.html

    2024年02月11日
    瀏覽(20)
  • Java根據(jù)word模板生成word文檔并轉(zhuǎn)成PDF文件

    Java根據(jù)word模板生成word文檔并轉(zhuǎn)成PDF文件

    定義完我們的模板之后,我們要將文檔保存為xml的格式 生成的xml格式看起來比較亂,沒有層次感, 所以需要格式化一下 格式化 基礎(chǔ)信息的定義 基礎(chǔ)信息的定義只要保證我們轉(zhuǎn)化成的xml文件中的${name}等格式?jīng)]錯(cuò)誤即可 表格的定義 遍歷實(shí)現(xiàn),表格的數(shù)據(jù)填充 在xml文件中我們的

    2024年02月09日
    瀏覽(35)
  • freemarker模板操作excel或word

    freemarker模板操作excel或word

    二維碼生成

    2024年01月18日
    瀏覽(27)
  • freemarker學(xué)習(xí)+集成springboot+導(dǎo)出word

    freemarker學(xué)習(xí)+集成springboot+導(dǎo)出word

    目錄 一 FreeMarker簡(jiǎn)介 二 集成springboot,實(shí)現(xiàn)案例導(dǎo)出 三 常見面試題總結(jié) FreeMarker ?是一款 模板引擎: 即一種基于模板和要改變的數(shù)據(jù), 并用來生成輸出文本(HTML網(wǎng)頁(yè),電子郵件,配置文件,源代碼等)的通用工具。 是一個(gè)Java類庫(kù)。 在本地磁盤隨便準(zhǔn)備一個(gè)文件,內(nèi)容體如下

    2024年02月10日
    瀏覽(30)
  • 使用FreeMarker生成word文件自定義每頁(yè)頁(yè)眉或頁(yè)腳

    使用FreeMarker生成word文件自定義每頁(yè)頁(yè)眉或頁(yè)腳

    最新工作中遇到生成word中表格時(shí),要求文檔中每頁(yè)頭部和底部都是固定格式的表格,但是內(nèi)容不一樣,頭部信息在word中畫樣式的時(shí)候就可以設(shè)置為“在各頁(yè)頂端以標(biāo)題形式重復(fù)出現(xiàn)”,而底部就沒有辦法這樣設(shè)置了,之后就想著在眉腳中設(shè)置相應(yīng)的樣式就可以啦,但是發(fā)現(xiàn)

    2024年02月16日
    瀏覽(93)
  • 【STM32開發(fā)小技巧】CUBEMX改變工程模板(FreeMarker一鍵生成定制文件)

    【STM32開發(fā)小技巧】CUBEMX改變工程模板(FreeMarker一鍵生成定制文件)

    ps:可直接跳到效果展示 眾所周知CUBEMX可以生成代碼,圖形界面可以方便用戶進(jìn)行STM32的配置,有天我就在想能否用戶改變生成后的代碼,于是就有了下面的文章。 直接進(jìn)入Project Manager頁(yè)面。 我們看一下官方的說明 生成了一些外設(shè)信息,這些都是通過FreeMarker模板引擎代碼生成

    2023年04月08日
    瀏覽(71)
  • springboot基礎(chǔ)(79):通過pdf模板生成文件

    springboot基礎(chǔ)(79):通過pdf模板生成文件

    通過pdf模板生成文件。 支持文本,圖片,勾選框。 本章代碼已分享至Gitee: https://gitee.com/lengcz/pdfdemo01 先使用wps軟件制作一個(gè)docx文檔 將文件另存為pdf文件 使用pdf編輯器,編輯表單,(例如福昕PDF閱讀器、Adobe Acrobat DC) 不同的pdf編輯器使用方式不同,建議自行學(xué)習(xí)如何使用p

    2024年02月10日
    瀏覽(15)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包