带有GWT应用程序的PDF.js不起作用

时间:2012-11-30 09:55:48

标签: gwt pdf.js

我们有一个基于GWT框架的应用程序,我们希望在没有任何浏览器插件的情况下显示PDF文件,目前正在评估PDF.js。 问题是,无论我做什么,我都无法在我们的GWT应用程序中将PDF文件渲染到画布上。请给出一些背景

  1. 从服务器检索PDF文件票据。
  2. 从服务器检索PDF.js文件票证,并使用此脚本嵌入HTML正文中

    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元素在View中创建(在这里使用googles MVP模式),并且使用上述函数对PDF体中嵌入PDF.js的脚本进行JSNI调用。然后该脚本调用函数,该函数与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. 画布和上下文在View类中创建并传递给javascript。

  6. 这里的问题是,在调用JSNI之后,我会显示所有变量的警报。浏览器显示警报,除非我发出呼叫警报(PDFJS)。这表明脚本中未识别PDFJS变量。 这让我觉得PDF.js文件没有正确嵌入到视图中,或者我还缺少其他东西。

    注意:我已经通过网络下载了大部分示例,其中大多数都在本地工作,即我可以修改PDF.js文件路径以获取本地副本,HTML仍然呈现PDF。读取PDFJS变量没有问题。它只在这个GWT应用程序中看到了这些问题。

    有没有人有任何线索发生的事情。我们将非常感谢您的帮助。

    由于

2 个答案:

答案 0 :(得分:4)

你的问题是你正在注入脚本,所以它是异步的,但你不要等到它加载后再开始使用它。

尝试使用ScriptInjector.FromUrl注入脚本,并将其余代码放入Callback的{​​{1}}。

同步注入脚本(通过将其添加到HTML主机页面,或者GWT模块描述符-note:不能与onSuccess链接器一起使用 - ),Ilya提出的当然也是一种解决方案。

答案 1 :(得分:3)

尝试在.gwt.xml文件中添加<script src="PDF.js"/>并将PDF.js文件放入public director