2

我们有一个基于 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. 在视图中创建画布元素(在此处使用 googles MVP 模式),并使用上述函数对将 PDF.js 嵌入 HTML 正文的脚本进行 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。

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

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

有没有人知道发生了什么。您的帮助将不胜感激。

谢谢

4

2 回答 2

4

您的问题是您正在注入脚本,因此它异步加载,但您不要等到它加载后才开始使用它。

尝试使用注入ScriptInjector.FromUrl脚本并将其余代码放入Callback.onSuccess

xsiframeIlya 提出的同步注入脚本(通过将其添加到您的 HTML 主机页面或 GWT 模块描述符 - 注意:不适用于链接器 -)当然也是一种解决方案。

于 2012-11-30T11:54:01.663 回答
3

尝试添加<script src="PDF.js"/>您的 .gwt.xml 文件并将 PDF.js 文件放入您的公共主管中

于 2012-11-30T10:39:31.180 回答