FreeMarkerのをレンダリングするテンプレートを使用します

使用すると、Wordテンプレートの編集とレンダリングのための最近のプロジェクトは、そのテンプレートエンジンの技術を使用します。

プロジェクトでは、表示・保存(と同じワード形式)へのフロントエンドリッチテキストエディタ、FreeMarkerの描画データを使用してバックエンドを使用します。フロントエンドは、避ける、治療は、ちょうどショー、保存操作は非常に簡単です。

背景、テンプレートとデータ、ディスプレイ上でレンダリングした後、フロントへの復帰を取得する必要があります。

現在、入力文字列と入力ファイルの2つの形式が実現。(20180409)

次のようにFreemark統合と技術の使用は、以下のとおりです。

1.依存のMaven導入し

コードをコピー
        <! - https://mvnrepository.com/artifact/org.freemarker/freemarker - > 
        <依存> 
            <groupIdを> org.freemarker </ groupIdを> 
            <たartifactId> FreeMarkerの</たartifactId> 
            <バージョン> 2.3.23 < /バージョン> 
        </依存関係>
コードをコピー

カプセル化ツールutilsパッケージの2.

コードをコピー
輸入java.io.BufferedWriter; 
インポートのjava.io.File; 
輸入java.io.FileOutputStreamは、
輸入java.io.OutputStreamWriterが、
輸入java.io.StringWriter; 
輸入java.util.HashMapを; 
輸入java.util.Map; 

輸入org.apache.log4j.PropertyConfigurator; 

輸入com.winning.Application。
輸入com.winning.polaris.admin.service.impl.UpgradeServiceImpl; 
輸入com.winning.polaris.comm.util.LogUtil; 

輸入freemarker.cache.StringTemplateLoader。
輸入freemarker.template.Configuration。
輸入freemarker.template.Template; 

パブリッククラスFreemarkerUtils {  
    プライベート静的LogUtilロガー= LogUtil.getInstance(UpgradeServiceImpl.class)。
    プライベート静的な文字列defaultCharacter = "UTF-8"; 
    プライベート静的設定CFG。
    プライベートFreemarkerUtils(){ 
    } 
    静的{ 
        CFG =新しい構成(Configuration.getVersion())。
        cfg.setDefaultEncoding(defaultCharacter)。
        cfg.setTagSyntax(Configuration.AUTO_DETECT_TAG_SYNTAX)。
    } 
    / ** 
     *对模板进行渲染
     * @paramデータ数据地図
     * @param tplStr模板
     * @return 
     * / 
    パブリック静的文字列generateString(
            地図の<string、オブジェクト>データ、文字列tplStr){ 
        文字列結果= NULL; 
        文字列名=「myStrTpl」。
        {試します
            StringTemplateLoader stringTemplateLoader =新しいStringTemplateLoader(); 
            stringTemplateLoader.putTemplate(名前、tplStr); 
            cfg.setTemplateLoader(stringTemplateLoader); 
            テンプレートテンプレート= cfg.getTemplate(名前、defaultCharacter); 
            にStringWriterにStringWriter新しい新OUT =(); 
            template.process(データ、 OUT);   
            out.flush();   
            結果= out.toString(); 
            out.close(); 
        }キャッチ(例外E){   
            e.printStackTrace();   
        }   
        戻り結果; 
    } 
    / ** 
     *テンプレートを保存した後、レンダリングファイルへ
     * @param templateFileDirテンプレートディレクトリ 
     * @param fileNameにテンプレートファイル名
     * @param targetFilePathレンダリングされたファイル名の後に
     * @paramデータマップデータ
     @return * 
     * / 
    パブリック静的ブールrenderingTemplateAndGenerateFile(templateFileDir文字列、
            文字列のファイル名、文字列targetFilePath、地図<文字列、オブジェクト> DATAMAP){ 
            trueにブール=で旗; 
            試み{ 
                パスは、ファイルディレクトリの設定//   
                cfg.setDirectoryForTemplateLoading(新しいファイルを( templateFileDir)); //テンプレートパス   
                //取得テンプレート   
                テンプレートテンプレート= cfg.getTemplate(fileNameに); 
                //出力ファイル名を設定し、パスのセーブ   
                てoutFile =新しい新しいファイル(targetFilePath)ファイル; 
                //テンプレートデータモデルとマージファイル生成されたコード・セットは、設定を集中します  
                ;アウト=新しいBufferedWriterの(新しいのOutputStreamWriter(新しいのFileOutputStream(てoutFile)、 "UTF-8"))BufferedWriterの  
                //生成文件   
                template.process(DATAMAP、アウト)。  
                //关闭流   
                out.flush();  
                out.close(); 
            }キャッチ(例外e){ 
                logger.error( "生产模板文件失败!"、E)。
                フラグ= falseは、
            } 
        フラグを返します。
    } 
    
    
    パブリック静的無効メイン(文字列[] args){ 
        PropertyConfigurator.configure(Application.class.getClassLoader()getResourceAsStream( "設定" + File.separator + "log4j.properties")。)。

        地図<文字列、オブジェクト> DATAMAP =新しいHashMapの<文字列、オブジェクト>(); 
        dataMap.put( "APP_HOME"、 "C:/試験/ APPHOME")。
        ブールrenderingTemplateAndGenerateFile = renderingTemplateAndGenerateFile( "F:\\ freemark \\"、 "TEMP.TXT"、
                "F:\\ freemark \\ temp.bat"、データマップ)。
        
        System.out.println(renderingTemplateAndGenerateFile)。
    } 

}
コードをコピー

 

3.ユニットテスト

public  class  FreemarkerUtilsTest extends  TestCase {
     
     public  void  generateStringTest(){
         
         Map<String,Object> map= new  HashMap<>();
         map.put( "date" , "2017-05-11 11:55:55" );
         map.put( "caseNo" , "AJ00000001" );
         map.put( "descrip" , "这是描述信息==========" );
         String template= "案件编号为:${caseNo!}   "
                 + " 日期为:${date!} "
                 + " 自动获取日期为:${ .now?string('yyyy年MM月dd日')}"
                 + "描述:${descrip!}" ;
         String generateString = FreemarkerUtils.generateString(map, template);
         System.out.println( "------" );
         System.out.println(generateString);
     }
}

 結果:ケース番号:AJ00000001日:2017年5月11日11時55分55秒として自動取得日は次のとおりです。説明2018年1月29日:これは==========の説明である

テンプレートのレンダリングが完了しました。

おすすめ

転載: www.cnblogs.com/toSeeMyDream/p/12381243.html