PDF.js预览图纸pdf文件问题记录(未解决)

395 阅读3分钟

一、问题

背景

  1. PDF.js版本v2.4.0
  2. PDF.js版本v3.5.141
  3. 两个测试文件,一个600+kb(文件A),一个1.5mb(文件B)

现象

  1. 两个文件在2.4预览有问题
  2. 两个文件在3.5,文件A没有问题,文件B有问题
  3. 直接用WPS可以预览
  4. 直接拖入浏览器能够预览

正常预览是这样的(部分截图):

image.png

可以看出,红色箭头处是有内容的。

异常预览是这样的(部分截图):

image.png

可以看出异常了吧。

排查

因为2.4全都不好用,并且计划升级PDF.js版本,所以直接查3.5版本的代码。

因为文件A能够正常预览,文件B不行,所以先去观察这两次预览的输出有没有差异。

image.png

差异出现了,大致意思就是没有能够decode 图片,3.5版本在本文发表之前的一周更新了一个版本,3.5.120-3.5.141,更新了一些代码:

image.png

以上代码是更新的一部分,我从警告信息出发,定位到这里,createImageBitmap 方法出错,然后流程没有继续,就会出现上面所说的问题。

这里出的问题吗?我注释掉了这次更新的代码,并没有用。

Warning: Unable to decode image "img_p0_1": "InvalidStateError: The source image could not be decoded.".

这个报错还是有,但是,这里提醒我了,跟这次的代码更新没有关系,更多的原因是PDF.js将pdf转换成image之后出现的问题。

陷入困境

目前的信息:

  1. 不是120-141版本代码更新的问题,link
  2. 结合网络查询信息,可能是文件损坏
  3. 但是WPS能够正常预览
  4. 很大可能是转成image之后的问题
  5. ...

一线曙光

文件A与文件B,还有一个差异,那就是文件大小,他们都是一页,为啥有将近一倍的差异呢? 这个文件大小应该跟文件内容有关系吧?我是这么想的。

那就试试!

打开一个最新发现的在线工具,免费的就能满足我现在的需要。但是有部分功能还是需要WPS搞...

充值吧~

改变文件内容:

  1. 裁剪文件内容
  2. 压缩
  3. 其他

结果:

  1. 裁剪 ❌
  2. 压缩 ✅
  3. 其他 ❌

我次奥?

也就是说,文件过大?

不对不对,我们项目能够预览一整本书呢,那个更大才对。

这个文件是单页的,那么也就是说,可能跟分辨率有关系?

因为分辨率所以转成的image会比较大?

image.png

仔细看代码提交记录,发现120-141更新的就是处理一部分因为image过大造成的问题。

说通了,虽然这个更新没能解决文件B的预览问题,但是能够辅助说明文件B压缩之后,能够预览这个现象。

文件B可能是因为分辨率过大,PDF.js处理时出现一些问题。

但是,如果说文件B对于PDF.js是损坏的,那么我用工具压缩之后,损坏被修复了,会不会有这种可能呢?

如果是,那么就是文件损坏的问题了....

结论

我没能解决这个问题,擦!

酒浆~

欢迎大家关注我的公众号:王大锤学前端