这里主要提到是需要注意的几个地方,适合已经研究过使用过freemarker+xml方式导出word的伙伴们,在此基础上应该一看就明白。若看不懂请自行查找导出word的资料,资料很多,这里主要是记录下导出包含富文本内容和图片的方式,以便后续自查。
需求是需要按照特定模板导出word,其中有些功能模块的内容是使用ckeditor编辑器填写的,这就涉及到了导出时要兼容富文本所包含的html标签,
这里多说两句:有两种情况
一、导出内容不包含富文本内容和富文本中增加的图片的情况,大体使用freemarker+xml方式,制作模板步骤:用office的word(据说WPS做得模板不可用,未亲测)做导出模板–>另存为xml格式文件—>再直接改后缀名为ftl放入项目中。我是先用的freemarker+xml方式导出word,发现解析不了html,又改用的freemarker+mht方式。因为他解析不了html代码,所以导出富文本内容没有合格结构是乱的,图片也无法显示
二、导出内容包含富文本和图片,大体使用freemarker+mht方式,制作模板步骤:用office的word(据说WPS做得模板不可用,未亲测)做导出模板–>另存为mht格式文件—>再直接改后缀名为ftl放入项目中
下面我们着重介绍下第二中情况:
本人做的时候也是网上各种查资料,特此感谢两篇文章大家也可以看下 文章一 文章二
特别感谢其中一位博主,还提供了源码包,放入项目中只需要根据项目实际情况调整下图片路径和导出word方式即可。
- 1、做模板
首先第一步是制作模板,模板步骤见上面,制作模板时也可以不用占位符使用常量占位,到程序中知道显示位置再改成${} 占位符也是一样的。使用1111或者aaa的常量,个人感觉模板排查起来要方便些
- 2.处理mht文件
打开我们的mht文件并处理,我使用EditPlus查看编码,很多编辑器都可以打开看代码,需要注意的是,模板生成时有时占位符${content!’’}有可能会被word自身的标签截断,因为mht文件有时候会自动换行,会在单词中间加上= 号 或者在{ 等符号与单词之间加上一些mht文件的样式,我们都要删掉,不删掉可能会造成模板异常,
- 2.1在模板中找到下面截图中的代码
${imagesBase64String} 和 ${imagesXmlHrefString}这两个占位符是我们手动加进去的,简析富文本图片的核心就在这里,按照这个位置加进去即可
- 2.2全文检索gb2312把他改成utf-8,看到前面加上3D前缀的要保留mht文件很多地方都是以3D为标识的
- 2.3 在模板文件中找到Content-Location: file:///C:/B2260B68/file7736.files,并记录下来,后面代码中要用到
到这里模板文件就做完了,后缀名改为ftl放入项目中,如何取值或者list循环取值,判断等等都是freemarker规则,跟ftl一样使用
- 3、下面主要介绍代码中主要的几部分,详细的请下载源码包查看
- 代码中有下图中的代码块,设置的值就是上面在模板文件中找到的,相匹配上就可以了,后三项具体为