Mahfuzur 的GSoc项目涉及 Okular 的文本选择特性。
当前4.7的Okular文本选择功能(工具-文本选择)很弱,是以字符块的形式,要使文档只有一列的话没问题,要是两列的文档,列间距都会被高亮选择上,不支持多列的文本选择。这个问题见下图所示:
还有个问题,Okular 支持多种文档,不同文档生成文本的方式是不同的,在选定文本前 Okular 需要有继承 Generator 的类来生成文本(PDF文档是PDFgenerator类用的poppler处理文本),生成的文本存储在 TextPage 中,每页都有个 TextPage,选定文本后,具体的文字就从 TextPage 中提取出来。
但一些具体类(generators)没有考虑到文字之间的空格(比如djvu),这种情况下文本选择后复制粘贴会出现没空格没法读的悲剧。选择文本的时候很明显空格都没高亮选定,效果图:
(中间省略一堆的实现算法/细节……)
最后的效果图是这样的:
文本选择功能都够识别“列”
djvu文档的空格问题也解决了:
多列的文本选择效果(左侧是当前效果,右侧是改进后的)
作者开发中还遇到其它问题,像是没选择文本右键也出现“复制文本”的菜单,odt、epub格式高亮色是黑色而非蓝色的bug,这些都修正了。
此外还需要改进的是报刊杂志常用的复杂布局(列覆盖/重叠,column overlaying column overlapping),对比Adobe Reader效果(左侧是Okular,很糟,右侧是Adobe Reader):
和chm文档文本选择的generator返回混乱,epub文档文本选择后文字加粗的问题,文本选择/加注解后滚动页面出现随机有颜色的线之类的。
这些还需要改进的地方作者打算以后有空再搞。
via http://nightcrawlerinshadow.wordpress.com/2011/08/20/advanced-text-selection-in-okular/
8 FEEDBACKS