1. 程式人生 > >java 根據模板,匯出word並提供下載

java 根據模板,匯出word並提供下載

java+springmvc實現根據freemarker模板匯出word模板。模板使用的字尾可以是:.xml,也可以是.ftl。

步驟1,引入freemarker的jar包。

步驟2,製作模板檔案。(紅框中的內容是為了替換使用)
這裡寫圖片描述

另存為xml格式,
這裡寫圖片描述

找到xml檔案,右鍵用editplus開啟,找到紅框的標記1,標記2進行修改。
這裡寫圖片描述

如果是表格的話,表頭的第一行需要保留。

表格的主體部分需要保留一個,
這裡寫圖片描述

這裡eList是從後臺賦值的一個集合,${e_index+1}是根據<#list eList as e>這個別名+_index得到,用法基本與el表示式用法相同。

這樣一個模板就完成了,將模板複製進專案中即可,字尾是什麼不重要,重要的是我們用freemarker解析。

步驟4,java後臺程式碼。

@RequestMapping("/test/toWord")
public ModelAndView toWord(HttpServletRequest request, HttpServletResponse response) throws IOException{

    File file = createDoc();

    response.setContentType("text/html;charset=utf-8");
    request.setCharacterEncoding("UTF-8"
); java.io.BufferedInputStream bis = null; java.io.BufferedOutputStream bos = null; try { long fileLength = file.length(); response.setContentType("application/msword"); response.setHeader("Content-disposition", "attachment; filename=" + URLEncoder.encode("測試的,統計-匯出時間"
+DateTimeUtils.getDateTime("yyyyMMddHHmmss")+".doc", "utf-8")); response.setHeader("Content-Length", String.valueOf(fileLength)); bis = new BufferedInputStream(new FileInputStream(file)); bos = new BufferedOutputStream(response.getOutputStream()); byte[] buff = new byte[2048]; int bytesRead; while (-1 != (bytesRead = bis.read(buff, 0, buff.length))) { bos.write(buff, 0, bytesRead); } } catch (Exception e) { e.printStackTrace(); } finally { if (bis != null) bis.close(); if (bos != null) bos.close(); } return null; } private File createDoc(){ // 建立資料 Map<String,Object> dataMap = new HashMap<String, Object>(); dataMap.put("cwlx", "測試的"); List<?> eList = new ArrayList<?>();// 這裡是獲取list列表的方法 dataMap.put("czsj",DateTimeUtils.getDateTime("yyyyMMddHHmmss"));// 這裡是獲取當前時間的一種方式,可以根據自己程式自行修改 dataMap.put("eList", eList); // 獲取模板 Configuration configuration = new Configuration(); configuration.setDefaultEncoding("utf-8"); configuration.setClassForTemplateLoading(this.getClass(), "/tpl"); Template t = null; String name = "temp"+(int)(Math.random()*1000)+".doc"; File file = new File(name); try { t = configuration.getTemplate("model.xml"); t.setEncoding("UTF-8"); Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(name),"UTF-8")); t.process(dataMap, out); out.close(); } catch (IOException e) { e.printStackTrace(); } catch (TemplateException e) { e.printStackTrace(); } return file; }

在前臺頁面是需要做的就是傳送一個連結就可以了。

特別注意,

經常忽視的問題,編碼的問題,這裡需要統一編碼。

如果出現了word檔案不能開啟的情況,建議看一下後臺檔案是否報錯。如果後臺沒有報錯的話,建議用editplus開啟word的文件,檢視文件中是否有亂碼的情況。

筆者第一次使用的時候,經常出現word檔案不能開啟的問題,於是我在editplus中開啟,發現部分漢字是亂碼的,加了上圖紅框中的預設編碼的設定之後就可以了。

相關推薦

java 根據模板匯出word提供下載

java+springmvc實現根據freemarker模板匯出word模板。模板使用的字尾可以是:.xml,也可以是.ftl。 步驟1,引入freemarker的jar包。 步驟2,製作模板檔案。(紅框中的內容是為了替換使用) 另存為xml格式,

java根據模板生成pdf檔案匯出(轉)

import java.io.ByteArrayOutputStream; import java.io.FileOutputStream; import java.io.IOException; import com.itextpdf.text.Document; import com.itextpdf.

Java根據模板匯出Excel生成多個Sheet

因為最近用報表匯出比較多,所有就提成了一個工具類,本工具類使用的場景為  根據提供的模板來匯出Excel報表 並且可根據提供的模板Sheet頁進行復制 從而實現多個Sheet頁的需求, 使用本工具類時,如果需求是每個Sheet頁中的資料都不一致,但是表格樣式和模板都一樣 那

java freemarker 通過ftl模板檔案匯出word檔案發現在有中文地方出現在亂碼開啟word檔案提示xml錯誤解決辦法

最近開發一個匯出word模板檔案在本機調整一直正常,但是在伺服器下載下來的檔案老提示xml錯誤,仔細檢視發現出錯的word檔案以xml形式打開發現在在報錯位置有亂碼, 剛開始以為是word轉xml是出現亂碼,單獨除錯word轉xml正常,那應該是向ftl檔案中寫入變數後以寫

java根據模板匯出excel(二)

       最近在做一個專案,關於excel的匯出問題,上網查了很多,最後自己整理並編寫了關於模板匯出的方法,可能會有一些侷限性,但是對於簡單的模板匯出功能是可以實現的,先留下筆記,以供日後參考!思路其實很簡單,主要分為:(1)讀取模板excel(2)迴圈模

java根據模板匯出pdf(動態增加模板頁數)

這兩天碰到了一個根據模板匯出pdf的需求,研究了幾天以後,發現網上的資料不太齊全,主要是沒找到既根據模板匯出,又可以動態增加頁數的例子。只能通過各種資料結合來實現這個需求了(其實是懶得看iText英文文件,這個以後得改過來)。 下面先來說下pdf匯出主要的兩種方

Java根據模板生成excel下載

需要用到的jar包有freemarker-2.3.18.jar,freemarker-util-0.0.1-SNAPSHOT.jar,jxl-2.6.10.jar,jxl-report-1.0.jar,這些網上都有,可以去找 來吧,直接上乾貨。excel模板如圖: 很容

Java中使用freemarker匯出word文件(詳細案例含圖片和表格)

Java中使用freemarker匯出word文件(自己真實專案案例) 最近做了一個專案,有一個需求是要將職員的一些資料按照指定的樣式匯出成一個word文件出來,由於自己是一個Java小白,不懂,於是便在網上找方法,網上介紹的有很多,因為原來用poi匯出過pp

匯出List列表中的資料到Excel檔案提供下載

整體思路 客戶在頁面點選“匯出Excel”連結-->>進入Java邏輯處理程式碼-->>複製Excel模版檔案-->>向這個複製過的模版檔案中寫入List資料-->>把資料寫入完成的Excel檔案下載到客戶端 適用場景 資料格

轉:java 解析excel帶合單元的excel

void lena words ger add leo main 下標 解析excel   收集了一些對博主有幫助的博文,如下 >>>>>>>>>>>第一部分: 首先,mavn導入jar包 <!-- 解

Java根據模板建立excel檔案

1.首先匯入xml檔案,src下建包xml,將student.xml檔案放入此資料夾中 <excel id="student" code="student" name="學生資訊匯入"> <colgroup> <co

java中使用freemarker匯出word文件

公司專案要求要有一個能匯出成一份word文件的功能,於是就上網搜了一些教程,但我跟著教程使用的時候還是遇到了很多問題,這裡我自己總結一份我作為新手使用freemarker能看懂的文章。可能以後自己還會用到,至少到時候忘了還可以翻看一下。 首先要自己在網上下載一個freema

Thinkphp3.2版本結合phpqrcode生成二維碼提供下載

com value inf PQ png 容錯 AI mini eve 說明:這篇文章主要為大家詳細介紹了Thinkphp3.2.3整合phpqrcode生成帶二維碼的實現方法並提供圖像下載,感興趣的小夥伴們可以參考一下 緣由:Thinkphp中沒有二維碼相關的庫,因此我們

Ubuntu 18.10 Beta 版本釋出提供下載

Ubuntu 18.10 Beta 這是官方提供的歡迎開發人員,熱心粉絲下載的 Ubuntu 18.10 測試版,以幫助測試下個月穩定釋出之前的版本。 Ubuntu 18.10 Beta Ubuntu 18.10 的釋出日期定在10月18日,在此之前,Ubuntu 18.10 測試

java寫檔案、匯出效率問題以及下載問題

首先比較常用的輸出流方法分為兩大類:OutputStream類和Writer類,分別有FileOutputStream、BufferedOutputStream、FileWriter和BufferedWriter。 通過以上兩篇文章我們可以發現,FileWri

使用freemarker 匯出word供別人下載

公司做專案需要一個功能,要求如下, 把符合條件的一個列表list 匯出成word,以供別人下載。 開始想使用poi 進行操作表,思來想去,對這個還是不熟悉, 也想用jacob進行操作,也不是很理想,上google的一把,找到了 http://blog.csdn.net/my

Aspose.Word之通過模板(書籤)匯出word文件刪除多餘的單元格

    public partial class WordExport_KJYJJRHLTHTS : System.Web.UI.Page    {        protected void Page_Load(object sender, EventArgs e)   

【Apache POI】Java Web根據模板匯出word檔案

最近工作中遇到一個需求:根據word模板文件匯出word檔案。 查閱了一些資料,發現Apache POI可以實現文件讀寫的功能,於是就研究了一下,總結如下: POI詳細介紹: Apache POI是一個開源的Java讀寫Excel、WORD等微軟OLE2元件

基於ABP做一個簡單的系統——實戰篇:4.基於富文字編輯器Razor模板引擎生成內容匯出Word 填坑記錄

起因 需求是這樣的,有一種協議需要生成,協議的模板是可配置的,在生成過程中,模板中的內容可以根據約定的標記進行替換(就像mvc的razor模板一樣)。生成後的內容還需要匯出成word或pdf。 常見的使用場景比如租賃協議生成,郵件內容模板生成等等,不要傻傻的hard-code像‘#name#’這樣的標記了。

C#使用NPOI讀取excel模板匯出excel

private void ExportDoctoryCase(HttpContext context) { //載入模板檔案路徑 string TempletFileName = context.Serv