巧用freemarker生成vcard文件

      某天接到老大任务,加通讯录添加一个导出vcard 文件功能.当时就蒙了一下:什么来的?怎么没听说过.于是打开百度,GOOGLE搜了一下.哦原来子.借助万能的GOOGLE 还找到了VCARD4Jcardme 这两个开源类库操作vcard。稍微看了一下文档,有点迷糊,E文不好,没办法,后来想想,这vcard文件看起来不算复杂。何不借助模板引擎来自己生成呢?说干就干。

 

 在window通讯录里新建了一个联系人,反自己放进去了作小白了。

 

  导出一个人VCARD文件,再到google gmail上导个人出来。 对比看了一下格式。winxp 通讯录导出来的是2.0的。gmail的是3.0  两种版本规范具体有多大差别有多大没仔细去看E文。

 

 经过几小时折腾,发现winxp里通讯录用UTF-8是会出现乱码的。GMAILGBK还是UTF-8都没问题。在IPHONE(老大帮忙测试了,我这穷人可没这玩意 ,UTF-8才行,GBK有问题)。最后就用UTF-8的编码来生成文件。

 Freemarker相信很多人用这东西生成静态化网页。用来生成vcard文件原理一样。只不过模板变了。

 

 

public static void createVCardFile(String templatePath, String fileName,
			OutputStream ops, Page<UserJobBean> page, String encode)
			throws Exception {

		Configuration cfg = new Configuration();
		cfg.setClassicCompatible(true);
		cfg.setObjectWrapper(new DefaultObjectWrapper());
		cfg.setDefaultEncoding(encode);
		cfg.setOutputEncoding(encode);
		cfg.setDirectoryForTemplateLoading(new File(templatePath));
		Template template = cfg.getTemplate(fileName); //获取模板
		Map map = new HashMap();
		map.put("page", page);

		BufferedWriter out = new BufferedWriter(new OutputStreamWriter(ops,
				encode));
		template.process(map, out);

		
		if (out != null) {
			out.close();
		}
		if (ops != null) {
			ops.close();
		}

		// ops.write(bytes);

	}





 //若是 是web中点击下载记得
response.setHeader("Content-Disposition", "attachment; filename=\"" + filename + "\""); 

 

<#list  page.result as job >
BEGIN:VCARD
VERSION:3.0
N:${job.user.lastName};${job.user.middleName} ${job.user.firstName} | ${job.user.chineseName};;
FN:${job.user.middleName} ${job.user.firstName}
NICKNAME:${job.user.nickName}
TITLE:${job.title}
ORG:${job.team.department.businessUnit.businessUnit};${job.team.department.department}
TEL;TYPE=CELL:${job.user.mobile}
TEL;TYPE=WORK:${job.user.extension}
TEL;TYPE=WORK:${job.user.directNumber}
EMAIL;TYPE=INTERNET;TYPE=WORK:${job.user.email}
END:VCARD


</#list>

 

 

 

//打完收工,vcar文件这样就生成了!

你可能感兴趣的:(freemarker,百度,Google,mobile,Gmail)