freemarker根据模板生成word步骤优化

freemarker根据模板生成word文档,其它地方已经说的非常清除了,在此简单再说以下。

1、制作word模板,另存为xml文件。在此我另存为的时windows xml,它和windows 2003 xml有细微差别,但差别不大。权衡之下,我选择的是前者。


2、用word打开这个文件,先对里面需要填写的一个变量进行替换,然后保存退出。

再用编辑器打开这个文件,找到刚才的那个自己填写的变量,会发现word自动把这个整体分开了,我们把中间那些多余的字符全部删掉,保存退出。

再用word打开这个文档,剪切刚才那个变量,在原地粘贴一份,然后在其它需要变量替换的地方都粘贴一份,再把那些变量名字改一下,保存。此时退出应该已经模板已经制作好了,这个模板尽量不要改动,否则只要改动一个地方,那么那个变量${abc}整体就有可能再次被切分开。


此处虽然文字稍多,但是如果按照这种做法,在这一步还是能省很大功夫的。否则需要在满屏这样的字符中去找变量合并。

3、就是在程序中运行,进行变量替换然后输出了。在此又遇到一个问题就是换行的问题。因为在前台写的时候考虑到这个word对某些字符不容,所以用的只是textarea,但是再生成word的时候无法换行。

    经查阅资料推测,textarea的换行符应该是"\n",而模板中的换行符推测是“<w:p></w:p>”,于是在程序中改成

,此时输出的文档中已经像在textarea中显示的一样换行了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
是的,FreeMarker可以用来生成Word文件。你可以使用Apache POI来创建和编辑Word文档,然后在FreeMarker模板中使用变量和条件语句来填充文档内容。具体的步骤如下: 1. 首先,你需要添加Apache POI和FreeMarker的依赖到你的项目中。 2. 创建一个Word文档模板,你可以使用Microsoft Word或者其他工具来创建模板。在模板中,你可以使用${}来表示变量,使用<#if></#if>语句来表示条件判断语句。 3. 在Java代码中,使用Apache POI来创建一个空的Word文档,然后使用FreeMarker来读取你的模板文件并渲染出文本内容。最后,将渲染出的文本内容插入到Word文档中。 以下是一个示例代码: ```java // 创建一个空的Word文档 XWPFDocument doc = new XWPFDocument(); // 读取模板文件 Configuration cfg = new Configuration(Configuration.VERSION_2_3_30); cfg.setClassForTemplateLoading(this.getClass(), "/templates"); Template template = cfg.getTemplate("template.ftl"); // 渲染模板生成文本内容 Map<String, Object> data = new HashMap<>(); data.put("name", "John Doe"); data.put("age", 30); Writer out = new StringWriter(); template.process(data, out); String renderedText = out.toString(); // 将文本内容插入到Word文档中 XWPFParagraph paragraph = doc.createParagraph(); XWPFRun run = paragraph.createRun(); run.setText(renderedText); // 保存Word文档 FileOutputStream outStream = new FileOutputStream(new File("output.docx")); doc.write(outStream); outStream.close(); ``` 在这个示例代码中,我们使用了一个名为template.ftl的模板文件,它包含了一些变量和条件语句。我们使用FreeMarker来读取这个模板文件并渲染出文本内容,然后将它插入到一个空的Word文档中。最后,我们将这个Word文档保存到本地文件系统中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值