这段时间项目中使用了freemarker生成word文档。在项目中遇到了几个问题,在这里记录一下。首先就是关于遍历遇到的坑。整行整行的遍历是很简单的,只需要在整行的<w:tr></w:tr>的标签钱加上遍历的<#list  list as list> </#list>就行了。我在这里要说的是前面还有合并单元格的时候的情况。如下图,水泥路面和沥青路面这几行属于申请占用面积的子行。在这里遍历的时候就需要注意。按照html的格式的话,肯定会将这整个刚做一个tr。然后再里面做colspan=‘n’来区分的。

在生成的flt的文件中可以看到,word生成出来的xml是将申请占用面积和水泥路面这个当作一个tr,算作一整行的,而其他三个每个是一个tr。当作一行。只是在前面了加上了<w:vmerge/>这个标签,表示跟前面的申请占用面积是合并的。最开始的时候,我将水泥路面和下面的人行道这几个看作是遍历体,直接将这四块遍历,生成出来的word总是会出来样式错乱的情况,在仔细分析生成的ftl文档后,才发现第一行和其他几行是又区别的。然后在后台代码里把第一个list单独取出来,其他的几个当作list遍历,就解决了问题。

另一个是关于图片的问题。最开始的时候,我是将图片的数据放到对象中当作一个属性的,然后通过${xxx.picData},将图片的base64放到图片标签中,这样无论如何就是不能将图片加载出来,还会导致文件加载不出来。但是直接将base64直接在标签里写死又是可以加载的。在试过好几种方法后,将图片的picData当作一个单值放到结果中就成功了,即${picData}.

Java Web项目中使用Freemarker生成Word文档遇到的问题的更多相关文章

  1. Java Web项目中使用Freemarker生成Word文档

    Web项目中生成Word文档的操作屡见不鲜.基于Java的解决方式也是非常多的,包含使用Jacob.Apache POI.Java2Word.iText等各种方式,事实上在从Office 2003開始 ...

  2. springboot中使用freemarker生成word文档并打包成zip下载(简历)

    一.设计出的简历模板图以及给的简历小图标切图         二.按照简历模板图新建简历word文件 :${字段名},同时将图片插入到word中,并将建好的word文件另存为xml文件:    三.直 ...

  3. java使用freemarker 生成word文档

      java 生成word文档     最近需要做一个导出word的功能, 在网上搜了下, 有用POI,JXL,iText等jar生成一个word文件然后将数据写到该文件中,API非常繁琐而且拼出来的 ...

  4. FreeMarker生成Word文档

    FreeMarker简介: FreeMarker是一款模板引擎:即一种基于模板和要改变的数据,并用来生成输出文本(HTML网页.电子邮件.配置文件.源代码等)的通用工具,它不是面向最终用户的,而是一个 ...

  5. 使用FreeMarker生成word文档

    生成word文档的框架比较多,比如poi,java2word,itext和freemarker. 调研之后,freemarker来实现挺简单的,具体步骤如下: 1. 新建word文档,占位符用${}, ...

  6. java使用freemarker生成word文档

    1.原料 开源jar包freemarker.eclipse.一份模板word文档 2.首先设计模板word文档 一般,通过程序输出的word文档的格式是固定的,例如建立一个表格,将表格的标题写好,表格 ...

  7. 用 Freemarker 生成 word 文档(包含图片)

    1. 用word写一个需要导出的word模板,然后存为xml格式. 2. 将xml中需要动态修改内容的地方,换成freemarker的标识符,例如: <w:p wsp:rsidR="0 ...

  8. 用 Freemarker 生成 word 文档

     阅读目录 添加图片 自定义载入模板 1.       用word写一个需要导出的word模板,然后存为xml格式. 2.       将xml中需要动态修改内容的地方,换成freemarker的 ...

  9. Freemarker生成word文档的时的一些&,>,<报错

    替换模板ftl中的内容的时候,一些特殊的字符需要转移,例如: &,<,> value为字符串 value.replace("&","& ...

随机推荐

  1. .NET分布式大规模计算利器-Orleans(一)

      写在前面 Orleans是基于Actor模型思想的.NET领域的框架,它提供了一种直接而简单的方法来构建分布式大规模计算应用程序,而无需学习和应用复杂的并发或其他扩展模式.我在2015年下半年开始 ...

  2. [Advanced Python] 15 - "Metaclass": ORM

    From: 使用元类 动态创建类 与静态语言最大的不同,就是函数和类的定义,不是编译时定义的,而是运行时动态创建的. 一 .type()动态创建 我们说class的定义是运行时动态创建的: 而创建cl ...

  3. 45道CSS基础面试题(附答案)

    1 .介绍一下标准的CSS的盒子模型?与低版本IE的盒子模型有什么不同的? 标准盒子模型:宽度=内容的宽度(content)+ border + padding + margin低版本IE盒子模型:宽 ...

  4. Python学习笔记整理总结【Django】:Model操作(二)

    1.操作汇总 # 增 # # models.Tb1.objects.create(c1='xx', c2='oo') 增加一条数据,可以接受字典类型数据 **kwargs # obj = models ...

  5. Google Test入门教程:从下载到运行

    本文以VS2019为例,自己的工程使用Debug x64,多线程调试DLL(/MDd),用户可以根据自己需求更改配置,只要所有配置前后统一即可. 第一步:clone Google Test源码 打开h ...

  6. vs code编码设置

    在使用vs code(版本1.35.0)打开文件时,出现乱码问题,可通过如下方式设置: 1.针对单个文件 点击右下角的编码按钮(图中为UTF-8),然后选择操作,通过编码重新打开(Reopen wit ...

  7. layui table 行按钮事件,启用禁用切换

    {{# ){ }} <a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="forbidden& ...

  8. Axure实现banner功能

    1.添加一个动态面板,添加上一张.下一张及当前banner对应的序号圆圈,如图所示: 当添加好元素后,实现自动轮播:点击[轮播图面板]页面:选中动态面板:右边添加事件编辑栏——属性——载入时——添加动 ...

  9. freemarker属性配置

    freemarker属性配置: spring.freemarker.allow-request-override=false # Set whether HttpServletRequest attr ...

  10. 让你如绅士般基于描述编写 Python 命令行工具的开源项目:docopt

    作者:HelloGitHub-Prodesire HelloGitHub 的<讲解开源项目>系列,项目地址:https://github.com/HelloGitHub-Team/Arti ...