如上图,在一个宽度固定的容器内,超过宽度的文字会自动换行。现在需要以自然行的方式,提取前20行有什么解决方案?
自然行即肉眼、常识上的行。如:大家都说:章晓峰是个很可恶很抠门的人。,在这个容器内就是 2 行
目前我的解决方案
1
Kasine 2018-06-23 11:23:12 +08:00 via Android
Word 里面用 Alt+左键框选应该可以
|
3
TtiGeR 2018-06-23 13:56:05 +08:00 via iPhone
是要做预览么?
其实稍微多截一点 然后限高(根据行高算)或者用 line-clamp 如果纯中文(等宽字符)还好,遇到混合英文的,因为字体和浏览器原因,换行还不是完全一致的。 |
4
qsnow6 OP @TtiGeR 是要把一篇文章,以行为单位,等份拆成 X 份;
长度不一致是由于中英文所占字节长度不一样导致的,英文占 1 个字节、中文 GBK 编码 2 个字节、UTF8 占 3 个字节; 暂时是把中文转换成 GBK 编码,每增加一个字符就比对下字节长度,确保字节长度<=最大字节长度就可以了 |
5
msg7086 2018-06-23 16:45:32 +08:00
首先吧,你这个宽度计算完全依赖于字体渲染。比如非汉字与汉字的比例不定,标点符号宽度的调整,标点在行首行尾的额外调整规则等等,有很多因素。
如果你要得到证实的结果,那就真的只能拿同一个渲染器进行渲染。比如浏览器里跑的话,直接开个容器往里填字然后测算大小。如果是应用程序里跑的话,找个能排版的组件来渲染。 中文 2 宽,英文 1 宽,这种只有在等宽环境(比如命令行下)才能用。先测出整个字符串的 Unicode Width,然后除以宽度算行数。 |
6
superbiger 2018-06-24 00:14:53 +08:00
https://www.zhangxinxu.com/wordpress/2018/02/canvas-text-break-line-letter-spacing-vertical/
你看下这个吧,可能 canvas 绘制可能能实现你想要的控制精度。 |