JAVA exporta documentos de Word basados en plantillas a través de EasyPoi

1. Introducir dependencias

备注:如果没有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. plantilla de palabras

3. Código específico

3.1 capa de controlador

@GetMapping(value = "/exportReportPreview") 
public void exportReportPreview(solicitud HttpServletRequest, respuesta HttpServletResponse, @RequestParam String no) lanza IOException { 
    accidentService.exportReportPreview(solicitud, respuesta, no); 
}

3.2 Clase de implementación

@Override 
public void exportReportPreview (solicitud HttpServletRequest, respuesta HttpServletResponse, número de cadena) lanza IOException { 

   Accidente accidente = this.getAccidentByNo(no); 

//★★★★★★★★La plantilla se almacena en el directorio de recursos, el directorio específico está determinado por sus propias necesidades Crear //"template/docx/accident/first report.docx" 
//fileSavePath es un directorio temporal (la prueba local es la ruta bajo una determinada letra de unidad y el servidor Linux es la ruta específica) 
    / /dirección de plantilla de palabra 
    TemplateExportParams templateExportParams = new TemplateExportParams( "template/docx/accident/first report.docx"); 
    String wordModelPath = templateExportParams.getTemplateUrl(); 
    //Generar dirección de archivo temporal 
    Map<String,Object> params = JSON.parseObject (JSON.toJSONString(accidente), clase Map.); 
    ExportWordUtil.exportWord(wordModelPath,fileSavePath,accident.getTitle() + ".docx",params,request,respuesta);

}

3.3 Herramientas

@Slf4j 
public class ExportWordUtil { 
    /** 
     * Exportar palabra 
     * <p>El primer paso es generar el archivo de Word reemplazado, que solo admite docx</p> 
     * <p>El segundo paso es descargar el archivo generado</ p> 
     * < p>El tercer paso es eliminar los archivos temporales generados</p> 
     * Formato de variable en las variables de plantilla: { 
   
   {foo}} 
     * @param templatePath dirección de plantilla de palabra 
     * @param temDir Generar dirección de almacenamiento de archivos temporales 
     * @ param fileName nombre de archivo 
     * @ param params Parámetros reemplazados 
     * @param request HttpServletRequest 
     * @param respuesta HttpServletResponse 
     */ 
    public static void exportWord(String templatePath, String temDir, String fileName, Map<String, Object> params, solicitud HttpServletRequest, respuesta HttpServletResponse) {  
        Assert.notNull( rutaPlantilla,"La ruta de la plantilla no puede estar vacía");
        Afirmar.notNull( temDir,"La ruta del archivo temporal no puede estar vacía");"ISO-8859-1"); 
            }
            } demás {
            fileName = new String( fileName.getBytes 
            ;

            )
                ("utf-8"), "ISO-8859-1" 
            doc.write(fos); 
            // Configura la descarga forzada para que no se abra 
            Response.setContentType("application /force-download"); 
            // Establece el nombre del archivo 
            respuesta.addHeader("Content-Disposition", "attachment;fileName= " + fileName); 
            OutputStream out = respuesta.getOutputStream(); 
            doc.write(out); 
            out .close(); 
        } captura (Excepción e) {separador; 
        }mkdirs(); 
        } 
        prueba {

        Directorio de archivo = nuevo archivo (temDir); 
            String userAgent = request.getHeader("user-agent").toLowerCase(); 
            if (userAgent.contains("msie") || userAgent.contains("como gecko")) { 
                fileName = URLEncoder.encode(fileName, "UTF-8"); 
            } else { 
                fileName = new String(fileName.getBytes("utf-8"), "ISO-8859-1"); 
            } 
            XWPFDocument doc = WordExportUtil.exportWord07(templatePath, parámetros); 

            String tmpPath = temDir + fileName; 
            FileOutputStream fos = nuevo FileOutputStream(tmpPath); 
            doc.write(fos); 
            // 设置强制下载不打开
            respuesta.setContentType("aplicación/descarga forzada"); 
            // 设置文件名
            respuesta.addHeader("Content-Disposition", "attachment;fileName=" + fileName); 
            OutputStream out = respuesta.getOutputStream(); 
            doc.write(out); 
            out.close(); 
        } catch (Exception e) { 
            e .printStackTrace(); 
        } 
        finalmente { 
            //Este paso depende de los requisitos específicos, ya sea para eliminar 
            delFileWord(temDir,fileName); 
        } 
    } 

    /** 
     * Eliminar el archivo generado en tiempo cero 
     */ 
    public static void delFileWord(String filePath, String fileName){
        Archivo archivo = nuevo archivo (rutadelarchivo+nombredelarchivo); 
        Archivo archivo1 = nuevo archivo (rutadelarchivo); 
        archivo.delete(); 
        archivo1.delete(); 
    } 
}

Supongo que te gusta

Origin blog.csdn.net/weixin_43005845/article/details/123706071
Recomendado
Clasificación