导航: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 等。