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


58454135d0a749b1af32a98e2df9ef25.png


  • 鼠标右键点击该区域,选择编辑域

71073109e1fd462a8411f590297eba52.png 64de78ce4e364bd9878176487f44efc9.png


选择域名类型,填写域名的值。域名类型为:MergeField,域名格式为:${xxx}

445a78029252496598d39fa83820407b.png


点击确定保存

36d859681d114c1f8171203bbf5719a4.png


  • 保存模板文档


代码内容

  • 通过 content 对象(Map<String,Object> 形式)将内容设置进去

a8a7c465accb4821933742ed7618c002.png


导出后的效果

c0fc2b8e32ce406fa2e20532593aef1e.png

基于JAVA的springboot+vue社区管理系统、广场舞团管理系统,附源码+数据库+lw文档+PPT
随着信息技术和网络技术的飞速发展,人类已进入全新信息化时代,传统管理技术已无法高效,便捷地管理信息。为了迎合时代需求,优化管理效率,各种各样的管理系统应运而生,各行各业相继进入信息管理时代,广场舞团就是信息时代变革中的产物之一。 任何系统都要遵循系统设计的基本流程,本系统也不例外,同样需要经过市场调研,需求分析,概要设计,详细设计,编码,测试这些步骤,基于java语言设计并实现了广场舞团。该系统基于B/S即所谓浏览器/服务器模式,应用java技术,选择MySQL作为后台数据库。系统主要包括系统首页,社团,社团活动,交流中心,公告资讯,个人中心,后台管理等功能模块。 本文首先介绍了广场
我把Github上最牛b的Java教程和实战项目整合成了一个PDF文档
大家都知道 Github 是一个程序员福地,这里有各种厉害的开源框架、软件或者教程。这些东西对于我们学习和进步有着莫大的进步,所以我有了这个将 Github 上非常棒的 Java 开源项目整理下来的想法。觉得不错的话,欢迎小伙伴们去star一波。 很多小伙伴都不知道学习什么开源项目,这篇文章定能为你解决疑惑。
推荐一个GitHub上牛b的Java学习项目!已整理成了文档版本
很多Java程序员一直希望找到一份完整的学习路径,但是市面上很多书都是专注某一个领域的,没有一份完整的大图,以至于很多程序员很迷茫,不知道自己到底应该从哪里开始学,或者不知道自己学习些什么。 好在很早之前就有人总结了一份《Java工程师成神之路》,作者按照自己的经验总结了从基础,到高级、底层、架构、进阶、扩展等6个大的章节。几乎囊括了Java体系内的所有知识点。
逛了五年GitHub,终于整理出七大java开源技术项目文档,赶紧收藏
大家都知道 Github 是一个程序员福地,这里有各种厉害的开源框架、软件或者教程。这些东西对于我们学习和进步有着莫大的进步,所以将 Github 上非常棒的七大Java开源项目技术文档整理下来供大家学习!!!
2022年全新java架构技术框架Quarkus实战神仙文档
Quarkus是一款有别于传统Java架构的新技术框架。它建立在我们熟知的技术栈上,使用了诸多成熟的技术,如JPA、JAX-RS、EclipseVert.x、Eclipse MicroProfile和CDI等,并将这些技术与Kubernetes紧密融合在一起。用户可以借助Kubernetes高效的调度运维能力,最大限度地节约资源。
JAVA文档并发演示---并发高级对象摘录(Tutorial - Concurrency Lesson--High Level Concurrency Objects)
JAVA文档并发演示---并发高级对象摘录(Tutorial - Concurrency Lesson--High Level Concurrency Objects)