首页 > 编程语言 >java实现word模板导出

java实现word模板导出

时间:2022-08-15 14:44:10浏览次数:50  
标签:java content put &# context new report word 模板

Xdocreport和Freemaker生成docx

只使用freemaker生成简单的word文档很容易,但是当word文档需要插入动态图片,带循环数据,且含有富文本时解决起来相对比较复杂,但是使用Xdocreport可以轻易解决。
Xdocreport既可以实现文档填充也可以实现文档转换,此处只介绍其文档填充功能。

步骤:
1.制作模板
以以下文档为例

 

 

 

 会议内容为一段富文本
我们需要在变量替换的位置通过快捷键Ctrl+F9 或 工具栏“插入”->“文档部件或文本”->“域”

 

 

 

 

 

 

 

 遇到需要循环的位置
在第一列的里

 

 

 “@before-row[#list userList as user]”
@after-row[/#list]
遇到图片,先插入一张图片,再为图片添加书签

 

 

 

 

 

 这样模板就制作完成,不需要保存为xml,ftl。直接使用doc或者docx后缀即可
2.代码实现
引入依赖

<dependency>
<groupId>fr.opensagres.xdocreport</groupId>
<artifactId>xdocreport</artifactId>
<version>2.0.2</version>
</dependency>

 


@RequestMapping(value = "/createXdocreport")
public void createXdocreport(){
createXdocreportService.createXdocreport();
}
//实现类
public static void createXdocreport() {
        InputStream inputStream = null;
        ServletOutputStream outputStream = response.getOutputStream();
try {    
      //读取取resource目录下的模板       
      inputStream = WordUtil.class.getClassLoader().getResourceAsStream("summary.docx");
          IXDocReport report = XDocReportRegistry
.getRegistry() .loadReport(inputStream, TemplateEngineKind.Freemarker); // 设置特殊字段 FieldsMetadata metadata = report.createFieldsMetadata(); metadata.addFieldAsTextStyling("content", SyntaxKind.Html); metadata.addFieldAsImage("avatar", "user.avatar", NullImageBehaviour.RemoveImageTemplate); report.setFieldsMetadata(metadata); // 创建内容-text为模版中对应都变量名称 String content = "&#x3c;p&#x3e;我在这里放了一段富文本&#x3c;/p&#x3e;" + "&#x3c;p&#x3e;我准备测试富文本的处理&#x3c;/p&#x3e;"; content = HtmlUtils.htmlUnescape(content); IContext context = report.createContext(); context.put("name", "年终总结大会"); context.put("time", "2021年3月26日"); context.put("place", "线上"); context.put("sponsor", "张三"); context.put("content", content); //图片这里放图片的输入流 InputStream p1 = new FileInputStream(new File("C:\\Users\\luban\\Desktop\\图片1.png")); InputStream p2 = new FileInputStream(new File("C:\\Users\\luban\\Desktop\\图片2.jpg")); List<UserAvatar> users = Lists.newArrayList( new UserAvatar("张三", "组织部", new ByteArrayImageProvider(p1)), new UserAvatar("李四", "宣传部", new ByteArrayImageProvider(p2))); context.put("userList", users); // 生成文件 report.process(context, outputStream);
      response.setCharacterEncoding("utf-8");
      response.setContentType("application/msword");
      String fileName = "warning_task.docx";
      response.setHeader("Content-Disposition", "attachment;filename="
  .concat(String.valueOf(URLEncoder.encode(fileName, "UTF-8"))));
      report.process(context, outputStream);

inputStream.close(); outputStream.close(); } catch (Exception e) { log.info("生成纪要文件发生异常:<{}>", e.getMessage()); } }

效果如下

 

 

标签:java,content,put,&#,context,new,report,word,模板
From: https://www.cnblogs.com/huigee/p/16588247.html

相关文章

  • JAVA基础
    //TreeSetTreeSet<Integer>set=newTreeSet<>();intn=in.nextInt();for(inti=0;i<n;i++){set.add(in.nextInt());......
  • 开机自启rc.local文件模板
    #Ubuntu没有开机自启文件,可以在/etc/目录下面创建一个rc.local文件,并且给他一个可执行权限就行了#rc.local文件格式如下:#!/bin/sh-e#rc.local##Thisscriptisexecut......
  • linux下运行一个java类
    java代码,使用了jdk的包,以及第三方jar包(user.jar)中的类,以下例子为所有文件均在同一目录下。也可以不在同一目录,执行命令时需指定绝对路径即可。importa.b.User;import......
  • Linux异常-java.io.IOException: 打开的文件过多
     异常报错如下09-Oct-201915:37:51.923严重[http-nio2-8080-Acceptor-0]org.apache.tomcat.util.net.Nio2Endpoint$Acceptor.runSocketacceptfailedjava.......
  • 【java面试题】 == 和 equals
    【java面试题】==和equals "=="比较的机制:==对比的是栈中的值基本数据类型是变量值,也就是inti=1;在栈中存放的是i=1,==比较的也是这个数值1引用类型是堆中......
  • python wsgi 规范 与java的servlet规范
    背景Web应用的本质就是:浏览器发送一个HTTP请求;服务器收到请求,生成一个HTML文档;服务器把HTML文档作为HTTP响应的Body发送给浏览器;浏览器收到HTTP响应,从HTTPBody取......
  • javascript关于正则表达式
    概述正则表达式是用于字符串匹配的(四个支持正则的方法search查找下标macth查找数组split切割 replace替换)1.正则表达式对象声明1.1new关键词声明varre......
  • Java SE 9 多版本兼容 JAR 包示例
    JavaSE9多版本兼容JAR包示例作者:Grey原文地址:JavaSE9多版本兼容JAR包示例说明Java9版本中增强了Jar包多版本字节码文件格式支持,也就是说在同一个Jar包......
  • 【WPF】TextBox 、PasswordBox水印效果
    两种方式可以实现TextBox的水印效果1、行为,详细请看2、样式,下面主要介绍样式现实水印效果。效果如下:   xaml完整代码<Windowx:Class="WpfApp05.MainWindow"......
  • 书写数据库视图模板-九五小庞
     当你需要在数据库中创建视图时,可以使用此模板。select''as,--''as,--''as,--''as,--''as,--''as,--''as,--''as,--''as......