使用freemarker生成的word文档,如何利用java代码将其转换为pdf格式?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用freemarker生成的word文档,如何利用java代码将其转换为pdf格式?相关的知识,希望对你有一定的参考价值。

参考技术A 首先,通过xml模板可以将基本上所有的格式都事先锁定,包括页码和分页,只要你事先预设好就能够通过freemarker实现生成,接下来就是我这个问题了,目录怎么解决,下面是解决思路:1:目录的内容可以根据之前其他的内容一样解决,通过XML模板预先设置好,2:目录的页码已经研究过是不能直接通过xml模板实现动态对应了(至少我没搞定0.0)3:由于不能够一步到位,我采取了在模板中预留了一页空白页,只留了抬头的目录两个字,然后通过查询目录二字进行目录的生成,这个功能也是我刚刚折腾出来的0.0目前还没测试能不能用模板生成目录后再更新目录0.0,不过想想可以直接生成目录应该就不用这么麻烦了,至于word生成后的修改0.0我觉得还是以后再说吧..整体来说应该还算完美解决了,代码我就不在这贴出来了~虽然中间折腾了半天走了半天弯路~讲道理还是用的jacob来实现的。。

freeMarker生成word,excel文档

    以前导出文档一直使用poi技术,这个项目使用freemarker技术,然后看了一下,发现比poi简单多了。于是发表一下。

        FreeMarker是一款模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页、电子邮件配置文件源代码等)的通用工具。 它不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入他们所开发产品的组件。

        首,把你要导出的word文档另存为xml格式,然后使用记事本将它打开,将动态生成的代码用el表达式(jstl标签)替换。

示例如下:

word文档

姓名:aaa

性别:bbb

另存为xml后打开,修改如下

<w:t>姓名:${name}</w:t></w:r></w:p><w:p><w:pPr><w:jc w:val="left"/><w:rPr><w:rFonts w:ascii="微软雅黑" w:h-ansi="微软雅黑" w:fareast="微软雅黑" w:cs="微软雅黑" w:hint="fareast"/><w:sz w:val="24"/><w:sz-cs w:val="24"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="微软雅黑" w:h-ansi="微软雅黑" w:fareast="微软雅黑" w:cs="微软雅黑" w:hint="fareast"/><w:sz w:val="24"/><w:sz-cs w:val="24"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t>性别:${sex}</w:t>



用${name}和${sex}代替aaa和bbb。然后在后台编写java代码。

package com.freemarkes.word;
import java.io.IOException;
import java.io.Writer;
import java.util.Map;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;
public class WordHandler {
      private Configuration configuration = null;
      Log logger = LogFactory.getLog(WordHandler.class);
  
      public WordHandler() {
          configuration = new Configuration();
          configuration.setDefaultEncoding("UTF-8");
      }
     /*
      * configuration跟文件路径有关系,是相对的。
      */
     private Template getTemplate(String templatePath, String templateName) throws IOException {
         configuration.setClassForTemplateLoading(this.getClass(), templatePath);
         /***
         * public void setClassForTemplateLoading(Class clazz, String pathPrefix);
 * public void setDirectoryForTemplateLoading(File dir) throws IOException;
 * public void setServletContextForTemplateLoading(Object servletContext, String path);
  *看名字也就知道了,分别基于类路径、文件系统以及Servlet Context。
          ***/
         Template t = null;
         t = configuration.getTemplate(templateName);
         t.setEncoding("UTF-8");
         return t;
     }
 
     
     public void write(String templatePath, String templateName, Map dataMap, Writer out) throwsException {
         try {
             Template t = getTemplate(templatePath, templateName);
             t.process(dataMap, out);
         } catch (Exception e) {
             logger.error(e);
         } finally{
         out.close();
         }
     }
public static void main(String[] args) throws Exception {
  Map map=getMap();
  WordHandler handler = new WordHandler();
  Writer out = new OutputStreamWriter(new FileOutputStream("D:\\chaoslee.doc"), "UTF-8");
  handler.write("", "chaoslee.xml", map, out);
}
public static Map getMap(){
Map map = new HashMap();
map.put("name", "chaoslee");
map.put("sex", "男");
return map;
}
 }


运行main方法就可以导出word文档了。代码见附件

我的xml文档是复制的片段,所以可能不能使用,如果有使用的人,还是自己另存为一下。

这个博客不能复制图片让我很是为难啊,还是 我不会复制。复制的都是空白的。

Excel方法也差不多。

本文出自 “行走太行览燕赵” 博客,请务必保留此出处http://chaoslee.blog.51cto.com/10643967/1851642

以上是关于使用freemarker生成的word文档,如何利用java代码将其转换为pdf格式?的主要内容,如果未能解决你的问题,请参考以下文章

java中如何生成word文档的目录页

使用FreeMarker生成Word文档

java使用freemarker 生成word文档

freemarker生成word文档

freeMarker生成word,excel文档

使用freemarker模板引擎生成word文档的开发步骤