首先,在这个独属于程序员节日的这一天,祝大家节日快乐【求职的能找到心仪的工作,已经工作的工资翻倍】。
---------------------------------------------------------------回到正文-----------------------------------------------------------------
现在需求如下:
客户需要实现把word文档直接展示在浏览器上查看。
实现技术:
1、使用WPS组件实现在线预览文档实现;
2、使用Freemarker技术及html、ftl模板后端返回整个html的字符串,前端直接展示。
最终选择:
综合考虑下选择了第二种来实现,下面是完整实现。
完整实现:
1、先把word模板转换成html模板。
可以直接使用这个在线转换网站来转: 点击跳转
【注意:不要使用WPS转html模板,样式、中文乱码都有问题】
原word模板如下:
转换后html模板如下:
2、把html模板放到resources/templates下[或者template都行]
3、添加freemarker依赖:
xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
3、Controller层代码如下:
java
@Autowired
@Qualifier("viewService")
private ViewService viewService;
@GetMapping("/view")
public String view(@RequestParam("formId") String formId, @RequestParam("beanId") String beanId)
throws IOException, TemplateException {
return viewService.view(formId, beanId);
}
4、Service层代码如下(这里就只提供实现层代码了):
java
import freemarker.template.Configuration;
import org.apache.commons.lang.WordUtils;
import org.springframework.ui.freemarker.FreeMarkerTemplateUtils;
@Override
public String view(String formId, String beanId) throws IOException, TemplateException {
//这是数据处理,查出数据,格式为Map,你们自己处理就行
//Map<String, Object> map = assembleParam(formId, beanId);
Configuration configuration = new Configuration();
//设置编码
configuration.setDefaultEncoding("UTF-8");
//ftl模板文件
configuration.setClassForTemplateLoading(WordUtils.class, "/");
//获取模板
Template template = null;
//这块需要写你自己的模板位置及名称
template = configuration.getTemplate("template/aa.html");
String resStr = FreeMarkerTemplateUtils.processTemplateIntoString(template, map);
return resStr;
}
5、postman测试返回数据如下:
该接口会以字符串的形式返回整个html,包括数据及样式。
6、前端拿到后直接做展示处理,页面打开效果如下:
结语:
要是对您有帮助的话,就点个赞呗!!!!非常感谢