關於使用FreeMarker如何做到在瀏覽器彈框選擇地址?

因爲在做項目的時候要涉及到導出Word,所有網上找了些資料,大部門的人都是使用FreeMarker製作模板,在導出Word。

但是在導出的時候遇到個問題,因爲導出的路徑我都是在JAVA代碼中寫好的,但是這樣肯定是不行的,然後在網上找了一些資料,看到也是比較多人遇到這個問題的,但是都沒有什麼解決的結果。得到的結果大多是叫我換另一種方式導出。這樣的話跟逃避有什麼區別。所有我就結合導出Excel的方式,通過如下代碼可以解決這個問題。

/**
     * 導出Word的操作方法
     *
     * @param objects 元模型ID,支持批量上傳
     * @throws Exception
     */
    public void createWord(List<Object> objects, HttpServletRequest request, HttpServletResponse response) throws Exception {

        //獲取ftl文件的路徑
        String patha = ExprotWord.class.getResource("/").toString();
        patha = patha.substring(0, patha.lastIndexOf("/"));
        patha = patha.substring(0, patha.lastIndexOf("/"));
        patha = patha.substring(0, patha.lastIndexOf("/"));
        patha = patha.substring(0, patha.lastIndexOf("/"));
        patha = patha.substring(patha.indexOf("/") + 1, patha.lastIndexOf("/"));
        //最終得到的路徑
        String sourcePath = patha + "/src/main/template";


        configuration.setDirectoryForTemplateLoading(new File(sourcePath)); // FTL文件所存在的位置
        configuration.setTemplateExceptionHandler(TemplateExceptionHandler.IGNORE_HANDLER);
        Template t = null;
        try {
            t = configuration.getTemplate("exprotWord.ftl"); // 文件名
        } catch (IOException e) {
            e.printStackTrace();
        }

        SimpleDateFormat sf = new SimpleDateFormat("yyyyMMddHHmmss");
        request.setCharacterEncoding("UTF-8");
        response.setCharacterEncoding("UTF-8");
        response.setContentType("application/msword");

        String resultUrl = "對象類型清單_" + sf.format(new Date()) + ".doc";
        //防止文件名含有中文亂碼
        resultUrl = new String(resultUrl.getBytes("gb2312"), "ISO8859-1");
        response.setHeader("Content-Disposition", "attachment;filename=" + resultUrl);
        response.getWriter();
        //存放的目標路徑
//        File outFile = new File(resultUrl);


        Map<String, Object> dataMap = new HashMap<String, Object>();


        getData(dataMap, objects);

        Writer out = null;
        try {
//            out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile), "utf-8"));
            out = response.getWriter();
            // 必須加 "utf-8" 不然在 UserInfoRestController 通過webservice的方式調用 生成的文件 打開
            // 不了,會報錯(而當做java程序去運行,則沒有"utf-8"生成的文件也能正常打開的),原因不詳
            // 規範編寫應該是要加上文件的編碼的"utf-8"
        } catch (Exception e1) {
            e1.printStackTrace();
        }

        try {
            t.process(dataMap, out);
            out.close();
        } catch (TemplateException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
String resultUrl = "對象類型清單_" + sf.format(new Date()) + ".doc";這段代碼是點擊導出的時候彈窗展示的

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章