2012-11-30 74 views
2

我們必須建立在GWT框架,我們要顯示一個PDF文件,而無需任何瀏覽器插件,並正在評估PDF.js做到這一點的應用程序。 問題是,無論我做什麼,我都無法將PDF文件呈現在我們的GWT應用程序的畫布上。做一些背景PDF.js與GWT應用程序不工作

  1. 從服務器檢索PDF文件票據。
  2. 的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); 
    
  3. Canvas元素在視圖中創建的(這裏使用谷歌MVP模式)和JSNI調用是通過使用上述函數將PDF.js嵌入到HTML主體中的腳本。該腳本然後調用與PDF.js文件中定義的PDFJS類一起使用的函數。

  4. 呈現在畫布上的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"); 
        }); 
    }); 
    
  5. 畫布和背景下在視圖類創建並傳遞給JavaScript。

這裏的問題是,在調用JSNI之後,我顯示了所有變量的警報。瀏覽器顯示警報,除非我撥打電話提醒(PDFJS)。這表明PDFJS變量在腳本中未被識別。 這讓我覺得PDF.js文件未正確嵌入視圖中,或者有其他東西丟失。

注:我已經下載了大部分的過網的例子,大部分是在當地工作,即我可以修改PDF.js文件路徑拿起一個本地副本和HTML仍然呈現PDF。閱讀PDFJS變量沒有問題。它只在這個GWT應用程序中看到了這些問題。

沒有人有任何線索發生了什麼。您的幫助將受到高度讚賞。

感謝

回答

4

您的問題是,你注入腳本,所以它異步aloads,但你不要等到加載後纔開始使用它。

嘗試使用ScriptInjector.FromUrl注入腳本並將其餘代碼放在CallbackonSuccess中。

Ilya提出的同步注入腳本(通過將腳本添加到您的HTML主機頁面或GWT模塊描述符-note:將不會與xsiframe鏈接器一起使用)當然也是一種解決方案。

+1

我終於能夠使用注入的ScriptInjector.fromurl腳本。原來我們需要在注入腳本時設置一個窗口。這意味着調用看起來是這樣的:ScriptInjector.fromUrl(「https://raw.github.com/mozilla/pdf.js/gh-pages/build/pdf.js」).setCallback(新回撥<太虛,異常>().....)setWindow(SciptInjector.TOP_WINDOW).inject(); – emertech

3

嘗試添加<script src="PDF.js"/>在.gwt.xml文件,並把PDF.js文件在您的public director

+0

在gwt.xml或application.html? – emertech

+1

@emertech在gwt.xml – Ilya