java导出word文档,动态随机插入多张图片(web端可下载)

工具:freemarker
有关freemarker的加载方式可参照
https://www.cnblogs.com/qiaoqiaodi/p/7082878.html

1、创建模板
  网上有很多创建模板的文章可参考,大概可概括为以下几点
  ①建立word文档,根据自己的需求做好word内容的样式
  ②把word文档中,需要动态插入的内容替换为英文名称

java导出word文档,动态随机插入多张图片(web端可下载)_第1张图片
  ③关键的一步,word文档另存为,保存格式为Word XML文档

java导出word文档,动态随机插入多张图片(web端可下载)_第2张图片
  ④在另存为的xml文档中,把②中替换的英文名称替换为${xxx},作为模板参数

java导出word文档,动态随机插入多张图片(web端可下载)_第3张图片
  ⑤更改xml文档后缀,改为.ftl,模板建立完成。

2、编辑参数
     参数存放在map中,模板里所有的参数都要存在map中,map里的参数可以比模板参数多,但不能少
     Map dataMap = new HashMap();
        dataMap.put("title", “ddddd”);

3、导出word(web端下载功能实现)

 try {
            
            // 获取模板
            configuration.setClassForTemplateLoading(this.getClass(), 模板path);
            
            Template wordTemplate = configuration.getTemplate(template);
            
            // 文件名
            String fileNameEncoded = URLEncoder.encode(fileName, "utf-8");
            
            // 前端响应(HttpServletResponse)
            response.setContentType("application/vnd.ms-word");
            response.setHeader("Content-disposition", "attachment;filename=" + fileNameEncoded);
            
            // 写入数据
            Writer writer = response.getWriter();
            wordTemplate.process(dataMap, writer);
            
            writer.flush();
            writer.close();
            
        } catch (Exception e) {
            e.printStackTrace();
        } 

4、图片的导出
   网上有很多导出图片的方式,但都是导出到固定的参数,固定的位置。
   现在,要实现在某个区域,既要导出文字,又要导出图片,而且图片是根据条件,
   需要图片的时候就导出,不需要就不导出图片,实现图片的动态导出。

 ①实现这个功能,要先知道带图片word模板的结构,也就是xml结构
   格式化xml模板后,可以找与图片相关的xml内容有以下几个地方
       一、Relationships


		
			
				
				
			
		
	

 二、drawing,也就是图片所在word中的位置


	
		
		
		
		
			
		
		
			
				
					
						
						
					
					
						
						
                                                                                     
						
					
					
						
							
							
						
						
							
						
					
				
			
		
	

三、图片base64字节码存放的位置


		/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAAUDBAQEAwUEBAQFBQUGBwwIBwcHBw8LCwkMEQ8SEhEP
			................................
		
	

根据以上三段内容,可以看出,一个图片在word中正常显示,离不开以上三段xml。所以,实现动态导出图片。就要在代码中手动编辑三段xml,作为参数放在模板中。

     以上三段内容的关系如下:
     drawing中【】对应Relationships中的【      Relationships中的【】对应base64字节码的【      
     代码开发的时候,需要动态的改变【r:embed】、【Target】的值,一张图片对应一个值。

     导出图片的时候,可能需要对图片进行压缩,可以参考https://www.cnblogs.com/miskis/p/5500822.html

你可能感兴趣的:(经验,学习,java基础)