找回密码
 立即注册

QQ登录

只需一步,快速开始

Misitush

金牌服务用户

5

主题

8

帖子

29

积分

金牌服务用户

积分
29
最新发帖
Misitush
金牌服务用户   /  发表于:2022-1-20 16:39  /   查看:1915  /  回复:6
1金币
有时候一份客户的一份报告,正常超过一页,客户希望我们能够自动缩小字体,好适应一页。
C1有没现成的解决方案?

我们自动做了一个方案:生成好报告后,检查一下页数,如果超过一页,就缩字体,直到缩成一页或者到了最小字体。
理论上这个算法不错,但是实际情况,经常在这个过程中失去响应。不知有何好办法解决?大致代码如下:
  1. report.EndReport += C1ReportRenderCompleted;
  2.                     report.Render();
  3.                    c1RenderCompletedWaiter.WaitOne();
  4. if (report.GetPageCount() > 1)
  5.                     {
  6.      renderTimes++;
  7.      report.Render();
  8.     while ( 没有达到最小字体)
复制代码



6 个回复

倒序浏览
Misitush
金牌服务用户   /  发表于:2022-1-20 16:46:25
沙发
代码居然显示不全。后面的伪码:
  1. while ( 没有达到最小字体)
  2.     {
  3.         缩小字体;
  4.          report.Render();
  5.          c1RenderCompletedWaiter.WaitOne();
  6.          if (report.GetPageCount() == 1) 返回成功;            
  7.     }
  8. 返回失败。
复制代码

回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2022-1-20 18:20:08
板凳
这个确实没有什么好办法,C1Report没有提供自适应缩放的办法,只能这样子判断

我觉得可能的一个优化也只能是减少循环的次数,
比如说根据数据行数以及分组的数量,其实是可以判断出总行数,进而判断大概的高度,甚至于说计算出总的高度的,以预估出一个对应的字号

另外你提到的“失去响应”这个暂时无法判断具体原因,感觉有可能和你这边用多线程有关系,可以先单线程直接写试试
回复 使用道具 举报
Misitush
金牌服务用户   /  发表于:2022-1-20 18:58:08
地板
跟踪下来,代码在waitone时就没反应了。感觉是多render几次C1就不返回了。但不是每次都死,而是几天挂一次,很是头大……
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2022-1-20 23:39:58
5#
建议发我一个demo我帮你看看具体原因
回复 使用道具 举报
Derrick.Jiao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2022-2-15 11:00:20
6#
你好,请问问题是否以解决了呢?若仍未解决,请像上面同事所提的,提供一个demo,我们来调研。
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2022-3-15 11:06:01
7#
你好,请问问题是否以解决了呢?若仍未解决,麻烦提供一个demo,我们来调研。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部