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的样式不对)相关推荐

  1. java 如何将word 转换为ftl_Java之利用FreeMarker导出Word实例

    开心一笑 感冒了很难受,她闷在被窝里给男朋友发短信"我感冒了..."并决定如果对方回答"多喝点水"就一脚踹了他.过一会儿手机振动起来,短信内容:"开门."......这个大笨蛋!谁让他来的啦!她起身用 ...

  2. 生成html页面的ftl文件,FreeMarker生成静态HTML页面的工具类FreeMarkerUtil

    FreeMarker生成静态HTML页面的工具类FreeMarkerUtil 一.FreeMarkerUtil工具类: import com.huaxia.entity.News; import co ...

  3. java导出生成word文档_java使用freemarker 生成word文档

    最近需要做一个导出word的功能, 在网上搜了下, 有用POI,JXL,iText等jar生成一个word文件然后将数据写到该文件中,API非常繁琐而且拼出来的样式也不美观,于是选择了另一种方式--- ...

  4. xdocreport word html,使用xdocreport和Freemarker生成word

    如何使用Java生成Word文档呢?基本的想法就是使用一个现成的Word作为模版,需要用变量替换的地方,在word中使用一种模版语言来标记,然后再使用模版引擎把它替换掉. 具体的思路如图: Free ...

  5. java循环导出word文档_Java使用freemarker导出word文档

    通过freemarker,以及JAVA,导出word文档. 共分为三步: 第一步:创建模板文件 第二步:通过JAVA创建返回值. 第三步:执行 分别介绍如下: 第一步: 首先创建word文档,按照想要 ...

  6. (详细)如何使用Freemarker生成Word文档中的文本、图片、表格、附件?

    前言-Freemarker简单介绍 近期项目工作中需要编写大量格式相同但数据不同的Word文档,需要实现自动生成文档的效果,但是通过网上冲浪和官方文档搜索,相对来说,没有分类整理的文档,因此自己抽空简 ...

  7. 若依 springboot 使用freemarker生成word文件,并导出下载

    目录 freemarker生成word文件并导出 一.环境准备 二.编写代码 1.实体类 2.mapper.xml文件 3.mapper.java文件 4.Service.java 5.Service ...

  8. word中endnotes更新文献,word崩溃闪退解决方案

    word中endnotes更新文献,word崩溃闪退解决方案 word中endnotes更新文献,word崩溃闪退解决方案 1. 取消word中自动校对 2. 取消自动formating 3. 删除w ...

  9. java中利用freemarker生成样式比较复杂的word

    这两天接到一个需求,要在系统中生成word版的需求规格说明书,领导给了个之前的样本给我,要求挺高,必须和给的样本基本一样. 基本样式主要有多级标题.动态图片.页眉页脚等,如下(内容部分因为隐私就不贴出 ...

最新文章

  1. 最新消息!腾讯紧急宣布再度延期复工时间到24号!附各大企业最新复工时间表...
  2. python在linux下安装方法(解决旧版本冲突)
  3. 【CyberSecurityLearning 77】DC系列之DC-8渗透测试(Drupal)
  4. 如何向本地MSDN帮助库中添加和修改一些帮助内容
  5. 乘基取整法是什么_十进制小数转二进制小数乘2取整法的直观理解
  6. oracle数据库连接检查,检查Oracle数据库的最大连接
  7. Windows域策略设置 IE信任站点【全域策略生效】
  8. python cx_oracle配置_用Python设置cx_Oracle环境变量
  9. 微博中微服务缓存_微服务实践分享(5)缓存中心
  10. 用python做flash动画_Flash交互动画的制作(一)
  11. 窄带包络解调python实现_对数据包络分析法DEA的再理解,以及python 实现
  12. 2021-04-28
  13. 明明有类、方法存在,java找不到符号解决办法
  14. 物欲横流的社会中,有没有那么一首诗、一首歌、一句话、一个词....不经意间勾起了你心中无限的回忆,甚至心都跟着微微颤抖了一下
  15. 基于移动终端的增强现实技术方案(已实现)
  16. 撩妹利器之心形函数代码
  17. Airbnb Embeding学习笔记
  18. 生态版图 | 10月份YashanDB获信创产品认证,并与3款产品完成互认证
  19. 2021年施工升降机司机(建筑特殊工种)考试及施工升降机司机(建筑特殊工种)新版试题
  20. Greasy Fork发布油猴脚本

热门文章

  1. Android给文件改后缀名
  2. PLB: Congestion Signals are Simple and Effective for Network Load Balancing读后思考
  3. 【ultraedit编辑器中怎么取消文件自动备份】
  4. 跨越敏捷 — 闲鱼研发效能升级之路
  5. mongodb 副本集测试
  6. 扩散模型(Diffusion)最新综述+GitHub论文汇总-A Survey On Generative Diffusion
  7. 4G+5G多卡聚合智能融合通信
  8. 【前端篇】火狐浏览器打开调试器,报“Error: Incorrect contents fetched, please reload.”
  9. 联想服务器重装系统快捷键,联想电脑如何重装系统快捷键
  10. 计算机无法完成更新如何处理,Win10更新过程中碰到“无法完成更新”怎么办