一、写在前面:
-
pdfjs ignoring failures
-
由于使用pdf.js的canvas形式渲染pdf,导致切换页码时,存在印章位置偏移,丢失的现象,经排查后,定位到pdf.js内部逻辑缺少判断导致问题发生。
二、详细问题描述
-
快速切换当前展示的pdf画布内容时,pdf.js内部使用的promise异步加载的方式,来解析渲染当前页的展示内容,一旦promise返回状态为成功,但返回值为空,就会进入到销毁方法内,方法内存在 忽略报错 相关逻辑,并重新渲染画布内容。
-
此销毁方法为问题第一个影响点,销毁过后,会清空一些值,但有的值未被清掉,导致之后的加载,transform方法拿到的数据是未被销毁的值,导致算法计算出错,印章位置发生偏移,旋转,放大缩小等问题。
-
后根据输出transform内部使用的传递的参数,来进行判断,值是否等于1.82,此1.82为首次加载时第一次调用transform传递的参数,之后就会被内部的值覆盖,而异步加载失败后,非首次加载还传这个1.82就会导致计算错误,由此推断,可根据内部存储数组的第0项是否等于1.82来进行判断。
-
最终是在ctx.transform中加入上方判断来进行处理,当存储数组的第0项等于1.82时,不进行计算,直接使用传进来的值。