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


  • 相关阅读:
    用chardet判断字符编码的方法
    NLP--edit distance
    nfc是什么?nfc功能是什么?
    【转载】推荐系统的十大挑战
    python--网络爬虫一
    【转载】双调欧几里得距离的算法原理
    Java并发编程:线程池的使用
    Java集合--HashMap源码剖析
    java中集合类详解
    java collection接口源码
  • 原文地址:https://www.cnblogs.com/robotsu/p/13578225.html
Copyright © 2011-2022 走看看