|
今日は、FreeMarkerテンプレートエンジンをSpring Bootと統合してWordファイルを生成する方法をご紹介します。ご興味のある方は、ぜひご活用ください。完全なソースコードは記事の最後に掲載しています。ぜひ議論やアイデアの交換をお待ちしております! I. FreeMarker とは何ですか? FreeMarker はオープンソースのテンプレート エンジンです。テンプレートと動的に入力されたデータを使用して、出力テキスト (HTML Web ページ、Word 文書、電子メール、構成ファイル、ソース コードなど) を動的にレンダリングおよび生成する汎用テクノロジです。 テンプレートはFreeMarkerテンプレート言語(FTL)で記述されます。これはシンプルで特化した言語であり、PHPのような完成度の高いプログラミング言語とは異なります。そのため、FTLは主にデータの表示方法に重点を置いており、表示する具体的なデータには、より成熟したプログラミング言語(Java、C#、Pythonなど)が必要です。 FreeMarker の概略図は次のとおりです。 II. サンプルコード1. FreeMarker依存パッケージをインポートする <!-- HTML メール テンプレートを作成するための FreeMarker 依存パッケージ <依存関係> <グループ ID > org .springframework .boot </グループ ID > <artifactId> スプリング-ブート-スターター- フリーマーカー</artifactId> </依存関係> 2. application.yml で FreeMarker を設定するフリーマーカー: cache : false # キャッシュを有効にするかどうか。開発環境では、テンプレートの頻繁な変更とデバッグが必要となるため、キャッシュを有効にすることは推奨されません。 設定: クラシック互換: true 拡張子: .html #主に.tpl形式 文字セット: UTF - 8 template - loader - path : classpath : / templates / #テンプレート パス。通常はこれがテンプレート パスです。
3. 新しいクラスIExportService.javaを作成するパッケージ com .springboot .email .email .service ;
javax.servlet.http.HttpServletResponse をインポートします。 java.util.Map をインポートします。
パブリックインターフェイスIExportService {
void exportDocFile ( String fileName 、 String tplName 、 Map < String 、 Object > data )は Exception をスローします。
void exportDocToClient ( HttpServletResponse 応答、 String fileName 、 String tplName 、 Map < String 、 Object >データ)は Exception をスローします。 } 4. IExportService.java インターフェイスの新しい実装クラス、ExportServiceImpl.java を作成します。 パッケージ com .springboot .email .email .service .impl ;
com .springboot .email .email .service .IExportServiceをインポートします。 freemarker .template .Templateをインポートします。 org.springframework.beans.factory.annotation.Autowired をインポートします。 org.springframework.stereotype.Service をインポートします。 org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer をインポートします。
javax.servlet.http.HttpServletResponse をインポートします。 java.io. *をインポートします。 java .net .URLEncoderをインポートします。 java.util.Map をインポートします。
@サービス パブリッククラス ExportServiceImpl は IExportService を実装します{ プライベート文字列エンコーディング; プライベート文字列 exportPath = "D:\\export\\" ; @オートワイヤード プライベート FreeMarkerConfigurer freeMarkerConfigurer ; パブリックテンプレート getTemplate (文字列名)例外をスローします{ freeMarkerConfigurer.getConfiguration ( ). getTemplate ( "test.html" )を返します。 }
@オーバーライド public void exportDocFile ( String fileName , String tplName , Map < String , Object > data ) throws Exception { //ディレクトリが存在しない場合は作成します。 ファイル exportDirs =新しいファイル( exportPath ) ; if ( ! exportDirs .exists ( ) ) { exportDirs .mkdirs ( ) ; } ライター writer = new BufferedWriter ( new OutputStreamWriter ( new FileOutputStream ( exportPath + fileName ) , encoding ) ) ; getTemplate ( tplName ) .process (データ、ライター) ; }
@オーバーライド public void exportDocToClient ( HttpServletResponse レスポンス、 String fileName 、 String tplName 、 Map < String 、 Object >データ)例外をスローします{ レスポンスをリセットします。 レスポンス.setCharacterEncoding ( "UTF-8" ) ; レスポンス.setContentType ( "application/msword" ) ; レスポンス.setHeader ( "Content-Disposition" 、 "attachment; filename=" + URLEncoder .encode ( fileName 、 "UTF-8" ) ) ; //ローカルファイルをクライアントに送信する ライター out = response .getWriter ( ) ; テンプレート template = getTemplate ( tplName ) ; テンプレート.process (データ、出力) ; out.close ( ) ; } }
5. 新しいテンプレートファイル test.html を作成します。具体的な詳細については、ソースコードを参照してください。テンプレートファイルを作成するには、新しいWord文書を作成し、フォーマットを調整してXMLファイルとして保存し、文書内のループマーカーを調整してから、HTMLファイルとして保存してプロジェクトに配置します。 ご質問がございましたら、お気軽にメッセージを残してください。 6. 新しいテストクラスExportController.javaを作成する @RestController @RequestMapping ( "/エクスポート" ) パブリッククラスExportController { @オートワイヤード プライベート IExportService エクスポートサービス; @RequestMapping (値= "/testWord " 、メソッド= RequestMethod .GET ) public void exportWord ( HttpServletRequest リクエスト、 HttpServletResponse レスポンス)例外をスローします{ 文字列 fileName = "Test Word Export.doc" ; //ファイル名 //ヘッダーデータを設定する Map <文字列、オブジェクト> dataMap =新しい HashMap <> ( ) ; dataMap.put ( "name" 、 "Xiaoming" ) ; dataMap.put ( "regAddress" 、 "蘇州" ) ; //テーブルデータを設定する リスト< ScoreVo > list =新しい ArrayList <> ( ) ; ScoreVo vo1 =新しい ScoreVo ( ) ; vo1.setCourseName ( "英語" ) ; vo1.setScore ( 95 ) ; vo1.setRank ( 3 ) ; ScoreVo vo2 =新しい ScoreVo ( ) ; vo2.setCourseName ( "数学" ) ; vo2.setScore ( 100 ) ; vo2.setRank ( 1 ) ; リストに追加( vo1 ) リストに追加( vo2 ) dataMap .put ( "courseList " 、リスト) ; exportService .exportDocToClient (レスポンス、ファイル名、 "test.html" 、データマップ) ; } }
アクセスアドレス: http://localhost:8080/export/testWord エクスポートされたファイルの結果: Gitee アドレス: https://gitee.com/hgm1989/springboot-email.git |