更新积木报表2.0.0注意事项

一、导出接口变更

导出接口由原来的/jmreport/exportPdfStream更新为/jmreport/exportReport。具体见官方文档

1、旧接口springboot实现报表生成并存储pdf文件

public String exportPdf(@RequestParam(name = "id", required = true) String id, @RequestParam(name = "excelConfigId", required = true)String excelConfigId, @RequestParam(name = "rootPath", required = true)String rootPath,@RequestParam(name = "url") String url) {
        // 1、创建url路径 RestUtil.getBaseUrl():你的地址
        String url = RestUtil.getBaseUrl() + "/jmreport/exportPdfStream";
        Map<String, Object> map = new HashMap<>();
        JSONObject object = new JSONObject();
        // 2、此处为示例,需要传递api和sql的正确参数值
        object.put("id", id); //积木报表中sql的传参
        map.put("excelConfigId", excelConfigId); //积木报表id
        map.put("queryParam", object);
        HTTPHeaders headers = new HttpHeaders);
        headers.add("Content-Type", "application/JSON;charset=UTF-8");
        HttpEntity<Map<String, Object>> httpEntity = new HttpEntity<>(map, headers);
        String filePath = "";
        try {
        	// 3、调用积木报表接口
            Resource apiResult = restTemplateConfig.restTemplateHttps().postForObject(url, httpEntity, Resource.class);
            // 4、拿到流
            InputStream inputStream = apiResult.getInputStream();
            byte[] bytes = IOUtils.toByteArray(inputStream);
            String s = "data:application/pdf;base64," + Base64.getEncoder().encodeToString(bytes);
            ByteArrayInputStream stream = null;
            BASE64Decoder decoder = new BASE64Decoder();
            byte[] bt = decoder.decodeBuffer(s);
            stream = new ByteArrayInputStream(bt);
            // 5、存储到minio中
            filePath = MinioUtil.upload(stream,rootPath+"/"+id+".pdf");
            // 6、关闭流
            inputStream.close();
        } catch (RestClientException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return filePath;

2、新接口实现

public String exportYbSbPdf(@RequestParam(name = "batchId", required = true) String batchId, @RequestParam(name = "communityId", required = true) String communityId, @RequestParam(name = "excelConfigId", required = true)String excelConfigId, @RequestParam(name = "rootPath", required = true)String rootPath,@RequestParam(name = "url", required = true)String url) {
        String filePath = "";
        try {
            // 查询参数
            JSONObject queryParam = new JSONObject();
            queryParam.put("batchId", batchId);
            queryParam.put("communityId", communityId);
            // 请求参数
            Map<String, Object> exportParams = new HashMap<>();
            exportParams.put("reportId", excelConfigId);
            exportParams.put("exportType", "pdf");
            exportParams.put("queryParam", queryParam);
            Map<String,Object> map = new HashMap<>();
            List<Map<String, Object>> list = new ArrayList<>();
            list.add(exportParams);
            map.put("exportParams", JSONObject.toJSONString(list));
            // 请求头
            HTTPHeaders headers = new HttpHeaders);
            headers.add("Content-Type", "application/JSON;charset=UTF-8");
            HttpEntity<Map<String, Object>> httpEntity = new HttpEntity<>(map, headers);
            url = "你的地址/jmreport/exportReport" + "?token="+((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest().getHeader("X-Access-Token")+"&exportParams=" + UriEncoder.encode(JSONObject.toJSONString(list));
            ResponseEntity<byte[]> responseEntity = restTemplateConfig.restTemplateHttps().getForEntity(url, byte[].class, httpEntity);

            if (responseEntity.getStatusCode().is2xxSuccessful()) {
                byte[] body = responseEntity.getBody();
                if (body == null || body.length == 0) {
                    throw new RuntimeException("导出内容为空");
                }

                ByteArrayInputStream inputStream = new ByteArrayInputStream(body);
                byte[] bytes = IOUtils.toByteArray(inputStream);
                String s = "data:application/pdf;base64," + Base64.getEncoder().encodeToString(bytes);
                ByteArrayInputStream stream = null;
                BASE64Decoder decoder = new BASE64Decoder();
                byte[] bt = decoder.decodeBuffer(s);
                stream = new ByteArrayInputStream(bt);
                filePath = MinioUtil.upload(stream,rootPath+"/"+batchId+"_"+communityId+".pdf");
                inputStream.close();
            } else {
                throw new RuntimeException("导出失败,HTTP状态码:" + responseEntity.getStatusCode());
            }
        } catch (RestClientException | IOException e) {
            e.printStackTrace();
            throw new RuntimeException("调用报表导出接口失败:" + e.getMessage());
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
        return filePath;
    }

二、积木报表导出pdf出现第一个下面出现大量空白

先说结论:此问题是由于"自动换行"导致的。给单元格设置自动换行其实就是允许单元格根据内容自动调整高度,那么打印时会有以下问题:

  • 单元格自动换行导致当前页面高度超出1页纸了,打印时会将该单元格调整至下一页打印,那么当前页的尾部就会出现部分空白区域:
    在这里插入图片描述

三、积木报表中sql解析后数据类型不正确会导致数据无法预览

解决方案:非必要不填数据类型即可。

四、自我反思

1、升级版本时候要认真阅读升级日志及注意事项;
2、及时查询“调用接口”是否更改;
3、对于上述②③问题,我首先着手通过查看源码以寻求解决方案,最后碰巧解决;因为对于积木报表还是以官方文档为主寻找解决方式。

<think>嗯,用户现在想在欧拉系统中下载并使用积木报表,也就是JimuReport。我需要先回想一下之前的对话。之前他们遇到了Docker和Docker-Compose的问题,我提供了安装和配置的解决方案。现在用户的需求转移到了具体的应用部署上,可能他们已经在欧拉系统上成功配置了Docker环境,现在想进一步使用积木报表。 首先,我需要确认积木报表是什么。积木报表是一个开源的报表工具,可能用户需要部署它到他们的服务器上,使用Docker可能是常见的部署方式。因此,我需要提供在欧拉系统上使用Docker和Docker-Compose来部署积木报表的步骤。 用户之前的回复中提到了Docker服务的问题和Docker-Compose的安装,所以可能需要先确保Docker环境已经正确配置。接下来,积木报表可能有官方的Docker镜像或者GitHub仓库,需要查找相关资源。如果官方有提供Docker Compose文件,那会简化部署过程,否则可能需要自己编写。 另外,用户提到要下载资源或文档到欧拉系统,可能需要下载源码、文档或者Docker镜像。需要指导用户如何获取这些资源,比如通过git克隆仓库,或者使用wget/curl下载压缩包。同时,可能需要安装Java、Maven等依赖,如果积木报表需要编译的话。 考虑到用户可能对Linux命令和Docker操作不太熟悉,步骤需要详细,并给出具体的命令示例。例如,如何拉取镜像,如何编写docker-compose.yml,如何启动服务,以及如何访问报表系统。 还需要注意欧拉系统的兼容性,特别是如果积木报表有特定的依赖或环境要求,可能需要调整配置。例如,检查Java版本,数据库配置(如MySQL),以及端口映射是否正确。 另外,用户可能会遇到权限问题,比如Docker需要sudo或者用户组权限,之前在解决方案中提到过,这里可能需要再次提醒用户将用户加入docker组,避免权限错误。 最后,应该包括验证步骤,确保部署成功后,用户可以通过浏览器访问积木报表的界面,并且可能提供常见问题的解决方法,比如端口冲突、依赖缺失等。 总结下来,回答的结构应该包括:环境准备、获取资源、部署步骤(Docker或Docker-Compose)、验证和使用,以及相关问题和解决方法。需要确保命令正确,适合欧拉系统,并且考虑用户可能遇到的典型问题,提前给出解决方案。</think>--- ### **欧拉系统部署积木报表(JimuReport)完整指南** --- #### **一、环境准备** 1. **确认Docker与Docker-Compose状态** ```bash # 验证Docker服务 systemctl status docker | grep "Active: active (running)" # 检查Docker-Compose版本 docker-compose --version # 需≥2.0.0[^1] ``` 2. **安装必要依赖** ```bash # 安装JDK(若报表需要Java环境) sudo yum install -y java-11-openjdk-devel # 验证Java版本 java -version # 需≥Java 8 ``` --- #### **二、获取积木报表资源** ##### **方法1:通过官方仓库下载** ```bash # 克隆积木报表Git仓库(示例地址) git clone https://github.com/jeecgboot/JimuReport.git cd JimuReport # 查看稳定版本分支(例如v2.4.2) git checkout v2.4.2 ``` ##### **方法2:直接下载发行包** ```bash # 使用wget获取预编译包(示例链接) wget https://github.com/jeecgboot/JimuReport/releases/download/v2.4.2/jimureport-docker.zip unzip jimureport-docker.zip ``` --- #### **三、Docker-Compose快速部署** ##### **1. 编写docker-compose.yml** ```yaml version: '3' services: jimureport: image: jeecgboot/jimureport:2.4.2 # 官方镜像[^2] container_name: jimureport ports: - "8080:8080" volumes: - ./report_data:/home/jimu/reports # 持久化报表数据 environment: - SPRING_DATASOURCE_URL=jdbc:mysql://mysql:3306/jimureport?useSSL=false - SPRING_DATASOURCE_USERNAME=root - SPRING_DATASOURCE_PASSWORD=123456 depends_on: - mysql mysql: image: mysql:5.7 environment: - MYSQL_ROOT_PASSWORD=123456 - MYSQL_DATABASE=jimureport volumes: - ./mysql_data:/var/lib/mysql ``` ##### **2. 启动服务** ```bash # 后台启动容器 docker-compose up -d # 查看日志确认启动状态 docker-compose logs -f jimureport ``` --- #### **四、访问与验证** 1. **浏览器访问** ``` http://服务器IP:8080/jmreport ``` *默认账号: admin/123456*[^2] 2. **功能验证** ```bash # 检查容器状态 docker ps | grep jimureport # 应显示Up状态 # 测试API连通性 curl -I http://localhost:8080/jmreport/health ``` --- #### **五、常见问题解决** ##### **1. 数据库连接失败** - **现象**: `SQLException: Access denied for user 'root'@'172.20.0.3'` - **解决方案**: ```yaml # 修改docker-compose.yml中mysql服务配置 environment: - MYSQL_ROOT_HOST='%' # 允许远程连接[^3] ``` ##### **2. 端口冲突** - **现象**: `Bind for 0.0.0.0:8080 failed: port is already allocated` - **解决方案**: ```bash # 修改docker-compose.yml端口映射为 8081:8080 ports: - "8081:8080" ``` --- ### **相关问题** 1. **如何备份积木报表数据?** > 直接备份挂载目录:`tar -czvf report_backup.tar.gz ./report_data`[^2] 2. **欧拉系统中如何更新积木报表版本?** > 修改`docker-compose.yml`中的镜像标签后执行: > `docker-compose pull && docker-compose up -d` 3. **如何集成积木报表到现有Java项目?** > 通过Maven依赖引入SDK: > ```xml > <dependency> > <groupId>org.jeecgframework.boot</groupId> > <artifactId>jimureport-spring-boot-starter</artifactId> > <version>2.4.2</version> > </dependency> > ``` --- ### **部署流程图** ```mermaid graph LR A[准备Docker环境] --> B[获取积木报表资源] B --> C{部署方式} C -->|Docker-Compose| D[编写YML文件] C -->|手动部署| E[构建Java环境] D --> F[启动容器] E --> F F --> G[验证服务] ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

java亮小白1997

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值