zoukankan      html  css  js  c++  java
  • XDocReport 的简单使用 操作word 替换变量,动态图片,指定操作指令(程序)扩展。

    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>

  • 相关阅读:
    SQLServer之ISO游标使用
    Eclipse Android 代码自动提示功能
    Java中利用MessageFormat对象实现类似C# string.Format方法格式化
    Eclipse的常用快捷键、旁门左道、系统错误小贴士
    Eclipse配置详解(包括智能提示设置、智能提示插件修改,修改空格自动上屏、JDK配置、各种快捷键列表……)
    Unity3D DF根据名称获取多个子控件代码
    unity3d asset store下载的代码所在位置
    Unity3D Update() 和 FixedUpdate()区别
    Unity3D的断点调试功能
    Error building Player: UnityException: Bundle Identifier has not been set up correctly
  • 原文地址:https://www.cnblogs.com/fish-in-sky/p/4973237.html
Copyright © 2011-2022 走看看