java生成word样式变形的解决方案(freemarker生成word的样式不对)
word的样式不对,被挤走了,怎么调dtl文件
文章目录
- 前言
- 一、现在的样式问题
- 1、现象1_(样式被挤掉)
- 2、现象2_(多了一个空白页,也是被挤下去的)
- 3、生成的word是代码
- 4、样式不对,被挤到第二页
- 二、解决的步骤
- 1.准备好一个word文档(当模板使用)
- 2、将模板中将你能选择的填充最大文字。
- 3、复制一份模板的doc,改为xml后缀
- 4、验证第三步的正确
- 5、用第3步的xml复制一份为.ftl
- 6、将 .ftl 存入项目,并动态化赋值。
- 三、代码实现
- 1、pom依赖
- 2、实现代码
- 四、修改后的效果
- 总结
前言
由于工作的需要,需要动态的生成一个word。从网上搜的一些资料实现了以后,发现样式一直变形,从下午一直整到晚上,才算是解决了,所以记录一下,希望能对后来者提供一定的帮助。本人水平有限,如有误导,欢迎斧正,一起学习,共同进步!
一、现在的样式问题
话不多说,直接上图片,大家有类似的问题,就可以参考我的解决的方案了。
1、现象1_(样式被挤掉)
2、现象2_(多了一个空白页,也是被挤下去的)
3、生成的word是代码
4、样式不对,被挤到第二页
二、解决的步骤
1.准备好一个word文档(当模板使用)
比如说这个是我的模板。比如说它的名字是: 收据.docx
注意这个后缀是 .docx,很重要!
2、将模板中将你能选择的填充最大文字。
比如说一行,你觉得这行你最多能填度多少字符,你就输入多少字符占位置,具体效果如下:
将文件另存为docx,此时是: 标准文件.docx
3、复制一份模板的doc,改为xml后缀
将步骤2的“标准文件.docx”,复制一份,命名为: 标准文件2.xml
注意,此时是**.xml**。
对比着你的模板,将其中的值挨着替换为 ${key} 的形式。
比如我,我就是将全部的“aaaaaaaaaaaaaaaaa”替换为 ${id}
模板:
要修改的xml:
4、验证第三步的正确
将改完的第3步的xml,复制一份出来,复制为: 标准文件3.xml
将这个xml的后缀改为 .docx 后缀,也就是标准文件3.doc,看看能否正常的打开是一个word并且key值都正确。
如果是下面的,则是正常的:
5、用第3步的xml复制一份为.ftl
将第三步的“标准文件3.xml”复制一份为“标准文件3.ftl”。重要的事情说三遍,用第3步的xml文件,用第3步的xml文件,用第3步的xml文件!!!千万不要用第4步的xml或者第4步的docx再改后缀为xml。 一定要用第三步的xml。
6、将 .ftl 存入项目,并动态化赋值。
三、代码实现
1、pom依赖
<!-- freemarker依赖--><dependency><groupId>org.freemarker</groupId><artifactId>freemarker</artifactId><version>2.3.28</version></dependency>
2、实现代码
/*** @author: ZhengTianLiang* @date: 2022/05/18 23:24* @desc:*/@GetMapping(value = "/test3")public void testExport3(HttpServletResponse response){Map<String, Object> dataModel = new HashMap<>();dataModel.put("id", "1909239239122342301");dataModel.put("date", "2019年 08 1月11 日");dataModel.put("company", "山东123省电力公司XXX供电公司");dataModel.put("bbb", "转账2123");dataModel.put("amount", "壹仟贰佰陆123123123拾捌元零贰分");dataModel.put("price", "1268.02");dataModel.put("content", "2019年7月XXXXX");dataModel.put("ddd", "转账2");// 全部都设置为1 是为了判断,字符串的长度样式的影响的
// dataModel.put("id", "1");
// dataModel.put("date", "1");
// dataModel.put("company", "1");
// dataModel.put("bbb", "1");
// dataModel.put("amount", "1");
// dataModel.put("price", "1");
// dataModel.put("content", "1");
// dataModel.put("aaa", "1");response.setCharacterEncoding("UTF-8");response.setHeader("Content-Disposition", "attachment; filename=books.doc");Configuration configuration = new Configuration(Configuration.VERSION_2_3_28);//加载模板Template template = null;try {
// template = wordConfiguration.getTemplate("document.ftl", "utf-8");
// template = wordConfiguration.getTemplate("test5.ftl", "utf-8");
// template = wordConfiguration.getTemplate("biao.ftl", "utf-8");template = wordConfiguration.getTemplate("msg.ftl", "utf-8");template.process(dataModel, response.getWriter());//response的Writer不需要我们手动关,tomcat会帮我们关的} catch (Exception e) {e.printStackTrace();logger.info("出错了");System.out.println("有何错了");}}
四、修改后的效果
完成上述问题的修改。
总结
大家也看出来了,代码很简单,主要还是 .dtl文件的生成。但凡又一步不对,估计样式就走形了(由于数据的长度不一致会把旁边的内容挤走),一把辛酸泪呀。如果大家有好的解决方案,也欢迎留言讨论。
java生成word样式变形的解决方案(freemarker生成word的样式不对)相关推荐
- java 如何将word 转换为ftl_Java之利用FreeMarker导出Word实例
开心一笑 感冒了很难受,她闷在被窝里给男朋友发短信"我感冒了..."并决定如果对方回答"多喝点水"就一脚踹了他.过一会儿手机振动起来,短信内容:"开门."......这个大笨蛋!谁让他来的啦!她起身用 ...
- 生成html页面的ftl文件,FreeMarker生成静态HTML页面的工具类FreeMarkerUtil
FreeMarker生成静态HTML页面的工具类FreeMarkerUtil 一.FreeMarkerUtil工具类: import com.huaxia.entity.News; import co ...
- java导出生成word文档_java使用freemarker 生成word文档
最近需要做一个导出word的功能, 在网上搜了下, 有用POI,JXL,iText等jar生成一个word文件然后将数据写到该文件中,API非常繁琐而且拼出来的样式也不美观,于是选择了另一种方式--- ...
- xdocreport word html,使用xdocreport和Freemarker生成word
如何使用Java生成Word文档呢?基本的想法就是使用一个现成的Word作为模版,需要用变量替换的地方,在word中使用一种模版语言来标记,然后再使用模版引擎把它替换掉. 具体的思路如图: Free ...
- java循环导出word文档_Java使用freemarker导出word文档
通过freemarker,以及JAVA,导出word文档. 共分为三步: 第一步:创建模板文件 第二步:通过JAVA创建返回值. 第三步:执行 分别介绍如下: 第一步: 首先创建word文档,按照想要 ...
- (详细)如何使用Freemarker生成Word文档中的文本、图片、表格、附件?
前言-Freemarker简单介绍 近期项目工作中需要编写大量格式相同但数据不同的Word文档,需要实现自动生成文档的效果,但是通过网上冲浪和官方文档搜索,相对来说,没有分类整理的文档,因此自己抽空简 ...
- 若依 springboot 使用freemarker生成word文件,并导出下载
目录 freemarker生成word文件并导出 一.环境准备 二.编写代码 1.实体类 2.mapper.xml文件 3.mapper.java文件 4.Service.java 5.Service ...
- word中endnotes更新文献,word崩溃闪退解决方案
word中endnotes更新文献,word崩溃闪退解决方案 word中endnotes更新文献,word崩溃闪退解决方案 1. 取消word中自动校对 2. 取消自动formating 3. 删除w ...
- java中利用freemarker生成样式比较复杂的word
这两天接到一个需求,要在系统中生成word版的需求规格说明书,领导给了个之前的样本给我,要求挺高,必须和给的样本基本一样. 基本样式主要有多级标题.动态图片.页眉页脚等,如下(内容部分因为隐私就不贴出 ...
最新文章
- 最新消息!腾讯紧急宣布再度延期复工时间到24号!附各大企业最新复工时间表...
- python在linux下安装方法(解决旧版本冲突)
- 【CyberSecurityLearning 77】DC系列之DC-8渗透测试(Drupal)
- 如何向本地MSDN帮助库中添加和修改一些帮助内容
- 乘基取整法是什么_十进制小数转二进制小数乘2取整法的直观理解
- oracle数据库连接检查,检查Oracle数据库的最大连接
- Windows域策略设置 IE信任站点【全域策略生效】
- python cx_oracle配置_用Python设置cx_Oracle环境变量
- 微博中微服务缓存_微服务实践分享(5)缓存中心
- 用python做flash动画_Flash交互动画的制作(一)
- 窄带包络解调python实现_对数据包络分析法DEA的再理解,以及python 实现
- 2021-04-28
- 明明有类、方法存在,java找不到符号解决办法
- 物欲横流的社会中,有没有那么一首诗、一首歌、一句话、一个词....不经意间勾起了你心中无限的回忆,甚至心都跟着微微颤抖了一下
- 基于移动终端的增强现实技术方案(已实现)
- 撩妹利器之心形函数代码
- Airbnb Embeding学习笔记
- 生态版图 | 10月份YashanDB获信创产品认证,并与3款产品完成互认证
- 2021年施工升降机司机(建筑特殊工种)考试及施工升降机司机(建筑特殊工种)新版试题
- Greasy Fork发布油猴脚本
热门文章
- Android给文件改后缀名
- PLB: Congestion Signals are Simple and Effective for Network Load Balancing读后思考
- 【ultraedit编辑器中怎么取消文件自动备份】
- 跨越敏捷 — 闲鱼研发效能升级之路
- mongodb 副本集测试
- 扩散模型(Diffusion)最新综述+GitHub论文汇总-A Survey On Generative Diffusion
- 4G+5G多卡聚合智能融合通信
- 【前端篇】火狐浏览器打开调试器,报“Error: Incorrect contents fetched, please reload.”
- 联想服务器重装系统快捷键,联想电脑如何重装系统快捷键
- 计算机无法完成更新如何处理,Win10更新过程中碰到“无法完成更新”怎么办