超详细 JAVA 通过freemarker 填写Word表格

最开始想用poi处理word,但是发现poi不支持对doc格式文件的图片处理

maven导包

 

                
		 org.freemarker
		 freemarker
		 2.3.23
		

 首先我们创建一个word文档,并创建出我们想要的表格。

 完成后,在表格中插入freemarker的标识符。

  注意,这种写法看起来是正确的,实际是错误的,后面再生成xml文件的时候,会因为word的词语辨析功能,将文字进行拆分 ,最好的办法就是只写我们的单个英文单词,记住是单个,不要写成组合词。

正确写法

然后保存为xml格式,查找到department这个单词,再改写为${department}

对于图片,也比较坑,一般word中使用base64数据进行图片加载,所以如果你想要插入图片,需要现在你的文档中插入对应的图片,并且调整好大小,

超详细 JAVA 通过freemarker 填写Word表格_第1张图片

比如,这里已经是我们想要的效果了,记得图片一定要留在word中,这样再生成xml文件,会看到原文件处,有乱码

超详细 JAVA 通过freemarker 填写Word表格_第2张图片

去掉所有的乱码,注意两头的标签不要去掉,那是帮助我们判断生成图片大小的内容。

将乱码部分改为你的标签比如 ${sign}

保存,接着将xml改为ftl格式,就可以了。

附上代码,代码简单。

try {
			//这里只是flt模板的路径不是文件
			File file = new File("C:/Users/TLJ/Desktop/freemarker");
			configuration.setDirectoryForTemplateLoading(file);
			configuration.setDefaultEncoding("utf-8");
			configuration.setEncoding(Locale.getDefault(), "utf-8");
			//这里只是文件 不是没有路径
			Template template = configuration.getTemplate("poiTest.ftl");
			HashMap hashMap = new HashMap<>();
			FileInputStream in = new FileInputStream("C:/Users/TLJ/Desktop/新建文件夹 (2)/sign.jpg");
			String imageString = getImageString(in);
			hashMap.put("sign", imageString);
			hashMap.put("department", "维修安装部");
			FileOutputStream fos = new FileOutputStream("C:/Users/TLJ/Desktop/freemarker/test2.doc"); 
			OutputStreamWriter oWriter = new OutputStreamWriter(fos,"UTF-8"); 
			template.process(hashMap, oWriter);
			fos.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
public static String getImageString(InputStream in){
		byte[] data = null;
		try {
			data = new byte[in.available()];
			in.read(data);
			in.close();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally{
			if(in!=null){
				try {
					in.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}
		BASE64Encoder encoder = new BASE64Encoder();
		return data !=null?encoder.encode(data):"";
	}

word中框框勾为2611 + alt+x   框框x为2612 + alt +x

              
                
                  
                  
                  
                  
                  
                  
                  
                
                
              

 

 

你可能感兴趣的:(超详细 JAVA 通过freemarker 填写Word表格)