XDocReport 的简单使用 操作word 替换变量,动态图片,指定操作指令(程序)扩展(转自:http:www.cnblogs.comfish-in-skyp4973237.html)

xiaoxiao2021-02-28  75

XDocReport 主要是操作word,如动态插入数字、汉字、图片,也可以通过指令形式去执行程序输出结果。

1,模版变量定义。

  1)新建word;

  2)替换简单动态变量:Ctrl + F9   编辑域   选择MergeField  编辑域代码

  如图:

 

  3)替换动态图片:

   

  4)指令扩展:

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>
转载请注明原文地址: https://www.6miu.com/read-59807.html

最新回复(0)