我正在添加一个使用pdf.js Display API(https://github.com/mozilla/pdf.js/blob/master/src/display/api.js)构建的PDF查看器。目前,每个PDF只有一个页面。我想允许用户更改PDF的缩放和旋转,但似乎唯一的方法是在调用render
函数时修改viewport
。
前viewport = PDFPageProxy.getViewport({ scale: newScale, rotation: totalRotation });
PDFPageProxy.render({ canvasContext, viewport})
这意味着每次用户缩放或旋转页面时,整个PDF都必须重新渲染,并且单个页面大小为~1.5MB,RenderTask解析的时间可能接近一秒。
我看到在pdfjs提供的“查看器”中,有setter方法currentScale
和pagesRotation
。令https://github.com/mozilla/pdf.js/blob/d08895d6591b8b3233676a2ffa6a2c294cb70df7/web/pdf_viewer.js#L163-L225困惑的是,当在查看器中测试相同的1.5MB pdf页面时,缩放和旋转动作几乎是即时的。
有没有更好的方法来使用pdf.js Display API更改pdf的缩放和旋转?查看器如何实现此类性能更改?
2条答案
按热度按时间qojgxg4l1#
既然它只有一个页面,为什么不使用canvas内部API在浏览器中捕获页面作为图像,然后通过旋转或任何你想要的操作来操纵它,而不是每次你想要执行UI操作时重新呈现整个pdf?
ajsxfq5m2#
PDF.js延迟加载PDF页面,它只渲染视口附近可见的页面。
我认为你应该坚持重新渲染的方法,因为如果你不重新渲染,你必须使用现有的DOM并做一些转换,使视图看起来完全符合你的要求,但这会影响所有页面,因为你没有实现lazyload,转换可能会破坏一些内部API。