freemarker

java中使用freemarker导出word文档

我的梦境 提交于 2019-11-29 10:42:39
公司项目要求要有一个能导出成一份word文档的功能,于是就上网搜了一些教程,但我跟着教程使用的时候还是遇到了很多问题,这里我自己总结一份我作为新手使用freemarker能看懂的文章。可能以后自己还会用到,至少到时候忘了还可以翻看一下。 首先要自己在网上下载一个freemarker的jar包,这个直接百度就有,不赘述了。向自己的项目中导入刚才下载的freemarker的jar包,然后把自己需要展示数据的文档打开,例如我的文档是这样: 因为我的项目需求是要把项目中的错误类型及其对应个数导出成一份word文档,然后展示出来,这个word文档是组长给的文档模板,然后我只要将数据填充到对应的位置就可以了。所以这份模板中其他的东西都是可以不用管的,只要修改你需要填入数据的字段就可以。这里我需要填入的字段是“出厂编号为空”,“热稳定电流为空”,“设备参数不准确”,“同型号设备出厂编号相同”,“总数”等。然后我要修改的是他们分别对应的字段,也就是后面的数量,这里需要把数量那里填入英文,拼音也可以,总之不要用中文,因为在后面我们需要在文件中修改这些字段。所以我分别在他们对应的位置中填入了“factoryNull”,“iNull”等等字段。把字段改好之后,我们把这份文档另存为xml的文件格式 然后再次打开这份xml文档,我是用notepad++打开的,按下快捷键ctrl

FreeMarker导出Word(带图片、解决图片变形问题)

喜你入骨 提交于 2019-11-29 10:40:54
思想说明: 本文内容的核心:使用FreeMarker的模板引擎技术,导出word。 总体步骤: 第一步:创建一个word模板,里面的对应位置使用FreeMarker的占位符表示。 注:为了导出的word兼容2003版本,我们创建的word模板,最好是doc后缀的。 注:本人用的是wps,office应该也是一样的(这个没试过)。 第二步:将该word,另存为xml文件。 提示:也可以第二步时先用一个特别的字符占位,然后在第三步时,再在xml中将对应的字符替换为FreeMarker能识别 的占位符。 第三步:打开该xml文件,检查占位符是否"变形" 提示:本人是以安装了indent XML插件的sublime打开的。 注:有时,另存为xml时,占位符可能会变形(如:“${age}”变为“${ag</w:t></w:r></w:p></w:tc>e}”),这就会导致FreeMarker 不能识别,那么就需要我们手动调整或者重复第二步重新生成,直到所有的占位符都正确。 第四步:创建一个项目,并引入FreeMarker的jar包。 <!--FreeMarker --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-freemarker</artifactId>

java使用freemarker模板导出word(docx格式;流形式输入输出)

不打扰是莪最后的温柔 提交于 2019-11-29 10:39:38
前言:好久没有更文了,最近又再做关于导出word文档项目。其实网上很多有关导出的博文,多数是大同小异的,但是还远远不能满足我的需求。之前写过一篇导出word的文章,那个还不太成熟,随着业务的增加,肯定有了不小的变化,所以今天这篇文章索性就叫续集吧,希望可以帮到大家! 上一篇写的是有关doc格式的。具体详情请访问: 点击打开链接 ,在这里说明一下上篇存在的一些问题: 1、记得上篇说到获取模板的时候,是通过new File("url")的形式来获取的;其实我是不推荐这种方式的,除非是你们的需求就是这样要求的;我在导出的过程中,模板(testword.ftl)是以Blob大型文件存在mysql中的,然后我可以以流的形式获取到这个模板,包括导出过程中,任意涉及到文件的输入输出的时候,尽量的都要使用流来操作;下面我贴一下代码: 我想你百度了很多导出的文章,应该大多数都是以下面这种形式获取的吧: System.out.println("---进入createDocArea---"); this.configuration.setDirectoryForTemplateLoading(new File("/template/"));//第二种模板路径 Template t = null; File outFile = null; byte[] bFile = null; try { t =

java使用freemarker导出word

梦想的初衷 提交于 2019-11-29 10:39:02
生成标准格式word请戳这里==>java使用freemarker导出word(标准格式版) 需求背景 :根据模板的样式,导出不同内容的word。内容包括文字,图片,页眉等。 经过不同的尝试,最终选择使用freemarker来实现。 选择的原因 :支持多图片,可以根据编辑的word模板导出,样式不会错乱。 主要分为以下几步: 创建一个docx的word文档,编辑好模板,比如trip.docx。 trip.docx另存为trip.xml 格式化trip.xml(方便阅读和替换里面的变量) 替换变量,更改为trip.ftl放入项目中 java代码填充数据,并保存word 具体操作如下: 第一步:创建word文档trip.docx 如图: 从图中可以看出,这个文档包含的内容。对于数据结构相同的内容在模板中可以只写一次。 比如:图中的日期和城市,只要写出第一天就行。 图中的行程设计也只需要写DAY1的全部内容即可。其他相同数据结构,在freemarker中进行循环遍历。 第二步:把trip.docx另存为trip.xml 使用文本编辑工具打开trip.xml,可以notepad++或者sublime text3或者其他编辑器打开。我使用的是sublime text3。打开后会发现xml格式是压缩的,可以进行格式化一下(百度xml格式化或者使用编辑器的插件)。如图: 格式化前: 格式化后:

