【Luck-Report】报表存储

21 阅读3分钟

在这里插入图片描述

导航:LuckReport专栏

一、快速了解

项目简介

Luck-Report 是一款基于开源项目 UReport2 重构的 Java 高性能报表引擎,通过迭代单元格可以实现任意复杂的中国式报表。相较于 UReport2,Luck-Report 在技术架构上进行了全新升级,后端基于 SpringBoot 框架开发、前端采用 Vue 框架构建,技术选型贴合当下主流项目开发标准,可精准适配各 类 实际开发需求。

Luck-Report 提供了全新的基于网页的报表设计器,可以在 Chrome、Firefox、Edge 等各种主流浏览器运行(IE 浏览器除外)。 使用 Luck-Report,打开浏览器即可完成各种复杂报表的设计制作。

Luck-Report 基于 Apache-2.0 开源协议开源

在线体验

二、报表存储

默认报表存储器

默认情况下,Luck-Report 的报表存储目录由 application-环境.yaml 配置文件 中的 luck-report.fileStoreDir 配置项指定,默认为 D:/report

luck-report:
  # 报表文件存储目录,请根据您的实际存储路径修改,确保该目录存在且有读写权限
  fileStoreDir: D:/report

自 定义 报表存储器

除了默认的报表存储器外,Luck-Report 还支持自定义报表存储器。您可以通过实现 com.luck.report.core.provider.report.ReportProvider 接口,并将实现类注入为 Spring Bean 来配置。

参考代码

以下是参考代码,用于实现本地文件系统报表存储器:

  • LocalReportProvider.java:实现了 ReportProvider 接口,用于在本地文件系统(E:/local/report 目录)存储报表文件,提供了报表的加载、保存、删除和列表获取等核心功能。
LocalReportProvider.java
package com.luck.report.web.test;

import com.luck.report.core.provider.report.ReportFile;
import com.luck.report.core.provider.report.ReportProvider;
import org.springframework.stereotype.Component;

import java.io.*;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * @author luck
 */
@Component
public class LocalReportProvider implements ReportProvider {
    private String prefix = "local:";
    private static final String REPORT_DIR = "D:/report";

    public LocalReportProvider() {
        // 确保目录存在
        File dir = new File(REPORT_DIR);
        if (!dir.exists()) {
            dir.mkdirs();
        }
    }

    /**
     * 根据报表名加载报表文件
     *
     * @param file 报表名称
     * @return 返回的InputStream
     */
    @Override
    public InputStream loadReport(String file) {
        if (file.startsWith(prefix)) {
            file = file.substring(prefix.length(), file.length());
        }
        File reportFile = new File(REPORT_DIR, file);
        if (reportFile.exists()) {
            try {
                return new FileInputStream(reportFile);
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }
        }
        return null;
    }

    /**
     * 根据报表名,删除指定的报表文件
     *
     * @param file 报表名称
     */
    @Override
    public void deleteReport(String file) {
        if (file.startsWith(prefix)) {
            file = file.substring(prefix.length(), file.length());
        }
        File reportFile = new File(REPORT_DIR, file);
        if (reportFile.exists()) {
            reportFile.delete();
        }
    }

    /**
     * 获取所有的报表文件
     *
     * @return 返回报表文件列表
     */
    @Override
    public List<ReportFile> getReportFiles() {
        List<ReportFile> files = new ArrayList<>();
        File dir = new File(REPORT_DIR);
        File[] listFiles = dir.listFiles();
        if (listFiles != null) {
            for (File file : listFiles) {
                if (file.isFile()) {
                    ReportFile reportFile = new ReportFile(file.getName(), new Date(file.lastModified()));
                    files.add(reportFile);
                }
            }
        }
        return files;
    }

    /**
     * 保存报表文件
     *
     * @param file    报表名称
     * @param content 报表的XML内容
     */
    @Override
    public void saveReport(String file, String content) {
        if (file.startsWith(prefix)) {
            file = file.substring(prefix.length(), file.length());
        }
        File reportFile = new File(REPORT_DIR, file);
        try (FileWriter writer = new FileWriter(reportFile)) {
            writer.write(content);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * @return 返回存储器名称
     */
    @Override
    public String getName() {
        return "本地文件系统";
    }

    /**
     * @return 返回是否禁用
     */
    @Override
    public boolean disabled() {
        return false;
    }

    /**
     * @return 返回报表文件名前缀
     */
    @Override
    public String getPrefix() {
        return prefix;
    }
}

打开报表设计器可以看到自定义的本地文件系统目录
在这里插入图片描述

禁用默认报表存储器

如果您定义了自己的报表存储器,同时又不想再使用系统默认提供的"服务器文件系统"的报表存储器,那么您可以在配置文件中添加以下属性

luck-report:
  # 禁用默认报表存储器
  disableFileProvider: true

通过上面的介绍,可以看到通过实现 ReportProvider 接口,您可以很容易的开发出其它类型的报表存储器,比如开发一个新的报表存储器将报表文件存储到数据库、FTP 等。
属性

luck-report:
  # 禁用默认报表存储器
  disableFileProvider: true

通过上面的介绍,可以看到通过实现 ReportProvider 接口,您可以很容易的开发出其它类型的报表存储器,比如开发一个新的报表存储器将报表文件存储到数据库、FTP 等。