XDocReport使用入门

news/2024/5/15 20:24:39/文章来源:https://blog.csdn.net/sinat_32366329/article/details/128429773

XDocReport

简介

XDocReport是GitHub上根据麻省理工学院许可证开源的Wrod导出框架。XDocReport可以根据ODT、Doc、Docx文档模板通过模板引擎语法(Freemarker、Velocity)转换为另外一种格式文档(Doc、Docx、XHTML、PDF)。

XDocReport特性

XDocReport是模块化而且非常轻便(不需要在你的服务器安装MS Office、LiberOffice)。你可以选择要管理的XML类型文档(docx、odt…)和选择熟悉的模板引擎(Freemarker、Velocity)组合使用。

  1. 支持OpenOffice、MS Word格式。
  2. 默认支持Freemarker、Velocity语法,也可以自己扩展语法。
  3. 支持报告生成的调试过程。
  4. 支持表格循环遍历。
  5. 支持动态图像替换。
  6. 在OSGI环境中管理XDcoReport。
  7. 支持格式转换器,默认支持的转换器(ODT 2 PDF、Docx 2 PDF).
  8. 支持实现自己的模板引擎。默认情况下实现了FreeMarker、Velocity。
  9. 支持转换器扩展。默认实现了ODT 2 PDF(通过ODFDOM+iText)、Docx 2 PDF(通过POI+iText)。

基本原理

在这里插入图片描述

工具类封装

package org.leaf.word.xdocreport;import fr.opensagres.xdocreport.core.XDocReportException;
import fr.opensagres.xdocreport.document.IXDocReport;
import fr.opensagres.xdocreport.document.registry.XDocReportRegistry;
import fr.opensagres.xdocreport.template.IContext;
import fr.opensagres.xdocreport.template.TemplateEngineKind;import java.io.FileInputStream;
import java.io.IOException;public class WordUtils {public static ExportData getExportData(String url) throws IOException, XDocReportException {final IXDocReport report = createReport(url);final IContext context = report.createContext();return new ExportData(report, context);}private static IXDocReport createReport(String url) throws IOException, XDocReportException {final FileInputStream fileInputStream = new FileInputStream(url);return XDocReportRegistry.getRegistry().loadReport(fileInputStream, TemplateEngineKind.Freemarker);}}
package org.leaf.word.xdocreport;import fr.opensagres.xdocreport.core.XDocReportException;
import fr.opensagres.xdocreport.document.IXDocReport;
import fr.opensagres.xdocreport.template.IContext;
import fr.opensagres.xdocreport.template.formatter.FieldsMetadata;import java.io.IOException;
import java.io.OutputStream;public class ExportData {private IXDocReport report;private IContext context;public ExportData(IXDocReport report, IContext context) {this.report = report;this.context = context;}public void process(OutputStream out) throws IOException, XDocReportException {report.process(context, out);}public void setData(String key, Object value) {FieldsMetadata fieldsMetadata = report.getFieldsMetadata();fieldsMetadata = fieldsMetadata == null ? new FieldsMetadata() : fieldsMetadata;fieldsMetadata.addFieldAsList(key);context.put(key, value);}
}

快速开始

模板

  1. 创建ODTHelloWordWithVelocity.docx文档,输入内容Hello ${name}。
  2. ${name}设置步骤
    1. Ctrl + F9,选择邮件合并类型,输入"${name}"

在这里插入图片描述

Maven

