1. 依存関係を導入する
备注:如果没有jar包冲突,可以忽略jar排重(<exclusions>标签内内容)
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-base</artifactId>
<version>4.3.0</version>
<exclusions>
<exclusion>
<artifactId>poi-ooxml-schemas</artifactId>
<groupId>org.apache.poi</groupId>
</exclusion>
<exclusion>
<artifactId>guava</artifactId>
<groupId>com.google.guava</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-web</artifactId>
<version>4.3.0</version>
<exclusions>
<exclusion>
<artifactId>guava</artifactId>
<groupId>com.google.guava</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-annotation</artifactId>
<version>4.3.0</version>
</dependency>
2.ワードテンプレート
3. 具体的なコード
3.1コントローラー層
@GetMapping(value = "/exportReportPreview") public void exportReportPreview(HttpServletRequest request, HttpServletResponse response, @RequestParam String no) throws IOException { 事故サービス.exportReportPreview(要求, 応答, no); }
3.2 実装クラス
@Override public void exportReportPreview(HttpServletRequest request, HttpServletResponse response, String no) throws IOException { Accident 事故 = this.getAccidentByNo(no); //★★★★★★★★テンプレートは、特定のディレクトリであるリソース ディレクトリに保存されます//"template/docx/accident/first report.docx" を作成します。 //fileSavePath は一時ディレクトリです (ローカル テストは特定のドライブ文字の下のパスであり、Linux サーバーは特定のパスです) / /word テンプレート アドレス TemplateExportParams templateExportParams = new TemplateExportParams( "template/docx/accident/first report.docx"); String wordModelPath = templateExportParams.getTemplateUrl(); //一時ファイル アドレスを生成 Map<String,Object> params = JSON.parseObject (JSON.toJSONString(accident), Map.class); ExportWordUtil.exportWord(wordModelPath,fileSavePath,accident.getTitle() + ".docx",params,request,応答); }
3.3 ツール
@Slf4j public class ExportWordUtil { /** * 単語のエクスポート * <p>最初のステップは、docx のみをサポートする置換された単語ファイルを生成することです</p> * <p>二番目のステップは、生成されたファイルをダウンロードすることです</p> p> * < p>3 番目のステップは、生成された一時ファイルを削除することです</p> * テンプレート変数の変数形式: { {foo}} * @param templatePath ワード テンプレート アドレス * @param temDir 一時ファイルの保存アドレスを生成します * @ param fileName ファイル名 * @param params 置換されたパラメータ * @param request HttpServletRequest * @param response HttpServletResponse */ public static void exportWord(String templatePath, String temDir, String fileName, Map<String, Object> params, HttpServletRequest request, HttpServletResponse response) { Assert.notNull( templatePath,"テンプレート パスを空にすることはできません");"UTF-8"); } それ以外 { fileName = new String( fileName.getBytes } ; ) ("utf-8"), "ISO-8859-1" doc.write(fos); // 強制ダウンロードを開かないように設定します response.setContentType("application /force-download"); // ファイル名を設定します response.addHeader("Content-Disposition", "attachment;fileName= " + fileName); OutputStream out = response.getOutputStream(); doc.write(out); out .close(); } catch (例外 e) {セパレータ; } ファイルディレクトリ = 新しいファイル(temDir); } 試してみましょう { String userAgent = request.getHeader("user-agent").toLowerCase(); if (userAgent.contains("msie") || userAgent.contains("like gecko")) { fileName = URLEncoder.encode(fileName, "UTF-8"); } else { fileName = new String(fileName.getBytes("utf-8"), "ISO-8859-1"); XWPFDocument doc = WordExportUtil.exportWord07(templatePath, params); 文字列 tmpPath = temDir + ファイル名; FileOutputStream fos = 新しい FileOutputStream(tmpPath); doc.write(fos); // 設置强制ダウンロード不打开 response.setContentType("アプリケーション/強制ダウンロード"); // 設置ファイル名 response.addHeader("Content-Disposition", "attachment;fileName=" + fileName); OutputStream out = response.getOutputStream(); doc.write(out); out.close(); } catch (Exception e) { e .printStackTrace(); } finally { //このステップは 、delFileWord(temDir,fileName)を 削除するかどうか、特定の要件によって異なります; } } /** * ゼロ時に生成されたファイルを削除します */ public static void delFileWord(String filePath, String fileName){ ファイル file =new File(ファイルパス+ファイル名); ファイル file1 =新しいファイル(ファイルパス); ファイル.削除(); file1.delete(); } }