我們必須建立在GWT框架,我們要顯示一個PDF文件,而無需任何瀏覽器插件,並正在評估PDF.js做到這一點的應用程序。 問題是,無論我做什麼,我都無法將PDF文件呈現在我們的GWT應用程序的畫布上。做一些背景PDF.js與GWT應用程序不工作
- 從服務器檢索PDF文件票據。
的PDF.js文件票是從服務器中檢索並嵌入在HTML body使用這個腳本
var head= document.getElementsByTagName('body')[0]; var script= document.createElement('script'); script.type= 'text/javascript'; script.setAttribute('charset', 'UTF-8'); script.src=url; head.appendChild(script);
Canvas元素在視圖中創建的(這裏使用谷歌MVP模式)和JSNI調用是通過使用上述函數將PDF.js嵌入到HTML主體中的腳本。該腳本然後調用與PDF.js文件中定義的PDFJS類一起使用的函數。
呈現在畫布上的PDF文件的功能如下:
PDFJS.disableWorker = true; PDFJS.getDocument(url).then(function getPdfHelloWorld(pdf) { pdf.getPage(1).then(function getPageHelloWorld(page) { var scale = 1.25; var viewport = page.getViewport(scale); canvas.height = viewport.height; canvas.width = viewport.width; page.render({canvasContext: context, viewport: viewport}); page.startRendering(context); alert("Finished rendering"); }); });
畫布和背景下在視圖類創建並傳遞給JavaScript。
這裏的問題是,在調用JSNI之後,我顯示了所有變量的警報。瀏覽器顯示警報,除非我撥打電話提醒(PDFJS)。這表明PDFJS變量在腳本中未被識別。 這讓我覺得PDF.js文件未正確嵌入視圖中,或者有其他東西丟失。
注:我已經下載了大部分的過網的例子,大部分是在當地工作,即我可以修改PDF.js文件路徑拿起一個本地副本和HTML仍然呈現PDF。閱讀PDFJS變量沒有問題。它只在這個GWT應用程序中看到了這些問題。
沒有人有任何線索發生了什麼。您的幫助將受到高度讚賞。
感謝
我終於能夠使用注入的ScriptInjector.fromurl腳本。原來我們需要在注入腳本時設置一個窗口。這意味着調用看起來是這樣的:ScriptInjector.fromUrl(「https://raw.github.com/mozilla/pdf.js/gh-pages/build/pdf.js」).setCallback(新回撥<太虛,異常>().....)setWindow(SciptInjector.TOP_WINDOW).inject(); – emertech