使用freemarker实现在线展示文档功能开发,包括数据填充

首先,在这个独属于程序员节日的这一天,祝大家节日快乐【求职的能找到心仪的工作,已经工作的工资翻倍】。

---------------------------------------------------------------回到正文-----------------------------------------------------------------

现在需求如下:

复制代码
客户需要实现把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、前端拿到后直接做展示处理,页面打开效果如下:

结语:

复制代码
要是对您有帮助的话,就点个赞呗!!!!非常感谢
相关推荐
万维易源3 分钟前
免费药品信息查询:用API 读懂常用药
java·前端·数据库·药品信息·药品查询·药品查询api
wear工程师6 分钟前
Java 类初始化到底何时触发?别把加载、连接和 static 执行混在一起
java·jvm
hard_hot7 分钟前
RabbitMQ异步下单架构设计
java·rabbitmq·java-rabbitmq
郑州光合科技余经理15 分钟前
餐饮预定系统架构拆解:订单链路、权限组织与私有化源码交付
java·开发语言·前端·数据库·人工智能·系统架构·php
vx-程序开发30 分钟前
django汽车租赁系统---附源码25360
java·javascript·spring boot·python·eclipse·django·php
zhougl99635 分钟前
Java实现腾讯云开发者社区列表爬虫
java·爬虫·腾讯云
智码看视界36 分钟前
Day49-AI微服务化-将大模型能力封装为标准微服务
java·微服务·ai·架构·大模型·sse流式输出·ai中台
Nebula_g37 分钟前
JavaSE基础语法:特殊类(特殊情景下的设计模式)
java·开发语言·设计模式
2601_953824611 小时前
【计算机毕业设计】基于Spring Boot的宠物领养救助平台的设计与实现
spring boot·课程设计·宠物
2401_894915531 小时前
Geo 优化源码部署避坑指南:解决访问异常、定位失效、收录卡顿问题
java·服务器·后端·缓存·开源