我们有一个基于 GWT 框架的应用程序,我们希望在没有任何浏览器插件的情况下显示 PDF 文件,并且目前正在评估 PDF.js 来做到这一点。问题是,无论我做什么,我都无法在我们的 GWT 应用程序中将 PDF 文件渲染到画布上。一定要提供一些背景
- 从服务器检索 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);
在视图中创建画布元素(在此处使用 googles MVP 模式),并使用上述函数对将 PDF.js 嵌入 HTML 正文的脚本进行 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 应用程序中我才看到这些问题。
有没有人知道发生了什么。您的帮助将不胜感激。
谢谢