使 pdfjs 处理本地文件
Make pdfjs work on local files
我的任务是在本地环境中使用 PDFjs。一切正常,我可以使用 PDF 的绝对路径来规避同源策略,并且在 Firefox 中,可以像这样查看本地 PDF
<iframe class="pdf-viewer" src="viewer.html?file=file:///c/work/example-files/pdf/test.pdf"></iframe>
工作正常。问题是,只要我在 Internet Explorer 中尝试相同的操作,就会收到无法调用未定义或空引用的 getItem
的错误。
这归结为使用本地文件系统时,在 Internet Explorer 中 localStorage
是 undefined
。
有没有办法让PDFjs不使用本地存储,所以这在IE中也有效?
不幸的是,IE 的支持有限,如果您使用的版本不 HTML5 兼容,则需要包含 compatibility.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代码本身
pdf.js 非常巧妙地使用带有 range
headers 的 HTTP GET
请求来仅下载部分文件(随机文件访问),一旦文件加载过一次,从浏览器缓存完全满足 你可以通过网络监视器选项卡观察这个效果,看起来对同一个文件的多个请求实际上是不同的多个请求字节范围。因此,要加载 450 页文档的第 123 页,它只需要查看特定的字节范围,而不是将整个文件保存在浏览器内存中。
显然file://没有浏览器缓存,所以它不得不把文件数据放在某个地方,对于巨大的PDF文件,它根本无法将其全部保存在内存中。因此需要 localstorage
。
如果您确定所有 PDF 文件都适合内存,您可以编写一个 localstorage
polyfill 将 PDF 数据保存在内存中而不是真正的 localstorage
。不过,在 32 位浏览器上,您的内存会非常受限。
我的任务是在本地环境中使用 PDFjs。一切正常,我可以使用 PDF 的绝对路径来规避同源策略,并且在 Firefox 中,可以像这样查看本地 PDF
<iframe class="pdf-viewer" src="viewer.html?file=file:///c/work/example-files/pdf/test.pdf"></iframe>
工作正常。问题是,只要我在 Internet Explorer 中尝试相同的操作,就会收到无法调用未定义或空引用的 getItem
的错误。
这归结为使用本地文件系统时,在 Internet Explorer 中 localStorage
是 undefined
。
有没有办法让PDFjs不使用本地存储,所以这在IE中也有效?
不幸的是,IE 的支持有限,如果您使用的版本不 HTML5 兼容,则需要包含 compatibility.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代码本身
pdf.js 非常巧妙地使用带有 range
headers 的 HTTP GET
请求来仅下载部分文件(随机文件访问),一旦文件加载过一次,从浏览器缓存完全满足 你可以通过网络监视器选项卡观察这个效果,看起来对同一个文件的多个请求实际上是不同的多个请求字节范围。因此,要加载 450 页文档的第 123 页,它只需要查看特定的字节范围,而不是将整个文件保存在浏览器内存中。
显然file://没有浏览器缓存,所以它不得不把文件数据放在某个地方,对于巨大的PDF文件,它根本无法将其全部保存在内存中。因此需要 localstorage
。
如果您确定所有 PDF 文件都适合内存,您可以编写一个 localstorage
polyfill 将 PDF 数据保存在内存中而不是真正的 localstorage
。不过,在 32 位浏览器上,您的内存会非常受限。