由于项目的需求,需要制作报表,且支持导出excel、pdf等文件。试用了积木、jasper、xdocreport、UReport等工具之后,积木表现优秀。但最后,我还是选择了UReport。

都说选择后必定有一定代价,是的。一开始真的遇上了,UReport在中国式报表表现不错,但停更很多年了,和POI和现在流行的前后端框架有诸多集成的问题。

幸好,GITHUB上有源码。下载2.3.0源码,开始了UReport集成历劫模式。主要碰到的问题有两个方面:

1、后台代码。

1)UReport依赖的POI版本低,和项目上的easyexcel等存在版本冲突,导致导出报错,包括Factory问题、XSSColor问题等。

怎么处理呢?升级UReport依赖的POI版本,这里直接升级到POI5.2.2。升级后,core和console模块代码会报错。逐个修改和思考替代方式即可,修改点主要是XSSColor、字体以及表格列宽等。

2)项目依赖一定要去掉ooxml-schemas依赖

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>easyexcel</artifactId>
    <version>${easyexcel.verion}</version>
    <exclusions>
        <exclusion>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml-schemas</artifactId>
        </exclusion>
    </exclusions>
</dependency>

3)关于微服务版本后端的调整。在分析报表模块,做好token接收处理和用户认证即可,避免出现访问安全问题。对于熟悉JAVA的大家,不算难事。

后端Header: Authorization。

另外,由于我的项目有多租户概念,增加了Header: tenant-id

2、前端代码。

我这边前端用的VUE3。主要调整有:

1)在跳转设计器和报表展示链接处理上,统一加了token参数。

2)修改UReport的report-js代码,对主要页面(设计和预览)加上token接收;模块中关于ajax的调用,统一加上header,传递token;对于个别的window.open调用,类似上面的,暂时加token参数方式来处理。

3) 前端具体修改参考:

 

修改ureport2源码(1)搭建开发环境-CSDN博客

Ureport2打包,源码修改后打包问题,_ureport 打包-CSDN博客

前端环境调整点(package.json):


"scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "build": "webpack",
    "start": "webpack-dev-server --open"
  },

// 在devDependencies中添加 webpack、webpack-cli及webpack-dev-server三个。
  "devDependencies": {
    "babel-cli": "^6.26.0",
    "babel-core": "^6.26.0",
    "babel-loader": "^7.1.4",
    "babel-preset-env": "^1.6.1",
    "css-loader": "^0.28.11",
    "expose-loader": "^0.7.1",
    "file-loader": "^0.9.0",
    "style-loader": "^0.13.1",
    "uglifyjs-webpack-plugin": "^1.2.4",
    "url-loader": "^0.5.7",
    "webpack": "^4.46.0",
    "webpack-cli": "^3.3.12",
    "webpack-dev-server": "^3.11.2"
  }

 3、项目地址:

UReport: 更新poi版本以及传递token

个人这种方式,属笨拙费力的体力活(网上也有一些其他的集成方法,比如在nginx层做转发token处理,也是一种很灵巧的方式),希望对大家有所帮助。

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