码迷,mamicode.com
首页 > 其他好文 > 详细

XDocReport 的简单使用 操作word 替换变量

时间:2015-11-18 00:42:36      阅读:2833      评论:0      收藏:0      [点我收藏+]

标签:

XDocReport 主要是操作word,在word模版中定义变量并替换变量。(在word中还可替换动态图片,可进行循环、判断操作,可定义指令扩展程序,可转成pdf文件 等)

1,模版变量定义。

  新建word,Ctrl + F9   编辑域   选择MergeField  编辑域代码

  如图:

技术分享

技术分享

 

2,代码

/**
* 根据模板导出word文件
*
* @param reportData ReportData对象为数据对象,里面存储Map 数据
* @param templateName 模板文件路径
* @param outputFileName 输出文件路径
*/
public static void reportDoc(ReportData reportData, String templateName, String outputFileName) {
Map<String, Object> params = reportData.getParameters();
InputStream in = null;
OutputStream outputStream = null;
IXDocReport report = null;
try {
// 1) Load ODT file and set Velocity template engine and cache it to the registry
in = new FileInputStream(new File(StringUtil.formatFilePath(templateName)));

// 2) Create Java model context
IContext context = getReportContext(report, params);
// 输出文件,文件存在则删除
File outputFile = new File(outputFileName);
// 文件夹不存在,创建所有文件夹
File parentFile = outputFile.getParentFile();
if (!parentFile.exists()) {
parentFile.mkdirs();
}
if (outputFile.exists()) {
outputFile.renameTo(new File(outputFileName + "." + new Date().getTime()));
}
// 生成新的文件
outputStream = new FileOutputStream(outputFileName);
report.process(context, outputStream);
} catch (IOException e) {
log.warn("文件流获取失败", e);
} catch (XDocReportException e) {
log.warn("导出失败", e);
} finally {
try {
if (outputStream != null) {
outputStream.close();
}
if (in != null) {
in.close();
}
} catch (IOException e) {
log.warn("文件流关闭失败", e);
}
}
}
private static IContext getReportContext(IXDocReport report, Map<String, Object> params) throws XDocReportException {
IContext context = null;
if (report != null) {
context = report.createContext();
FieldsMetadata metadata = new FieldsMetadata();
for (Iterator iterator = params.entrySet().iterator(); iterator.hasNext(); ) {
Map.Entry entry = (Map.Entry) iterator.next();
String name = StringUtil.obj2Str(entry.getKey());
Object value = entry.getValue();
context.put(name, value);
}
report.setFieldsMetadata(metadata);
}
return context;
}

3,测试

  @Test
public void testXDocWord() throws Exception {
ReportData reportData = new ReportData();
reportData.addParameters("name", "张三");
reportData.addParameters("age", "2016-6-6");
XDocReport.reportDoc(reportData, "D:\\tempword\\template.docx", "D:\\tempword\\t.docx");
}

4,结果

技术分享

5,pom

<dependency>
<groupId>fr.opensagres.xdocreport</groupId>
<artifactId>fr.opensagres.xdocreport.converter.docx.xwpf</artifactId>
<version>1.0.5</version>
</dependency>
<dependency>
<groupId>fr.opensagres.xdocreport</groupId>
<artifactId>org.apache.poi.xwpf.converter.pdf</artifactId>
<version>1.0.5</version>
</dependency>
<dependency>
<groupId>fr.opensagres.xdocreport</groupId>
<artifactId>fr.opensagres.xdocreport.itext.extension</artifactId>
<version>1.0.5</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.11</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.11</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>ooxml-schemas</artifactId>
<version>1.1</version>
</dependency>

XDocReport 的简单使用 操作word 替换变量

标签:

原文地址:http://www.cnblogs.com/fish-in-sky/p/4973237.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!