JAVAはEasyPoiを介してテンプレートに基づいてWordドキュメントをエクスポートします

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(); 
    } 
}

おすすめ

転載: blog.csdn.net/weixin_43005845/article/details/123706071