zoukankan      html  css  js  c++  java
  • 用java语言实现word导出文档服务

    一· 需要制作一个需要导出的word文档模板(使用wps导出xml(2003))然后将文件后缀名给为ftl----------------将文件xx.ftl放在后台代码的静态资源目录下(也就是template下)

    将其正你所需要填写字段通过${字段名}代替

    二·进行java代码的开发

    @RestController
    @AllArgsConstructor
    @RequestMapping("/word")
    public class WordExportController {
    private IWordExportService iWordExportService;

    /**
    * 获取文档数据
    *
    * @param request 请求参数
    * @param response 响应
    */
    @PostMapping("detail")
    你所需填入的数据对象通过request参数传入
    public void wordExport(HttpServletRequest request, HttpServletResponse response) {
    Map<String, Object> dataMap = new HashMap<>(20);
    iWordExportService.getData(dataMap, request);
    String dir = System.getProperty("user.dir");
    String annualReportPath = dir + File.separator + "blade-service" + File.separator + "blade-word-export" + File.separator + "src" + File.separator + "main" + File.separator + "resources" + File.separator + "template";
    File path = new File(annualReportPath);
    if (!path.exists()) {
    annualReportPath = dir + File.separator + "template";
    }
    String templateFile = annualReportPath + "\xx.ftl";
    String exportFile = annualReportPath + "\xx.doc";
    try {
    iWordExportService.getInstance().createDocFile(templateFile, dataMap, exportFile, 1);
    iWordExportService.downloadFile(exportFile, "xx.doc", request, response);
    } catch (Exception e) {
    e.printStackTrace();
    }
    }


    }

    //Service接口

    public interface IWordExportService {
    /**
    * 导出文档
    *
    * @param templateFilePath 模板文件路径
    * @param dataMap 数据
    * @param exportFilePath 下载文件路径
    * @param loadType 文件加载模式
    * @return file
    * @throws Exception 异常信息
    */
    File createDocFile(String templateFilePath, Map<String, Object> dataMap, String exportFilePath, int loadType) throws Exception;

    /**
    * 文件下载
    *
    * @param resourcepath 资源路径
    * @param filename 文件名
    * @param request 请求地址
    * @param response 请求地址
    */
    void downloadFile(String resourcepath, String filename, HttpServletRequest request, HttpServletResponse response);

    /**
    * 设置文档数据
    *
    * @param dataMap 数据
    */
    void getData(Map<String, Object> dataMap, HttpServletRequest request);

    /**
    * sdfsd
    *
    * @return file
    */
    IWisdomWordExportService getInstance();
    }
    //ServiceImpl实现类
    @Service
    public class IWordExportServiceImpl implements IWordExportService {
    private static Logger LOGGER = LoggerFactory.getLogger(WordExportApplication.class);
    private static String diagonal = "\";
    private static String http = "http";
    private static IWordExportServiceImpl service = null;
    private static Log log = LogFactory.getLog(WordExportApplication.class);

    private IWordExportServiceImpl() {
    super();
    }

    @Override
    public IWordExportServiceImpl getInstance() {
    if (service == null) {
    synchronized (WordExportApplication.class) {
    if (service == null) {
    service = new IWordExportServiceImpl();
    }
    }
    }
    return service;
    }

    @Override
    public File createDocFile(String templateFilePath, Map<String, Object> dataMap, String exportFilePath, int loadType) throws Exception {
    Template t;
    Configuration configuration = new Configuration(Configuration.VERSION_2_3_28);
    configuration.setDefaultEncoding("UTF-8");
    try {
    templateFilePath = pathReplace(templateFilePath);
    String ftlPath = templateFilePath.substring(0, templateFilePath.lastIndexOf("/"));
    if (loadType == 1) {
    // FTL文件所存在的位置
    configuration.setDirectoryForTemplateLoading(new File(ftlPath));
    } else {
    //以类加载的方式查找模版文件路径
    configuration.setClassForTemplateLoading(this.getClass(), ftlPath);
    }


    String ftlFile = templateFilePath.substring(templateFilePath.lastIndexOf("/") + 1);
    // 模板文件名
    t = configuration.getTemplate(ftlFile);

    File outFile = new File(exportFilePath);
    Writer out;

    out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile)));

    t.process(dataMap, out);
    } catch (Exception e) {
    LOGGER.error("导出word文档出错", e);
    throw e;
    }

    return null;
    }

    @Override
    public void downloadFile(String resourcepath, String filename, HttpServletRequest request, HttpServletResponse response) {
    FileInputStream fis = null;
    OutputStream out = null;
    if (StringUtil.isNotEmpty(filename) && StringUtil.isNotEmpty(resourcepath)) {
    try {
    filename = new String(filename.getBytes(StandardCharsets.UTF_8), "ISO8859-1");
    String realPath = request.getSession().getServletContext().getRealPath("/WEB-INF");
    realPath = realPath.replace("\hrm\WEB-INF", "");
    realPath.trim();
    fis = new FileInputStream(new File(resourcepath));
    //设置响应头和保存文件名
    response.setContentType("application/x-download");
    response.addHeader("Content-Disposition", "attachment;filename=" + filename);
    //写出流信息
    int b;
    out = response.getOutputStream();
    byte[] buf = new byte[1024];
    while (-1 != (b = fis.read(buf))) {
    out.write(buf, 0, b);
    }
    } catch (Exception e) {
    e.printStackTrace();
    } finally {
    try {
    fis.close();
    out.close();
    } catch (IOException e) {
    e.printStackTrace();
    }
    }
    }
    }


    /**
    * 把路径的替换成/
    *
    * @param path 替换前路径
    * @return 替换后路径
    */
    private String pathReplace(String path) {
    while (path != null && path.contains(diagonal)) {
    path = path.replace("\", "/");
    }
    return path;
    }

    /**
    * 测试用的
    *
    * @param dataMap 数据
    */
    @Override
    public void getData(Map<String, Object> dataMap, HttpServletRequest request) {
    System.out.println(request.getParameter("area1"));
    dataMap.put("titleName", request.getParameter("titleName") == null ? "xx" : request.getParameter("titleName"));
    dataMap.put("area", request.getParameter("area") == null ? "0" : request.getParameter("area"));
    dataMap.put("number1", request.getParameter("number1") == null ? "1" : request.getParameter("number1"));
    dataMap.put("index1", request.getParameter("index1") == null ? "无" : request.getParameter("index1"));
    dataMap.put("amount1", request.getParameter("amount1") == null ? "0" : request.getParameter("amount1"));
    dataMap.put("area1", request.getParameter("area1") == null ? "0" : request.getParameter("area1"));
    dataMap.put("percentage1", request.getParameter("percentage1") == null ? "0.00%" : request.getParameter("percentage1"));
    dataMap.put("number2", request.getParameter("number2") == null ? "1" : request.getParameter("number2"));
    dataMap.put("index2", request.getParameter("index2") == null ? "无" : request.getParameter("number2"));
    dataMap.put("amount2", request.getParameter("amount2") == null ? "0" : request.getParameter("amount2"));
    dataMap.put("area2", request.getParameter("area2") == null ? "0" : request.getParameter("area2"));
    dataMap.put("percentage2", request.getParameter("percentage2") == null ? "0.00%" : request.getParameter("percentage3"));
    dataMap.put("number3", request.getParameter("number3") == null ? "1" : request.getParameter("number3"));
    dataMap.put("index3", request.getParameter("index3") == null ? "无" : request.getParameter("number3"));
    dataMap.put("amount3", request.getParameter("amount3") == null ? "0" : request.getParameter("amount3"));
    dataMap.put("area3", request.getParameter("area3") == null ? "0" : request.getParameter("area3"));
    dataMap.put("percentage3", request.getParameter("percentage3") == null ? "0.00%" : request.getParameter("percentage3"));
    dataMap.put("number4", request.getParameter("number4") == null ? "1" : request.getParameter("number4"));
    dataMap.put("index4", request.getParameter("index4") == null ? "无" : request.getParameter("number4"));
    dataMap.put("amount4", request.getParameter("amount4") == null ? "0" : request.getParameter("amount4"));
    dataMap.put("area4", request.getParameter("area4") == null ? "0" : request.getParameter("area4"));
    dataMap.put("percentage4", request.getParameter("percentage4") == null ? "0.00%" : request.getParameter("percentage4"));
    dataMap.put("number5", request.getParameter("number5") == null ? "1" : request.getParameter("number5"));
    dataMap.put("index5", request.getParameter("index5") == null ? "无" : request.getParameter("number5"));
    dataMap.put("amount5", request.getParameter("amount5") == null ? "0" : request.getParameter("amount5"));
    dataMap.put("area5", request.getParameter("area5") == null ? "0" : request.getParameter("area5"));
    dataMap.put("percentage5", request.getParameter("percentage5") == null ? "0.00%" : request.getParameter("percentage5"));
    dataMap.put("number6", request.getParameter("number6") == null ? "1" : request.getParameter("number6"));
    dataMap.put("index6", request.getParameter("index6") == null ? "无" : request.getParameter("number6"));
    dataMap.put("amount6", request.getParameter("amount6") == null ? "0" : request.getParameter("amount6"));
    dataMap.put("area6", request.getParameter("area6") == null ? "0" : request.getParameter("area6"));
    dataMap.put("percentage6", request.getParameter("percentage6") == null ? "0.00%" : request.getParameter("percentage6"));
    dataMap.put("number7", request.getParameter("number7") == null ? "1" : request.getParameter("number7"));
    dataMap.put("index7", request.getParameter("index7") == null ? "无" : request.getParameter("number7"));
    dataMap.put("amount7", request.getParameter("amount7") == null ? "0" : request.getParameter("amount7"));
    dataMap.put("area7", request.getParameter("area7") == null ? "0" : request.getParameter("area7"));
    dataMap.put("percentage7", request.getParameter("percentage7") == null ? "0.00%" : request.getParameter("percentage7"));

    }

    private String getImageStr(String imgFile) {

    InputStream in;
    byte[] data = null;
    try {
    //获取在线图片
    if (imgFile.startsWith(http)) {
    URL url = new URL(imgFile);
    HttpURLConnection conn = (HttpURLConnection) url.openConnection();
    conn.setRequestMethod("GET");
    conn.setConnectTimeout(5 * 1000);
    in = conn.getInputStream();
    } else { //获取线下图片
    in = new FileInputStream(imgFile);
    }
    int c;
    ByteArrayOutputStream buff = new ByteArrayOutputStream();
    while ((c = in.read()) >= 0) {
    buff.write(c);
    }
    data = buff.toByteArray();
    buff.close();
    in.read(data);
    in.close();
    } catch (FileNotFoundException e) {
    e.printStackTrace();
    } catch (IOException e) {
    e.printStackTrace();
    }
    BASE64Encoder encoder = new BASE64Encoder();
    if (data != null && data.length > 0) {
    return encoder.encode(data);
    }
    return null;
    }
    }


  • 相关阅读:
    sqlserver中判断表或临时表是否存在
    Delphi 简单方法搜索定位TreeView项
    hdu 2010 水仙花数
    hdu 1061 Rightmost Digit
    hdu 2041 超级楼梯
    hdu 2012 素数判定
    hdu 1425 sort
    hdu 1071 The area
    hdu 1005 Number Sequence
    hdu 1021 Fibonacci Again
  • 原文地址:https://www.cnblogs.com/robotsu/p/13578225.html
Copyright © 2011-2022 走看看