<!--org.leaf.word.to.pdf.aspose--><dependencies><!-- https://mvnrepository.com/artifact/fr.opensagres.xdocreport/xdocreport --><dependency><groupId>fr.opensagres.xdocreport</groupId><artifactId>xdocreport</artifactId><version>${xdocreport.version}</version></dependency><!-- https://mvnrepository.com/artifact/fr.opensagres.xdocreport/fr.opensagres.xdocreport.document.docx --><dependency><groupId>fr.opensagres.xdocreport</groupId><artifactId>fr.opensagres.xdocreport.document.docx</artifactId><version>${xdocreport.version}</version></dependency><!-- https://mvnrepository.com/artifact/fr.opensagres.xdocreport/fr.opensagres.xdocreport.template --><dependency><groupId>fr.opensagres.xdocreport</groupId><artifactId>fr.opensagres.xdocreport.template.freemarker</artifactId><version>${xdocreport.version}</version></dependency><!-- https://mvnrepository.com/artifact/fr.opensagres.xdocreport/fr.opensagres.xdocreport.template --><dependency><groupId>fr.opensagres.xdocreport</groupId><artifactId>fr.opensagres.xdocreport.document</artifactId><version>${xdocreport.version}</version></dependency><!-- https://mvnrepository.com/artifact/fr.opensagres.xdocreport/fr.opensagres.xdocreport.template --><dependency><groupId>fr.opensagres.xdocreport</groupId><artifactId>fr.opensagres.xdocreport.core</artifactId><version>${xdocreport.version}</version></dependency><!-- https://mvnrepository.com/artifact/fr.opensagres.xdocreport/fr.opensagres.xdocreport.template --><dependency><groupId>fr.opensagres.xdocreport</groupId><artifactId>fr.opensagres.xdocreport.converter</artifactId><version>${xdocreport.version}</version></dependency><dependency><groupId>fr.opensagres.xdocreport</groupId><artifactId>fr.opensagres.xdocreport.converter.docx.xwpf</artifactId><version>${xdocreport.version}</version></dependency><dependency><groupId>fr.opensagres.xdocreport</groupId><artifactId>fr.opensagres.xdocreport.template.velocity</artifactId><version>${xdocreport.version}</version></dependency></dependencies>

示例代码

    public static void main(String[] args) throws IOException, XDocReportException {final ExportData exportData = WordUtils.getExportData("F:\\idea-workspace\\my_source\\word-document\\src\\main\\resources\\xdocreport\\ODTHelloWordWithVelocity.docx");exportData.setData("name", "world");exportData.process(new FileOutputStream("F:\\idea-workspace\\my_source\\word-document\\src\\main\\resources\\xdocreport\\ODTHelloWordWithVelocity_out.docx"));}

结果

在这里插入图片描述

基本设置

普通域对象

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

图片对象

图片对象的设置使用书签设置
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

数据设置

Java

package org.leaf.word.xdocreport;import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.fasterxml.jackson.databind.ObjectMapper;
import fr.opensagres.xdocreport.core.XDocReportException;import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;public class Demo1 {public static void main(String[] args) throws IOException, XDocReportException {final ExportData exportData = WordUtils.getExportData("F:\\idea-workspace\\my_source\\word-document\\src\\main\\resources\\xdocreport\\ODTHelloWordWithVelocity.docx");exportData.setData("data", readJSON());exportData.process(new FileOutputStream("F:\\idea-workspace\\my_source\\word-document\\src\\main\\resources\\xdocreport\\ODTHelloWordWithVelocity_out.docx"));}public static JSONObject readJSON() throws IOException {ObjectMapper mapper = new ObjectMapper();return mapper.readValue(new File("F:\\idea-workspace\\my_source\\word-document\\src\\main\\resources\\xdocreport\\xdocreport.json"), JSONObject.class);}}

JSON

{"userName": "张三","applyDate": "2022-12-12","applyDetail": [{"sqxm": "北京出差","sqje": 123458.695,"sxmx": "住宿","sqr": "张三","sqrq": "2022-12-26"},{"sqxm": "北京出差","sqje": 1238.695,"sxmx": "路费","sqr": "张三","sqrq": "2022-12-26"},{"sqxm": "北京出差","sqje": 128.695,"sxmx": "吃饭","sqr": "张三","sqrq": "2022-12-26"}],"list": ["1、飞机票", "2、电影票", "3、住宿发票"]
}

文本

普通文本使用${}

在这里插入图片描述

条件

