国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Java 動態生成 復雜 .doc文件

2019-11-15 00:59:44
字體:
來源:轉載
供稿:網友
java 動態生成 復雜 .doc文件

項目中需要用 java 程序生成doc 文件,百度一番,FreeMarker 的評價比較高,FreeMarker是一個用Java語言編寫的模板引擎,它基于模板來生成文本輸出,至于想詳細了解 FreeMarker 的請去問百度.....

這篇博文主要是總結自己在用網上例子時遇到的坑。吃水不忘挖井人,還是要感謝分享技術的前輩。

原文鏈接:

http://www.360doc.com/content/13/0731/10/13247663_303740756.shtml[博主博客很漂亮,贊一個]

參照過的例子鏈接:

1.http://www.360doc.com/content/13/0731/10/13247663_303740756.shtml

2.http://blog.csdn.net/zhanwentao2/article/details/7255432

FreeMarker.jar 下載地址:

1.http://download.csdn.net/detail/pc159321/7077059

2.http://download.csdn.net/detail/zhaoshe/3153176

主要思路如下:

1.Word 里面調整好排版,包括你想生成的動態部分,還有一些不用生成的規則性的文字

2. 將 word 文檔保存為 xml

3.用Firstobject free XML edito 打開,將你需要動態生成的字段打上標記,${} 這樣就可以

FreeMarker 還支持需要豐富的標記,如果你想展示更復雜和豐富的內容,都可以實現;

Firstobject free XML edito 友情下載鏈接:

http://m.survivalescaperooms.com/know-life-death/archive/2012/02/01/2334742.html

4.將 xml 文件更改后綴名 為 .ftl, 然后引用到你的項目中

需要注意的問題:

a. word 版本不能低于 2003 ,因為 2003 才開始支持 xml;

b.用Firstobject free XML edito 打開 要編輯的 xml 文件時,記得xml 不要放在含有中文路徑的目錄中【編輯器會無響應,然后你知道的.....】。

實現的代碼如下:

 1 import java.io.BufferedWriter; 2 import java.io.File; 3 import java.io.FileOutputStream; 4 import java.io.OutputStreamWriter; 5 import java.io.Writer; 6 import java.sql.Connection; 7 import java.sql.ResultSet; 8 import java.util.HashMap; 9 import java.util.Map;10 11 import cn.sina.ttjava_13.database.DB;12 import freemarker.template.Configuration;13 import freemarker.template.Template;14 15 public class WordTest {16 17     PRivate Configuration configuration = null;18     private Connection conn;19     private ResultSet res;20 21     public WordTest() {22         configuration = new Configuration();23         configuration.setDefaultEncoding("UTF-8");24     }25 26     public void createWord() {27         Map<String, Object> dataMap = new HashMap<String, Object>();28         try {29             String selectSql = "SELECT ID,NAME,NORMALPRICE,MEMBERPRICE FROM T_PRODUCT WHERE 1 LIMIT 10";30             conn = DB.getConn();31             res = DB.getRs(conn, selectSql);32             while(res.next()){33                 dataMap.put("id", res.getString("id").trim());34                 dataMap.put("name", res.getString("name").trim());35                 dataMap.put("normalprice", res.getString("normalprice").trim());36                 dataMap.put("memberprice", res.getString("memberprice").trim());37                 38                 configuration.setClassForTemplateLoading(this.getClass(), "/template"); // FTL文件所存在的位置39                 Template template = configuration.getTemplate("Product.ftl");40 41                 File outFile = new File("D:/temp/"+ res.getString("name").trim().replaceAll("/", "") +".doc");42                 Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile),"UTF-8"));43                 template.process(dataMap, out);44                 out.close();45             }46             DB.close(res);47             DB.close(conn);48         } catch (Exception e) {49             e.printStackTrace();50         }51     }52 53     public static void main(String[] args) {54         WordTest test = new WordTest();55         test.createWord();56     }57 }

a. 代碼數據庫MySQL ,將查詢到的數據,動態填入到wod 中;

b.template.process(),接受一個 Map 和 輸入流做為入參,Map 既是你需要動態生成到 doc 里面的數據,字段名必須與你在 .ftl 里面定義的一致;

c. 我覺得數據的來源可以很多,程序計算的結果,數據庫存儲的數據,頁面點擊的數據.........

d. 如果你想利用這段代碼,需要有一個 .ftl 文件,并且在你的項目 src 目錄下面新建 template 目錄;

e.我不知道怎樣把 .ftl 文件上傳上來,如果需要做例子的,請在下面留言,我發給你。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 上虞市| 白银市| 玉门市| 湘阴县| 六盘水市| 青浦区| 焉耆| 乳山市| 涟水县| 休宁县| 瓮安县| 黄石市| 镇原县| 高雄县| 新建县| 怀安县| 克山县| 怀宁县| 诸城市| 聊城市| 庆元县| 胶南市| 上栗县| 台安县| 临漳县| 泸西县| 宜章县| 固安县| 资源县| 庄河市| 衡南县| 庄河市| 广饶县| 阳信县| 慈利县| 将乐县| 阜新市| 凤山市| 丹江口市| 大悟县| 土默特右旗|