找回密码
 立即注册

QQ登录

只需一步,快速开始

CloudJSTI

金牌服务用户

36

主题

98

帖子

332

积分

金牌服务用户

积分
332
CloudJSTI
金牌服务用户   /  发表于:2023-9-5 16:32  /   查看:3414  /  回复:18
本帖最后由 Richard.Huang 于 2023-10-12 09:54 编辑

产品:GcExcel
版本:6.2.2
问题编号:DOCXLS-9039


e772a3fe5d1dbadb7b8366acc1ae62a.png94171752.png
附件中又ssjson和datasource;
在使用GCEXCEL把文件转换成pdf时报上面的错误



data_20230905161509500_data.txt

25.77 KB, 下载次数: 270

data_20230905161509500.ssjson

2.41 MB, 下载次数: 486

18 个回复

倒序浏览
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2023-9-5 17:40:13
沙发
您好,

观察了您提供的json,发现里面有多个sheet。测试获取了activeSheet进行数据绑定,可以复现您的问题。
但是为了避免排查方向有误,影响问题解决效率,建议您参考下附件的demo,看下是否与您那边代码以及结果相符。


GcExcel_demo_maven.zip

197.6 KB, 下载次数: 427

回复 使用道具 举报
Will1394
金牌服务用户   /  发表于:2023-9-5 18:02:00
板凳
image.png286775817.png
代码类似,比较简单的实现。
回复 使用道具 举报
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2023-9-6 09:16:05
地板
Will1394 发表于 2023-9-5 18:02
代码类似,比较简单的实现。

您将代码拷贝出来,以文本的形式粘贴下,这边实际验证看看。
回复 使用道具 举报
Will1394
金牌服务用户   /  发表于:2023-9-6 09:27:45
5#
Lynn.Dou 发表于 2023-9-6 09:16
您将代码拷贝出来,以文本的形式粘贴下,这边实际验证看看。

主要代码如下,如需运行,请将recordsResult.getFileUrl()替换成ssjson文件url,recordsResult.getExtendDataJson()替换成datasource



    /**
     * 生成PDF文件的展示效果
     *
     * @param records
     * @param response
     * @return
     */
    @ApiOperation(value = "生成PDF文件的展示效果", notes = "生成PDF文件的展示效果")
    @PostMapping(value = "/testOriginalRecordsPdfView")
    public void testOriginalRecordsPdfView(@RequestBody SampleTaskOriginalRecords records, HttpServletResponse response) throws Exception {

        SampleTaskOriginalRecords recordsResult = iSampleTaskOriginalRecordsService.getById(records.getId()).getResult();

        //获取ssjson文件并载入GCExcel
        InputStream inputStream = PoiTlUtil.urlToInputStream(preUrlPath + recordsResult.getFileUrl());
        Workbook workbook = new Workbook();
        workbook.fromJson(inputStream);

        Map<String, Object> sheetDataMap = JSONObject.parseObject(recordsResult.getExtendDataJson(), new TypeReference<Map<String, Object>>(){});

        //迭代每个sheet页,设置显示方向和显示百分比
        for (int i = 0; i < workbook.getWorksheets().getCount(); i++) {
            IWorksheet sheet = workbook.getWorksheets().get(i);
//            sheet.getPageSetup().setCenterHorizontally(true);
            sheet.getPageSetup().setBlackAndWhite(true);

            if ("设备".equals(sheet.getName()) || "参数".equals(sheet.getName()) || sheet.getName().startsWith("基本信息")) {
                sheet.setVisible(Visibility.VeryHidden);
            }

            if (sheetDataMap.containsKey(sheet.getName())) {

                sheet.setDataSource(new JsonDataSource(JSONObject.toJSONString(sheetDataMap.get(sheet.getName()))));
            }
        }

        SimpleDateFormat sd = new SimpleDateFormat("yyyyMMddHHmmssSSS");
        String newName = sd.format(new Date()) + ".pdf";

        ServletOutputStream outputStream = response.getOutputStream();

        response.setContentType("application/pdf;charset=utf-8");

        response.setHeader("Access-Control-Expose-Headers","Content-disposition");
        response.setCharacterEncoding("utf-8");

        response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(newName, "UTF-8"));

        workbook.save(outputStream, SaveFileFormat.Pdf);

        //关闭流
        if (outputStream != null) {
            outputStream.flush();
            outputStream.close();
        }
    }
回复 使用道具 举报
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2023-9-6 15:18:40
6#
本帖最后由 Lynn.Dou 于 2023-9-6 15:45 编辑

收到,这边再验证下,待有结果贴中回复您。
回复 使用道具 举报
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2023-9-7 17:01:18
7#
问题已复现,已将此问题记录下来进一步调研原因,待有进展贴中通知您。
本贴先做保留处理。
回复 使用道具 举报
Will1394
金牌服务用户   /  发表于:2023-9-8 14:23:49
8#
Lynn.Dou 发表于 2023-9-7 17:01
问题已复现,已将此问题记录下来进一步调研原因,待有进展贴中通知您。
本贴先做保留处理。

好的,感谢。
回复 使用道具 举报
Joestar.XuSpreadJS 开发认证
超级版主   /  发表于:2023-9-8 14:46:11
9#
不客气,后续有进展我们会在本帖中告知您。
回复 使用道具 举报
CloudJSTI
金牌服务用户   /  发表于:2023-9-8 16:17:39
10#
Joestar.Xu 发表于 2023-9-8 14:46
不客气,后续有进展我们会在本帖中告知您。

能加急处理下吗,这是个线上问题,很着急
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部