gtihub 文档地址
项目中引入依赖
<!-- xdocreport -->
<dependency>
<groupId>fr.opensagres.xdocreport</groupId>
<artifactId>fr.opensagres.xdocreport.core</artifactId>
<version>2.0.1</version>
</dependency>
<dependency>
<groupId>fr.opensagres.xdocreport</groupId>
<artifactId>fr.opensagres.xdocreport.document</artifactId>
<version>2.0.1</version>
</dependency>
<dependency>
<groupId>fr.opensagres.xdocreport</groupId>
<artifactId>fr.opensagres.xdocreport.template</artifactId>
<version>2.0.1</version>
</dependency>
<dependency>
<groupId>fr.opensagres.xdocreport</groupId>
<artifactId>fr.opensagres.xdocreport.document.docx</artifactId>
<version>2.0.1</version>
</dependency>
<dependency>
<groupId>fr.opensagres.xdocreport</groupId>
<artifactId>fr.opensagres.xdocreport.template.freemarker</artifactId>
<version>2.0.1</version>
</dependency>
控制层通过 HttpServletResponse 进行生成并调用
@RequestMapping(value = "/bdcdj/exportWord", method = RequestMethod.GET)
public void exportWord(@RequestParam(value = "countdate", required = false) String countdate, HttpServletResponse response) {
InputStream inputStream = null;
try {
String msg = "";
Map<String, Object> resultMap = new HashMap<>();
resultMap.put("success", false);
resultMap.put("data", null);
resultMap.put("msg", msg);
if (StringUtils.isBlank(countdate)) {
resultMap.put("msg", "参数为空,禁止获取数据");
throw new RuntimeException("参数为空,禁止获取数据");
String[] split = countdate.split("-");
if (split.length != 2) {
resultMap.put("msg", "参数格式异常,禁止获取数据");
throw new RuntimeException("参数格式异常,禁止获取数据");
// 解析参数,获取年份和月份
String year = split[0];
String month = split[1];
Map<String, List<String>> countData = (Map<String, List<String>>) yangLingCountService.getCountData(year, month);
month = month.replace("0", "");
// 导出word
String file = AppConfig.getEgovHome() + "/conf/server/template/杨凌不动产登记信息导出模板.docx";
if (StringUtils.startsWith(file, "file")) {
file = StringUtils.substring(file, file.indexOf("/") + 1);
inputStream = new FileInputStream(new File(file));
IXDocReport report = XDocReportRegistry.getRegistry().loadReport(inputStream, TemplateEngineKind.Freemarker);
IContext context = report.createContext();
context.put("year", year);
context.put("month", month);
Iterator<Map.Entry<String, List<String>>> iterator = countData.entrySet().iterator();
while (iterator.hasNext()) {
Map.Entry<String, List<String>> next = iterator.next();
switch (next.getKey()) {
case "table_1":
for (int i = 0; i < next.getValue().size(); i++) {
context.put("table1_" + i, next.getValue().get(i));
break;
case "table_2":
for (int i = 0; i < next.getValue().size(); i++) {
context.put("table2_" + i, next.getValue().get(i));
break;
case "table_5":
for (int i = 0; i < next.getValue().size(); i++) {
context.put("table5_" + i, next.getValue().get(i));
break;
case "table_6":
for (int i = 0; i < next.getValue().size(); i++) {
context.put("table6_" + i, next.getValue().get(i));
break;
case "table_7":
for (int i = 0; i < next.getValue().size(); i++) {
context.put("table7_" + i, next.getValue().get(i));
break;
case "table_8":
for (int i = 0; i < next.getValue().size(); i++) {
context.put("table8_" + i, next.getValue().get(i));
break;
case "table_9":
for (int i = 0; i < next.getValue().size(); i++) {
context.put("table9_" + i, next.getValue().get(i));
break;
case "table_10":
for (int i = 0; i < next.getValue().size(); i++) {
context.put("table10_" + i, next.getValue().get(i));
break;
context.put("test_content", "==测试内容==");
response.setCharacterEncoding("utf-8");
response.setContentType("application/msword");
String fileName = "不动产登记信息统计表(月报)_" + System.currentTimeMillis() + ".docx";
response.setHeader("Content-Disposition", "attachment;filename="
.concat(String.valueOf(URLEncoder.encode(fileName, "UTF-8"))));
report.process(context, response.getOutputStream());
} catch (Exception e) {
e.printStackTrace();
} finally {
if (null != inputStream) {
try {
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
模板内容
-
通过 microsoft word 打开,WPS 慎用
-
在你需要插入数据的地方,按 ctrl+f9
选择域名类型,填写域名的值。域名类型为:MergeField,域名格式为:${xxx}
点击确定保存
代码内容
-
通过 content 对象(Map<String,Object> 形式)将内容设置进去
导出后的效果
随着信息技术和网络技术的飞速发展,人类已进入全新信息化时代,传统管理技术已无法高效,便捷地管理信息。为了迎合时代需求,优化管理效率,各种各样的管理系统应运而生,各行各业相继进入信息管理时代,广场舞团就是信息时代变革中的产物之一。
任何系统都要遵循系统设计的基本流程,本系统也不例外,同样需要经过市场调研,需求分析,概要设计,详细设计,编码,测试这些步骤,基于java语言设计并实现了广场舞团。该系统基于B/S即所谓浏览器/服务器模式,应用java技术,选择MySQL作为后台数据库。系统主要包括系统首页,社团,社团活动,交流中心,公告资讯,个人中心,后台管理等功能模块。
本文首先介绍了广场
大家都知道 Github 是一个程序员福地,这里有各种厉害的开源框架、软件或者教程。这些东西对于我们学习和进步有着莫大的进步,所以我有了这个将 Github 上非常棒的 Java 开源项目整理下来的想法。觉得不错的话,欢迎小伙伴们去star一波。
很多小伙伴都不知道学习什么开源项目,这篇文章定能为你解决疑惑。
很多Java程序员一直希望找到一份完整的学习路径,但是市面上很多书都是专注某一个领域的,没有一份完整的大图,以至于很多程序员很迷茫,不知道自己到底应该从哪里开始学,或者不知道自己学习些什么。
好在很早之前就有人总结了一份《Java工程师成神之路》,作者按照自己的经验总结了从基础,到高级、底层、架构、进阶、扩展等6个大的章节。几乎囊括了Java体系内的所有知识点。
大家都知道 Github 是一个程序员福地,这里有各种厉害的开源框架、软件或者教程。这些东西对于我们学习和进步有着莫大的进步,所以将 Github 上非常棒的七大Java开源项目技术文档整理下来供大家学习!!!
Quarkus是一款有别于传统Java架构的新技术框架。它建立在我们熟知的技术栈上,使用了诸多成熟的技术,如JPA、JAX-RS、EclipseVert.x、Eclipse MicroProfile和CDI等,并将这些技术与Kubernetes紧密融合在一起。用户可以借助Kubernetes高效的调度运维能力,最大限度地节约资源。
JAVA文档并发演示---并发高级对象摘录(Tutorial - Concurrency Lesson--High Level Concurrency Objects)