啊当 发表于 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 static/image/common/back.gif
暴力方法
是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 static/image/common/back.gif
先把所有的unicode解析一次
生成一个文件,存每个字的大小
再做索引和二级索引


但是用户换字体就得全部再算
除非把所有字体都算好。。
可是用户新导入一本书怎么办?

maddrone 发表于 2013-5-17 15:48

啊当 发表于 2013-5-17 15:42 static/image/common/back.gif
但是用户换字体就得全部再算
除非把所有字体都算好。。
可是用户新导入一本书怎么办?

新加入的字体当然需要重新计算索引
新加入书不用

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

[:103]
页: [1]
查看完整版本: 不得不把我遇到的一个技术难题拿上来请教8da的神仙了