使用すると、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日:これは==========の説明である
テンプレートのレンダリングが完了しました。