我们有一个基于GWT框架的应用程序,我们希望在没有任何浏览器插件的情况下显示PDF文件,目前正在评估PDF.js。 问题是,无论我做什么,我都无法在我们的GWT应用程序中将PDF文件渲染到画布上。请给出一些背景
从服务器检索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);
Canvas元素在View中创建(在这里使用googles MVP模式),并且使用上述函数对PDF体中嵌入PDF.js的脚本进行JSNI调用。然后该脚本调用函数,该函数与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");
});
});
画布和上下文在View类中创建并传递给javascript。
这里的问题是,在调用JSNI之后,我会显示所有变量的警报。浏览器显示警报,除非我发出呼叫警报(PDFJS)。这表明脚本中未识别PDFJS变量。 这让我觉得PDF.js文件没有正确嵌入到视图中,或者我还缺少其他东西。
注意:我已经通过网络下载了大部分示例,其中大多数都在本地工作,即我可以修改PDF.js文件路径以获取本地副本,HTML仍然呈现PDF。读取PDFJS变量没有问题。它只在这个GWT应用程序中看到了这些问题。
有没有人有任何线索发生的事情。我们将非常感谢您的帮助。
由于
答案 0 :(得分:4)
你的问题是你正在注入脚本,所以它是异步的,但你不要等到它加载后再开始使用它。
尝试使用ScriptInjector.FromUrl
注入脚本,并将其余代码放入Callback
的{{1}}。
同步注入脚本(通过将其添加到HTML主机页面,或者GWT模块描述符-note:不能与onSuccess
链接器一起使用 - ),Ilya提出的当然也是一种解决方案。
答案 1 :(得分:3)
尝试在.gwt.xml文件中添加<script src="PDF.js"/>
并将PDF.js文件放入public director