请选择 进入手机版 | 继续访问电脑版
 找回密码
 立即注册

QQ登录

只需一步,快速开始

品茗-3

金牌服务用户

37

主题

95

帖子

344

积分

金牌服务用户

积分
344

[已处理] 富文本字间距

品茗-3
金牌服务用户   /  发表于:2018-9-10 17:18  /   查看:3694  /  回复:9
本帖最后由 品茗-3 于 2018-9-11 15:55 编辑

富文本怎么控制字间距,有什么参数影响其显示?

状况:

我这初始化富文本后输入文字,出现同样的文本内容,间距可能存在差异。
操作:
1. 单元格A4直接输入“前卫而同样”
2. 单元格A5先输英文(字符),删除后,再输“前卫而同样”
此刻,字符间隔不一致

富.png
但demo里测试无此现象,所以找不到原因,求解。
我将其设置成文本时,两者的fs有差异,如图:
富1.png


9 个回复

倒序浏览
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2018-9-10 18:02:33
沙发
spread用的标准富文本编辑器做的拓展,规则和标准RichTextBox一样。
fs20和fs18应该代表的是字体的大小,猜测是因为字体大小不通导致的文字间隔不通,但是为什么输入英文会导致字体变化,这个不是很确定。
我这边简单试了下没有重现出来,可否想办法提供个Demo
回复 使用道具 举报
品茗-3
金牌服务用户   /  发表于:2018-9-10 18:44:41
板凳
本帖最后由 品茗-3 于 2018-9-10 19:19 编辑
dexteryao 发表于 2018-9-10 18:02
spread用的标准富文本编辑器做的拓展,规则和标准RichTextBox一样。
fs20和fs18应该代表的是字体的大小, ...

blob246442259.png
是这个引起的,富文本字体大小会变动,
我单元格初始设置的默认是10号字体(这个原因引起,demo里是9号才没出现问题),
我这现象:
1、单元格的所在字号是10,双击查看空单元格的富文本字号也是10(此现象视为正确);
2、移动A列头改变列距,此时单元格的所在字号是10,双击查看空单元格的富文本字号却是9.75(存在差异了)
3-1、若我直接输入中文,此时单元格的所在字号是10,双击查看单元格的富文本字号也是10(此现象视为正确)
3-2、若我先输如英文字符,然后直接后退键删除,再输入中文内容,此时单元格的所在字号是10,双击查看单元格的富文本字号却是9(bug现象出现)

默认单元格字体非9号时,富文本输入中文文字和先输英文再输中文会出现字号选择不同的问题,导致差异出现,


回复 使用道具 举报
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2018-9-11 10:13:12
地板
您好,是默认字体的原因,如果单元格里面没有文字,再次进入编辑状态时候会恢复默认字体。默认字体就是单元格的字体,如果单元格没有字体就从sheet或者theme上获取。
3-2 您说的这个我没有重现出来,删除英文不退出编辑状态再输入,还是保持现有字体,没有变化,但是如果删除英文退出编辑状态后再重现编辑,会恢复默认字体。可能重现步骤还有差异。
现在解决方案是设置单元格字体或者默认字体,如果不知道默认字体,可以再单元格第一次进入编辑状态时候获取rich的字体给单元格。


  1.         private void FpSpread1_EditModeOn(object sender, EventArgs e)
  2.         {
  3.             if (fpSpread1.EditingControl is RichTextEditor)
  4.             {
  5.                 var control = fpSpread1.EditingControl as RichTextEditor;
  6.                 if(fpSpread1.ActiveSheet.ActiveCell.Font is null)
  7.                 {
  8.                     fpSpread1.ActiveSheet.ActiveCell.Font = control.SelectionFont;
  9.                 }
  10.             }
  11.         }
复制代码
回复 使用道具 举报
品茗-3
金牌服务用户   /  发表于:2018-9-11 14:23:54
5#
本帖最后由 品茗-3 于 2018-9-11 15:54 编辑
dexteryao 发表于 2018-9-11 10:13
您好,是默认字体的原因,如果单元格里面没有文字,再次进入编辑状态时候会恢复默认字体。默认字体就是单元 ...

