pdf.js 是否仅适用于某些 pdf?

Does pdf.js only work with certain pdfs?

我正在尝试使用 pdf.js 将 pdf 页面转换为 canvas。我使用了 Render .pdf to single Canvas using pdf.js and ImageData by K3N to achieve this. The code is avaliable here Fiddle1 中的答案。

问题是这似乎只适用于某些 pdf。

例如,代码适用于 http://arxiv.org/pdf/1207.0102v2.pdf in Fiddle2

然而,当我为 http://infolab.stanford.edu/pub/papers/google.pdf in Fiddle3 尝试相同的代码时,它失败了。

为什么会发生这种情况,是否可以解决?

它应该适用于所有 pdf 文件,除非它们已损坏。你这里的错误是:

XMLHttpRequest cannot load http://infolab.stanford.edu/pub/papers/google.pdf. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://fiddle.jshell.net' is therefore not allowed access.

换句话说,您不能以这种方式加载它,因为 http://infolab.stanford.edu/pub/papers/google.pdf 不允许您这样做。当您将它安装在您的服务器上并以适当的响应加载它时 headers,它很可能会工作。

有关此错误的详细信息,请参阅 Why am I seeing an "origin is not allowed by Access-Control-Allow-Origin" error here?


如果您不托管这些文件,您可以通过代理(可以是 third-party 应用程序或您的服务器)传输它们。例如,Ivan Žužak, developed urlreq——在这种情况下完全可以满足我们需要的工具。

不要使用直接 link 到 pdf 文件,而是使用 Ivan 的代理 url:

http://urlreq.appspot.com/req?method=GET&url=http%3A%2F%2Finfolab.stanford.edu%2Fpub%2Fpapers%2Fgoogle.pdf

JSFIDDLE