PDF.JS渲染PDF的过程

1.调用getDocument

在viewer.js中通过getDocument获取到PDf文档后,返回了文档数据pdfDocument!

2.调用了self.load

然后调用了self.load(pdfDocument, scale);方法,在方法的内部又调用了pdfViewer.setDocument(pdfDocument);方法

3.setDocument

在setDocument方法内部,通过调用getPage方法获取到了pdf文档的页面

大致过程如下

  1. 进过在pdf.js内部的一些操作后,通过postmessage发送给pdf.worker.js一个对象

  2. 这时候就会调用pdf.worker.js PDFDocument构造函数的getpage方法

  3. 同时PDFDocument的方法有会去调用catalog构造函数的getpage方法,调用page构造函数,随后会返回一个实例化之后的page对象。调用page构造函数的参数从哪来的呢:

    1.在pdfManager函数内部传入的pdfManager和xref

    pdfManager是通过接口调取返回的一个xhr对象转buffer后在LocalPdfManager构造函数中生成的

    xref这个数据是在PDFDocument构造函数中使用xref构造函数实例化的

    2.pageIndex是构造函数内部的getPageIndex生成的,是PDF页码索引

    3.dict, ref是将pageIndex传入了内部的getPageDict方法生成的

    4.fontCache是RefSetCache构造函数的实例化对象

4.pdf.worker.js page构造函数

  • 内部的annotations方法调用了Annotation构造函数的fromRef方法,把xref对象和内部的annotationRefs方法生成的ref对象作为参数`

  • 调用了xref对象内部的fetchIfRef方法,用ref做为参数,返回一个dict对象

  • 把dict对象传给Util.getInheritableProperty返回一个Sig的字符串,以此调用WidgetAnnotation

  • 进入WidgetAnnotation构造函数内,直接看最后的Util.inherit部分,把WidgetAnnotation构造函数本身和Annotation构造函数和最后一个变量传输过去

  • 最后一个变量会返回一个 { isViewablefunction WidgetAnnotation_isViewable },函数内部判断在page方法中调用时传的fieldtype是不是Sig,如果是返回false,不是就调用parent.isViewable.call(this),然后又进入到了Annotation构造函数的fromRef方法

  • 这时候会进行判断会调用函数,如果注释掉之前的sig的判断,这时候返回值为true,同时就会触发return annotation

最后return了一个数组,数组里的内容就是annotation,同时调用shadow方法给page构造函数绑定了一个属性annotations,属性值为annotation数组。

5.handler的getpage事件

以上操作完成后会执行handler对象的getpage方法,返回数据发送给pdf.js

6.PDF.js的WorkerTransport

PDF.js接收信息后调用WorkerTransport构造函数的getpage方法,返回了一个promise,然后通过执行一些方法后重新把数据发送给viewer.js

7.执行绘制方法

viewer.js获取getpage方法返回的数据后,就调用了PDFPageView.draw方法,最后通过this.pdfPage.render();方法完成绘制过程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值