我想要的是富文本的字体和我的默认字号一样,不是把富文本字体赋值给单元格,spread初始时,我就把spread初始宋体10号了, fpSpread.Font = new Font("宋体",10); 单元格设置了富文本。
从我录制的gif图中看。
第一次编辑进去,富文本字号10(此项视为正确)
第二次编辑进去,富文本字号9.75(突然发生差异,不知道是什么影响)
输入中文字体,再次查看富文本字号为10(此项视为正确)
同样下一格单元格,查看富文本字号,显示为9.75(与之前的9.75一样,而不是您说的空单元格编辑显示我默认字号10)
当个输入英文字符,删除后再输入相同的中文,很明显字体大小存在差距,查看富文本字号,显示为9号,bug重现。
爱很简单.gif




回复 使用道具 举报
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2018-9-12 00:22:40
6#
此问题已重现,目前具体原因还得深入调查。
临时解决方案还是和之前一样,不过按照您的需求做了谢调整,由默认字体决定richcell的字体

  1.             fpSpread1.ActiveSheet.Cells[0, 0, 1, 1].Font = new Font("宋体", 10, FontStyle.Regular);
  2.             fpSpread1.ActiveSheet.DefaultStyle.Font = new Font("宋体", 10, FontStyle.Regular);
复制代码

  1.         private void FpSpread1_EditModeOn(object sender, EventArgs e)
  2.         {
  3.             if (fpSpread1.EditingControl is RichTextEditor)
  4.             {
  5.                 var control = fpSpread1.EditingControl as RichTextEditor;
  6.                 if (!(fpSpread1.ActiveSheet.ActiveCell.Font is null))
  7.                 {
  8.                     control.SelectionFont = fpSpread1.ActiveSheet.ActiveCell.Font;
  9.                 }
  10.                 else if(fpSpread1.ActiveSheet.DefaultStyle !=null && fpSpread1.ActiveSheet.DefaultStyle.Font != null)
  11.                 {
  12.                     control.SelectionFont = fpSpread1.ActiveSheet.DefaultStyle.Font;
  13.                 }
  14.             }
  15.         }
复制代码
回复 使用道具 举报
品茗-3
金牌服务用户   /  发表于:2018-9-12 16:04:15
7#
dexteryao 发表于 2018-9-12 00:22
此问题已重现,目前具体原因还得深入调查。
临时解决方案还是和之前一样,不过按照您的需求做了谢调整,由 ...

用您的方法,我这还追加了个spread.font判断,但在      
fpSpread.EditModeReplace = true; // 替换现有的文本编辑
这个条件下,会有其他bug现象,该条件下,双击进入编辑状态时默认文本是全选状态的,
在进入EditModeOn时间后,默认会将原先富文本中设置的部分字体或全部设置的其他其中
变成我单元格,或页,或表格中初始的字体,如图:
爱很简单.gif
回复 使用道具 举报
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2018-9-12 16:22:56
8#
可以再加一个判断,

                if (control.SelectedText.Length > 0)
                {
                    return;
                }

这个已经反馈开发,看是否能从根本解决,这个现在是临时方案
回复 使用道具 举报
品茗-3
金牌服务用户   /  发表于:2018-9-12 16:40:00
9#
本帖最后由 品茗-3 于 2018-9-12 16:49 编辑
dexteryao 发表于 2018-9-12 16:22
可以再加一个判断,

                if (control.SelectedText.Length > 0)

嗯,好的,就怕这个会一点点衍生出其他bug,后期就不好处理了,而且每次编辑都要这么判断处理,会降低性能和效率
回复 使用道具 举报
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2018-9-12 16:54:38
10#
品茗-3 发表于 2018-9-12 16:40
嗯,好的,就怕这个会一点点衍生出其他bug,后期就不好处理了,而且每次编辑都要这么判断处理,会降低性能 ...

是的,您代码里也备注下,后面如果修了这些代码也都不需要了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部