mupdf源码分析(四)加载文档之文档初始化并加载交叉引用表

这一章将详细分析一下pdf_init_document(fz_context *ctx, pdf_document *doc)接口的内部调用逻辑。此接口主要实现文档初始化并加载交叉引用表的功能。

1,解析文档版本 范围:1.0-1.7 ,pdf_load_version(ctx, doc);//操作文件流,读取首行解析文档版本

2,如果线性文件标志为真,加载线性文件, pdf_load_linear(ctx, doc);后续章节会详细介绍线性文件过程。

3,判断是否是线性文件,pdf_check_linear(ctx, doc);//获取线性化参数字典,判断Linearized标志

4,加载交叉引用表,pdf_load_xref(ctx, doc, &doc->lexbuf.base);

4.1)查找最后一个交叉引用表的位置 pdf_read_start_xref(ctx, doc);//操作文件指针找到“startxref”处

4.2)获取所有交叉引用表的位置,保存在int64数组内 pdf_read_xref_sections(ctx, doc, doc->startxref, buf, 1);

     4.2.1)交叉引用表结构初始化 pdf_populate_next_xref_level(ctx, doc);//创建xref结构,默认初始化

     4.2.2)交叉引用表与尾注关联,返回上一个交叉引用表的位置 ofs = read_xref_section(ctx, doc, ofs, buf);//获取尾注字典,与交叉引用表关联,返回上一个交叉引用表的位置

4.3)xref index数组 赋值 pdf_prime_xref_index(ctx, doc);//遍历所有所有交叉引用表,将n类型条目存入xref_index数组

4.4)交叉引用表第i个条目 初步判断type entry = pdf_get_xref_entry(ctx, doc, i);

5,判断文件是否需要修复,若需要 pdf_repair_xref(ctx, doc);//修复完成后调用pdf_prime_xref_index(ctx, doc);//更新xref_index数组

6,密钥认证 pdf_authenticate_password(ctx, doc, "");

7,读取ocg信息 pdf_read_ocg(ctx, doc);

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值