您所在的位置:首页 > i医疗 > 科技前沿 > 技术标准 >  电子病历文本编辑器中文字断行及排版算法研究(5)
电子病历文本编辑器中文字断行及排版算法研究(5)
  • 2013-04-17 10:47
  • 作者:袁永福
  • 来源:中国数字医疗网

行内排版

文字断行完成后,需要进行行内排版。

文档行中各个字符的宽度之和不大可能正好等于文档容器的客户区宽度。两者会有空白差。

由于中文字符和英文字符宽度不一样,对于不等宽字体,各个英文字符、数字字符等宽度还不一样。使得各个文本行的字符宽度之和是不一样的,使得各个文档行右边缘是参差不齐的。这样比较严重的影响美观。

为此需要将文档行的宽度拉长成文档容器客户区宽度,由此会额外的制造出不少空白,此时需要将这些空白比较均匀的分摊到各个字符上。此处是比较均匀的分摊,但不是完全均匀,是有一定的分布算法的。

同一行中,字符不是相对孤立的,而且从逻辑上分为一组一组的,对于汉字和标点符号,它们是各自为政,自己组成一组。对于连续的英文字母字符和阿拉伯数字,它们逻辑上是同一组的,一起构成一个完整的单词,因此同一组之间的字符之间应该是紧密连接在一起,不得拆开。

为此要分摊由于文字两边对齐而造成的额外空间时,首先要对文档行的字符进行分组,然后将额外的空白平均分摊到字符组上。

例如对于文字“DCWriter电子病历文本编辑器。”,其分组为“[DCWriter][电][子][病][历][文][本][编][辑][器][。]”,其中一对方括号之间就是一组字符,这样就分成11组。如果额外的空白宽度为20个单位,则需要将空白平均分摊到这些字符组上面,最后一组不分摊,于是前面10组分配得到20÷(11-1)=2个单位的空白宽度。在排版时将这10个2单位的空白宽度插入到字符组之间,这样就能拉长文档行的宽度正好等于文档容器的客户区宽度。

共6页: 上一页 [1][2][3][4]5 [6]下一页 [查看全文]
标签:电子病历文本编辑器  中文字断行  排版算法  
  • 分享到: