1.简介

PDF.js 是基于开放的 HTML5 及 JavaScript 技术实现的开源产品

pdf.js 是一个主要用于HTML5 平台上在线阅读PDF文档的小插件,基于JavaScript技术编写而成,无需任何本地技术支持。

pdf.js是由Mozilla Labs发布的。他们的目标是创建一个通用的,基于标准的网络平台,能够解析和渲染PDF文件



2.下载

$ git clone git://github.com/mozilla/pdf.js.git



3.构建

pdf.js 构建基于nodejs,因此需要安装nodejs。

安装nodejs后使用npm命令依次安装下列程序

  • npm install -g gulp-cli
  • npm install

在命令行输入gulp generic进行构建。

构建完成后将build\generic下的文件部署到web服务器上。 url访问到web/viwer.html即可浏览在线pdf.

viewer.html提供一个file参数,用于传入浏览的pdf的url.



4.注意

1.如果web服务器是iis,请添加.properties的MIME类型为application/octet-stream, 否则本地化无法启用,默认语言为英文。

2.pdf.js是不支持跨域文件加载的,比如你的页面地址为http://www.a.com, pdf地址为:http://www.b.com/my.pdf。 直接加载是不会成功的。会报  “file origin does not match viewer”错误。

分析一下源码:

var validateFileURL;
   var HOSTED_VIEWER_ORIGINS = [
    'null',
    'http://mozilla.github.io',
    'https://mozilla.github.io'
   ];
   validateFileURL = function validateFileURL(file) {
    try {
     var viewerOrigin = new URL(window.location.href).origin || 'null';
     if (HOSTED_VIEWER_ORIGINS.indexOf(viewerOrigin) >= 0) {
      return;
     }
     var fileOrigin = new URL(file, window.location.href).origin;
     if (fileOrigin !== viewerOrigin) {
      throw new Error('file origin does not match viewer\'s');
     }
    } catch (e) {
     var message = e && e.message;
     var loadingErrorMessage = mozL10n.get('loading_error', null, 'An error occurred while loading the PDF.');
     var moreInfo = { message: message };
     PDFViewerApplication.error(loadingErrorMessage, moreInfo);
     throw e;
    }
   };


首先,如果Viewer.html所在的主机是否在HOSTED_VIEWER_ORIGINS列表中定义,如果定义,则以下不检查同源。如果不存在,则检查同源。因此可以在将viewer.html所在的主机加到HOSTED_VIEWER_ORIGINS中即可实现跨域。  这样做比较安全。

如果部署觉得麻烦,暂不考虑安全性的话,可以在开头设置一个跨域标识位:

if(!CORS){
        validateFileURL(file);
    }


var CORS = true;表示支持跨域,不进行同源判断。

var CORS = true;表示不支持跨域,进行同源检测。

3.file参数中默认只允许传简单路径比如:http://www.a.com/file.php.   如果你要浏览的pdf路径为http://www.a.com/file.php?id=2001。 这时候直接传入的话会解析出错, 因为pdf.js无法判断id=2001是viewer.html的参数呢还是file.php的参数。

这时候我们要把参数file后传入的动态参数中特殊字符转义:

+

URL 中+号表示空格

%2B

空格

URL中的空格可以用+号或者编码

%20

/

分隔目录和子目录

  %2F

?

分隔实际的URL和参数

%3F

%

指定特殊字符

%25

#

表示书签

%23

&

URL 中指定的参数间的分隔符

%26

=

URL 中指定参数的值

%3D