2012-11-30 44 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