八达网

标题: 不得不把我遇到的一个技术难题拿上来请教8da的神仙了 [打印本页]

作者: 啊当    时间: 2013-5-17 15:03
标题: 不得不把我遇到的一个技术难题拿上来请教8da的神仙了
我在做一个电子书软件
要求导入一个UTF8的TXT文件,就可以看书
开发平台为IPHONE

现在碰到一个问题。
由于字体的宽度因字而异,比如标点符号就比汉子的宽度要小
因此每一页所容纳的字数实际是不同的,这还不考虑换行问题

有什么办法能快速(1-2秒以内)迅速的将一个6M左右的文件根据屏幕宽度以及高度分页完毕
分页完毕时,每一页的页头都能对应这个TXT里的一个位置

为什么要这么做呢。。因为很多用户打开书籍以后,会想要跳转,比如打开后就想从书的一半看起
我如果没有分页数据,随便给他定位,他往前翻着翻着,最后就会发现第一页只显示了一半。

我看了下目前主流的软件如熊猫看书、qq阅读器、goodreader都能轻松做到,他们也不是用什么等宽字体。
到底是咋回事呢?
作者: 我不是大米    时间: 2013-5-17 15:05
要是你有种子问题,我可以帮你问问6条2
作者: 啊不    时间: 2013-5-17 15:32
要是你有种子问题,我可以帮你问问6条2
回复
作者: rolin    时间: 2013-5-17 15:35
暴力方法
是ansii字符  宽度+1 char index + 1
否则宽度+2, char index + 3
对付多字节编码的就不灵了,当哥你是不是还要先搞定文件的编码识别?  好消息是这么多的开源浏览器 他们的源码里面都有对于文件编码识别的实现, 抠出来用就好
作者: 啊当    时间: 2013-5-17 15:38
rolin 发表于 2013-5-17 15:35
暴力方法
是ansii字符  宽度+1 char index + 1
否则宽度+2, char index + 3

暴力的办法问题是速度太慢
一个6m的书,几百万字
暴力遍历一遍黄花菜已经凉了
作者: maddrone    时间: 2013-5-17 15:41
先把所有的unicode解析一次
生成一个文件,存每个字的大小
再做索引和二级索引
以空间换时间
作者: 啊当    时间: 2013-5-17 15:42
maddrone 发表于 2013-5-17 15:41
先把所有的unicode解析一次
生成一个文件,存每个字的大小
再做索引和二级索引

但是用户换字体就得全部再算
除非把所有字体都算好。。
可是用户新导入一本书怎么办?
作者: maddrone    时间: 2013-5-17 15:48
啊当 发表于 2013-5-17 15:42
但是用户换字体就得全部再算
除非把所有字体都算好。。
可是用户新导入一本书怎么办?

新加入的字体当然需要重新计算索引
新加入书不用
作者: hkkhhk    时间: 2013-5-17 17:22
我用的ieader软件往前翻的话就会变,变了的话会重新分页,其实没什么影响


作者: hkkhhk    时间: 2013-5-17 17:25
ireader
作者: 玖哥    时间: 2013-5-17 17:29
ireader
作者: Springsun    时间: 2013-5-17 17:38
我觉得ireader最好用啊,即使它是会变的也影响不大。
作者: 潜规则    时间: 2013-5-17 18:14
原创内容 水晶 +2
作者: SimoN    时间: 2013-5-17 21:21





欢迎光临 八达网 (https://www.8-da.com/) Powered by Discuz! X2.5