条件使用[#if condition] [/#if]

在这里插入图片描述

表格

表格使用@before-row[#list data as d]和@after-row[/#list]表示遍历的开始和结束,文本的输入和普通文本一样

在这里插入图片描述

列表

列表遍历使用[#list data.list as l]开始和[/#list]结束

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_239699.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端小知识:控制台打印(console)- 模拟Java日志打印、表格形式打印美化输出对象、代码运行时间统计

文章目录6. 控制台打印&#xff08;Console&#xff09;模拟Java日志打印格式美化对象打印&#xff08;表格形式打印输出&#xff09;日志等级输出&#xff08;让其在控制台显示时有颜色提示&#xff09;代码运行时间统计打印输出6. 控制台打印&#xff08;Console&#xff09;…

用树莓派4B安装gitlab,亲测可用~

最近成功在CentOS7上安装了gitlab&#xff0c;忽然想到是不是可以把吃灰的树莓派4B也装上gitlab&#xff0c;于是研究了一下&#xff0c;做个分享。 树莓派是4B 8G版本。本身装的是官方的64位系统。之前可能还装过一些乱七八糟的东西&#xff0c;这里就不提了。 上gitlab官网…

移动 IP(计算机网络-网络层)

目录 移动性对网络应用的影响 移动IP中数据报的转发过程 移动IP中数据报的转发过程 三角路由的低效性 解决三角路由的低效性 移动IP的标准 移动性对网络应用的影响 现在先考虑这样一种情况&#xff0c;一个用户拿着无线移动设备在一个Wi-Fi服务区内走动&#xff0c;并且边…

【python圣诞树的实现】

&#x1f935;‍♂️ 个人主页老虎也淘气 个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f44d;&#x1f3fb; 收藏…

http 库的服务端实现

前言 net/http 库的客户端实现(上) net/http 库的客户端实现(下) net/http 库的服务端实现 上两篇文章介绍了 http 客户端的实现&#xff0c;这篇文章看一下服务端的实现 服务端 使用 net/http 库可以快速搭建HTTP服务&#xff0c;HTTP服务端主要包含两部分&#xff1a; …

【圣诞特辑】码一个漂漂亮亮的圣诞树(Single Dog版)

目录 前言 一、C语言版圣诞树 1.代码实现 2.效果图 二、python版圣诞树 1.代码实现 2.效果图​ 三、html5版圣诞树 1.代码实现 2.效果图 总结 前言 圣诞节即将来临&#xff0c;圣诞树也是必不可少的装饰之一。圣诞树是一棵绿叶繁茂的树&#xff0c;上面挂满了彩色的灯…

Python pandas有好几百个库函数,你都用过吗(4)

上一篇链接&#xff1a; https://blog.csdn.net/boysoft2002/article/details/128428569 S~W&#xff1a; Function46~56 Types[Function][45:] [set_eng_float_format, show_versions, test, timedelta_range, to_datetime, to_numeric, to_pickle, to_timedelta, unique,…

VSCode 最全实用插件

一、必备插件 &#x1f33e;Chinese&#xff08;中文&#xff09; Settings Sync&#xff08;配置同步到云端&#xff09; 可以让我们的vscode配置同步到云端&#xff0c;当我们跟换电脑或者再次安装vscode的时候&#xff0c;只需要登录账号即可同步配置了 wakatime&#xf…

技术分享 Oracle下启用块跟踪

创建存放块跟踪文件目录 [oraclehost01 ~]$ cd /u01/app [oraclehost01 app]$ mkdir BCT 启用块跟踪 SQL> alter database enable block change tracking using file /u01/app/BCT/rman.bct; 检查块跟踪状态 SQL> col filename for a22 SQL> select filename, status,…

RabbitMQ——延迟队列

目录 一、延迟队列的应用场景 1. 场景&#xff1a;"订单下单成功后&#xff0c;15分钟未支付自动取消" ① 传统处理超时订单 ② RabbitMQ延时队列方案 二、延迟队列中的消息投递和消息消费 1.TTL 和 DLX ① TTL ② DLX和死信队列 ③ 延迟队列 ④ 开发步骤 …

get/post/put/delete请求头说明

目录 1.请求头说明 2.get 3.delete 4.post 5.put 6. 说明 7.Content-Type说明 1.请求头说明 前端发出的请求通过浏览器进行查看&#xff0c;可以发现分为四个部分。常规信息(General)&#xff0c;请求头信息(Request Headers)&#xff0c;响应头信息(Response Headers)…

ConvLSTM时空预测实战代码详解

写在前面 时空预测是很多领域都存在的问题&#xff0c;不同于时间序列&#xff0c;时空预测不仅需要探究时间的变化&#xff0c;也需要关注空间的变化。许多预测问题都只片面的关注时间问题&#xff0c;如预测某人未来3年患某种病的概率&#xff0c;食堂就餐人数等&#xff0c…

35. 池化层 / 汇聚层 代码实现

1. 池化层 在下面的代码中的pool2d函数&#xff0c;我们实现汇聚层的前向传播。 这类似于之前文章中的的corr2d函数。 然而&#xff0c;这里我们没有卷积核&#xff0c;输出为输入中每个区域的最大值或平均值。 from torch import nn from d2l import torch as d2l# X是输入&…

springcloud-gateway简介

目录 1. gateway简介 1.1 是什么 1.2 作用 1.3 主要特征 1.4 与zuul的主要区别 1.5 主要组件 1.6 架构图 2. 开发示例 2.1 创建一个gateway模块 2.2 与nacos结合使用 2.2.1 默认规则 2.2.2 通过配置文件配置路由 2.2.3 动态路由 1. gateway简介 1.1 是什么 SpringC…

VuePress初学之利用模板theme创建一个个人博客网站

目录前言官方文档创建项目创建目录安装VuePress初始化项目创建文档修改package.json运行项目修改README.md的编码显示官方默认主题创建.vuepress文件创建config.js修改README.md补充logo资源运行效果更多默认主题配置开源主题vuepress-theme-reco安装脚手架初始化项目安装npm运…

10.2、Django入门--前台管理

文章目录1、URLconf 路由管理展示首页2、视图函数处理业务逻辑展示书籍的详细页3、模板管理实现好看的HTML页面3.1 模板引擎配置3.2 模板语法&#xff1a;变量3.3 模板语法: 常用标签3.4 主页与详情页前端HTML设计常用的HTML编写基础标题标签列表标签图片标签链接标签表格标签表…

RabbitMQ 第一天 基础 6 SpringBoot 整合RabbitMQ

RabbitMQ 【黑马程序员RabbitMQ全套教程&#xff0c;rabbitmq消息中间件到实战】 文章目录RabbitMQ第一天 基础6 SpringBoot 整合RabbitMQ6.1 SpringBoot 整合 RabbitMQ【生产者】6.1.1 生产者6.2 SpringBoot 整合 RabbitMQ【消费者】6.2.1 消费者6.3 小结第一天 基础 6 Spri…

day3-javascript

HTML的注释 CSS的注释 Javascript的注释是不一样的 JQuery JQuery是一个JavaScript的第三方模块 基于JQuery&#xff0c;自己开发一个功能。 现成的工具 依赖jQuery&#xff0c;例如BootStrap动态效果

Vue事件处理的基本使用

前言 事件处理在vue中也是非常重要的一项技术&#xff0c;它类似于js的事件处理&#xff0c;但是也有不同&#xff0c;下面就简单介绍一下在vue中如何进行事件使用以及一些要点 1 事件基本使用 在这里我们使用单击事件为例&#xff0c;简单讲讲在vue中单击事件的编写以及细节…

Spring Bean作用域

目录 什么是作用域呢 ? 那什么又是Spring Bean的作用域呢 ? Spring框架默认Bean作用域是什么呢 ? Spring Bean的作用域都有哪些呢 ? 如何设置Bean作用域 什么是作用域呢 ? 在JavaSE中,作用域就是指一个变量可生效的范围. 就比如一个变量的作用域是方法的代码块的范围…