ng2-pdfjs-viewer左侧边栏默认状态不一致及调用close关闭时闪烁问题
ng2-pdfjs-viewer 侧边栏默认状态规则与闪烁问题解决方案
侧边栏默认状态判断规则
ng2-pdfjs-viewer 底层基于 PDF.js 实现,侧边栏默认开合状态遵循以下优先级规则:
- 优先读取当前加载PDF文件内置的
ViewerPreferences(初始视图配置):如果PDF创作时被设置为打开时自动显示书签/缩略图面板,组件就会默认打开侧边栏 - 若PDF未配置上述属性,才会使用组件的默认配置(默认关闭侧边栏)
这就是不同PDF文件侧边栏默认表现不一致的核心原因。
侧边栏闪烁问题原因
你在 onDocumentLoad 事件中关闭侧边栏的方案存在时机滞后的问题:onDocumentLoad 是PDF文件完全加载、UI已经完成渲染后才触发的事件,此时PDF.js已经根据PDF的内置配置把侧边栏渲染出来了,再调用 close() 方法自然会出现先显示再消失的闪烁。
无闪烁关闭侧边栏的解决方案
直接在PDF加载前修改PDF.js的全局默认配置,让配置优先级高于PDF内置的视图属性,从根源避免侧边栏被自动打开:
// 放在组件初始化阶段,比如 ngAfterViewInit 中,执行时机早于PDF加载逻辑 ngAfterViewInit() { // 配置侧边栏加载时默认状态:0=永久关闭,1=缩略图面板,2=书签面板,3=附件面板 this.pdfViewer.PDFViewerApplicationOptions.set('sidebarViewOnLoad', 0); }
该配置会覆盖PDF文件内置的初始视图设置,侧边栏从一开始就不会被渲染出来,完全没有闪烁问题。
如果有特殊场景需要保留部分PDF的侧边栏配置,也可以将关闭逻辑绑定到更早的 onPagesInit 事件中,该事件在UI渲染前触发,也能避免闪烁:
pagesInitHandler() { this.pdfViewer.PDFViewerApplication.pdfSidebar.close(); }
内容的提问来源于stack exchange,提问作者aneeshere
相关产品推荐
相关产品推荐

