PDF.js定義了所謂的PageViewport,它允許在PDF座標和屏幕上的顯示之間進行轉換。要創建視口,請參閱PDF頁面的getViewport。將座標轉換爲屏幕演示文稿:var screenRect = viewport.convertToViewportRectangle([0, 0, 14, 5]);
在畫布上標準化座標併疊加div。
通用查看器的API尚未定義。但是,您可以使用查看器組件獲取頁面視圖:var pageView = PDFViewerApplication.pdfViewer.getPageView(3); // get page 4 view
。 pageView將有viewport
和div
-container。 (由於API尚未定義,名稱和參數可能會更改)如果您正在使用查看器容器,請注意在縮放/滾動期間定期清理它們 - 在pagerendered
事件之後繪製您的內容。
在當前視圖中,滾動僅在screenRect
處顯示pageView.div
。
var pageNumber = 4;
var pdfRect = [0,0,140,150];
var pageView = PDFViewerApplication.pdfViewer.getPageView(pageNumber - 1);
var screenRect = pageView.viewport.convertToViewportRectangle(pdfRect);
var x = Math.min(screenRect[0], screenRect[2]), width = Math.abs(screenRect[0] - screenRect[2]);
var y = Math.min(screenRect[1], screenRect[3]), height = Math.abs(screenRect[1] - screenRect[3]);
// note: needs to be done in the 'pagerendered' event
var overlayDiv = document.createElement('div');
overlayDiv.setAttribute('style', 'background-color: rgba(255,255,0,0.5);position:absolute;' +
'left:' + x + 'px;top:' + y + 'px;width:' + width + 'px;height:' + height + 'px;');
pageView.div.appendChild(overlayDiv);
// scroll
scrollIntoView(pageView.div, {top: y});
還有https://gist.github.com/yurydelendik/f2b846dae7cb29c86d23 – async5