后面两篇对导出做出来改进以及详细操作:
第二篇: java通过模板生成docx(2)
第三篇:java 导出word 利用freemarker指令更改xml 导出word docx文档 (3)
本篇思路:通过模板导出word doc容易,网上资料很多,大概就是将doc后缀改成xml文本打开通过freemarker指令标记${} 通过java代码动态写入。
导出docx用以上方法不行,docx本质为压缩文件,通过解压取出document.xml(和doc用xml打开中间部分一样) ,取出后修改在写入,生成docx 最后通过工具将docx 转成pdf
流程: docx文档------取出docx中的document.xml ---------xml中的数据替换
freemarker指令标记${}----------通过freemarker和map填充数据到xml ----------生成docx文件 --------------docx转pdf
1.
新建一个docx文档,放在D盘命名test_template.docx
2.用winrar打开
test_template.docx,取出word/document.xml
3.代码:这个类是把内容填充到xml
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;
import java.io.File;
import java.io.IOException;
import java.io.Writer;
import java.util.Map;
public class XmlTplUtil {
private static XmlTplUtil tplm = null;
private Configuration cfg = null;
private XmlTplUtil() {
cfg = new Configuration();
try {
// 注册tmlplate的load路径
// 这的路径是xml的路径
cfg.setDirectoryForTemplateLoading(new File("d:/"));
} catch (Exception e) {
}
}
private static Template getTemplate(String name) throws IOException {
if (tplm == null) {
tplm = new XmlTplUtil();
}
return tplm.cfg.getTemplate(name);
}
/**
*
* @param templatefile 模板文件
* @param param 需要填充的内容
* @param out 填充完成输出的文件
* @throws IOException
* @throws TemplateException
*/
public static void process