首页 > 编程知识 正文

mupdf源码分析,mupdf 源代码 分析

时间:2023-05-03 22:26:02 阅读:227127 作者:4963

      前段时间工作极度忙碌,多个项目并行,期间还去强制封闭开发了两周,完全没有一点自己的时间,忙的有时候我都开始质疑自己当初的抉择,通常需要释放压力的时候,我会选择在自己力所能及的范围内购物,恰巧自己的defy不幸刷机杯具,就给自己买个galaxy tab,当做提前给自己的新年礼物吧。本来很喜欢galaxy tab 7.7,super amoled的屏幕,但是要等到1月份才上市,还是先买先享受吧。

     这两天在看一些pdf reader相关的文档,也比较了一些pdf reader,商业的,开源的,在android平台上,体验最好的,还是adobe reader 10.0,多点触控,翻页,页面跳转,流畅度,都不得不感叹毕竟是pdf鼻祖,可惜不提供android的sdk。开源的pdf reader中,多数基于mupd解析pdf文件,从官网下载最新的0.9版本,在linux环境下,下载thirdparty和pregenerate,编译遇到很多问题,google后逐一解决,终于通过NDK编译,生成了so文件,免费开放出来。http://download.csdn.net/detail/readreply/3913202。其Java代码只有三个,因此界面极其简单,且用户体验远不及adobe pdf reader,但其在windows xp下的编译异常轻松。

     因为目前android平台上的pdf reader还都没提供outline跳转功能, 晚上看了pdf解析outline部分,附上部分代码。这段代码只得到第一层目录的名称和页数,通过简单的递归或遍历,就可得到全文索引的页码。这个页码,是在文档中的实际页码,和索引中显示的页码还是有所区别。

    接下来研究如何点击outline的跳转到相应页面的功能及高亮、批注。怎么知道点击了文档哪一行呢,怎么选择一行呢,没头绪。


void getoutlinepage(pdf_xref *xref)
{
pdf_outline *outline = pdf_load_outline(xref);
int p;
while(outline)
{
for(p=0; p<totalpage; p++)
{
if(fz_is_array(outline->link->dest))
{
if(fz_objcmp(pdf_resolve_indirect(fz_array_get(outline->link->dest ,0)), xref->page_objs[p])==0)
{
break;
}
}
}
outline=outline->next;
}
}

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。