使pdfjs适用于本地文件

时间:2015-01-20 09:14:08

标签: internet-explorer local-storage pdf.js

我的任务是在本地环境中使用PDFjs。一切正常,我可以使用PDF的绝对路径来规避相同的原始策略,在firefox中,查看本地PDF这样的

<iframe class="pdf-viewer" src="viewer.html?file=file:///c/work/example-files/pdf/test.pdf"></iframe>

工作得很好。问题是,只要我在Internet Explorer中尝试相同的操作,我就会收到错误,即无法调用未定义或空引用的getItem

这可以归结为这样一个事实:当使用本地文件系统时,在{@ 1}}中,localStorageundefined

有没有办法让 PDFjs 使用本地存储,所以这也适用于IE?

2 个答案:

答案 0 :(得分:3)

不幸的是,IE支持有限,如果您使用的是不符合HTML5的版本,则需要包含兼容性.js,其中包含缺少功能的polyfill

https://github.com/mozilla/pdf.js/wiki/Frequently-Asked-Questions#faq-support

https://github.com/mozilla/pdf.js/wiki/Required-Browser-Features

如果您真的想深入了解并处理这种情况,可以尝试修改PDF.js代码本身

https://github.com/mozilla/pdf.js

答案 1 :(得分:2)

pdf.js非常巧妙地使用带有GET标头的HTTP range请求,只下载部分文件(随机文件访问),一旦文件加载一次,就完全满足来自浏览器缓存您可以通过查看网络监视器选项卡来观察此效果,看起来对同一文件的多个请求实际上是具有不同字节范围的多个请求。因此,要加载450页文档的第123页,只需要查看特定的字节范围,而不是将整个文件保存在浏览器内存中。

显然使用file://,没有浏览器缓存,因此必须将文件数据放在某处,对于巨大的PDF文件,它根本无法将其全部保存在内存中。因此需要localstorage。 如果您确定所有PDF文件都适合内存,则可以编写localstorage polyfill,将PDF数据保存在内存中而不是真实的localstorage中。但是,在32位浏览器上你会受到很大的内存限制。