get queryString of a URL on FreeMarker

纵然是瞬间 提交于 2019-11-29 10:04:49
learning FTL here. I'm trying to get add a query string on my FTL page, like http://localhost/search , i'd like to add a query string on the URL, say http://localhost/search?bing so that user could switch with the default setting when there is no query string. However, I have no luck on grabbing the queryString from the URL. I'm also trying to avoid using a JavaScript solution on this. here's my code: <#if RequestParameters.bing?exists > <#assign useServer = "http://www.bing.com"> <#else> <#assign useServer = "http://www.google.com"> </#if> <h1>${useServer}</h1> typing in the queryString into

Freemarker parse a String as Json

陌路散爱 提交于 2019-11-29 07:41:33
Probably it's not possible, but I would like to transform a json string in a map with freemarker ex: <#assign test = "{\"foo\":\"bar\", \"f\":4, \"text\":\"bla bla\"}"> and be able to get the text key from this string Use ?eval . It works because JSON maps happen to be valid FreeMarker expressions (update: except that null is not recognized in FreeMarker 2.3.x). <#assign test = "{\"foo\":\"bar\", \"f\":4, \"text\":\"bla bla\"}"> <#assign m = test?eval> ${m.foo} <#-- prints: bar --> <#-- Dump the whole map: --> <#list m?keys as k> ${k} => ${m[k]} </#list> (BTW, you don't have to use \" if you

使用freemarker生成word文档

我们两清 提交于 2019-11-29 06:39:23
项目有时候需要将一些内容导出成word格式,实现方式很多种,如:POI导出,freemarker导出。freemarker导出比较简单。 主要分三步: 新建一个word文档 生成模板 动态生成word。 新建一个word文档。 新建一个word文档,把格式和内容定好。如下图:导出内容和导出人两部分,到时候会根据运行时内容替换。 为了方便修改模板,建议写一些文字,否则修改模板的时候,不知道在哪改。 最好不要直接写freemarker标记。word有可能会将${marker}这几个字符分开存储。 生成模板 将填好的模板,保存成xml格式。 用xml编辑工具,记事本即可。将里面导出内容和导出人这两个动态内容换成freemarker模板语言。 改成: 注意编辑工具的字符集一定要和XML字符集一致,否则会造成乱码。 动态生成word内容 java代码: 1 public class WordHandler { 2 private Configuration configuration = null ; 3 Log logger = LogFactory.getLog(WordHandler. class ); 4 5 public WordHandler() { 6 configuration = new Configuration(); 7 configuration

does freemarker support show all variable in data-model?

只愿长相守 提交于 2019-11-29 06:24:51
I want to see all variables in freemarker data-model, just like struts2 debug tag to show value stack. Is there a way for freemarker to do this ? ddekany There's no universal solution possible for that, but you can try <#list .data_model?keys as key> ${key} </#list> This works if the data-model is just a usual Map or JavaBean, but for more sophisticated data-models it's up to the data-model implementation if it supports ?keys and if it indeed returns everything. You also have the variables that you set in the templates, which can be listed like above, only instead of .data_model use .globals ,

Import one FTL file inside another FTL file

﹥>﹥吖頭↗ 提交于 2019-11-29 06:08:41
I have created one DIV inside a FTL file and that DIV contain form now say i have another FTL file and i want to use first FTL's div inside second FTL file is this possible deepak.ftl <div id="filterReportParameters" style="display:none"> <form method="POST" action="${rc.getContextPath()}/leave/generateEmpLeaveReport.json" target="_blank"> <table border="0px" class="gtsjq-master-table"> <tr> <td>From</td> <input type="hidden" name="empId" id="empId"/> <td> <input type="text" id="fromDate" name="fromDate" class="text ui-widget-content ui-corner-all" style="height:20px;width:145px;"/> </td> <td

在Spring+FreeMarker框架中使用Shiro的Tag标签

半腔热情 提交于 2019-11-29 05:12:57
目前Freemarker对Shrio的标签还不支持,不过已经有人贡献出来第三方面解决方案,如下: 1、下载shiro-freemarker-tags GitHub地址:https://github.com/jagregory/shiro-freemarker-tags 可以先看一下他的说明文档,有一个初步的了解。 2、Spring MVC配置 自定义一个ShiroTagFreeMarkerConfigurer继承Spring本身提供的FreeMarkerConfigurer,目的是在FreeMarker的Configuration中添加shiro的配置 public class ShiroTagFreeMarkerConfigurer extends FreeMarkerConfigurer { @Override public void afterPropertiesSet() throws IOException, TemplateException { super.afterPropertiesSet(); this.getConfiguration().setSharedVariable("shiro", new ShiroTags()); } } 下面的Spring mvc配置 <bean id="freemakerCongfig" class="com.xxx.web