PDF.js代码的编译环境搭建以及错误处理

4 篇文章 0 订阅
2 篇文章 0 订阅

  由于公司需要,需要在浏览器中展示PDF文件,虽然目前大部分浏览器中都可以使用iframe直接浏览pdf,但是这种方式就难以对pdf的显示进行配置。但这样不满足我们的需求,因此查询了相关资料,目前有两种解决方案:
  1、使用PDF.js来进行集成(目前firefox系列的浏览器中是使用的这种方案);
   2、使用WebAssembly技术,把mupdf编译成wasm模块来打开pdf文档。

  这两种方法的优劣,需要进行测试了来。
  虽然pdf.js的官网上有编译好的demo,但考虑到有可能会去修改对应的源码,因此需要自己搭建一个开发编译环境。

一、PDF.js简介

  PDF.js是使用HTML5构建的可移植文档格式(PDF)查看器。主要用于解析和渲染 PDF。
  PDF.js主要分为3层:
  ● 核心层。该层主要用于解析PDF文档。这层是基础,按照PDF文档的相关标准来构建数据,用于其他两层的调用。
  ● 显示层。该层对核心层进行了一个封装,用于获取核心层解析的文档数据值,例如文档标题、文档内容等
  ● 展示层。用于展示显示层的数据,就是UI这一层。

二、环境概况

  现在大多数项目都是使用ubuntu16进行开发,因此我的虚拟机系统由原先的ubuntu14升级成了ubuntu16。因此我现在的机器环境是:ubuntu 16-04 LTS版本。如下图所示:

image.png

三pdf.js源码下载及编译

1、目录简介

  进入官网http://mozilla.github.io/pdf.js/,发现现在的源码都迁移到github上了。进入https://github.com/mozilla/pdf.js网站,拖到文档介绍部分,使用对应的命令进行代码迁移。但由于项目需要兼容老的firefox浏览器,我最终下载的pdf.js版本为2.5.207。下载后并进行解压缩,截图如下:在这里插入图片描述
  ● docs:官网上的说明:website source code,说实话,我真心的没有搞明白这个目录的作用是什么。
  ● examples:包含了一些简单可用的demo。该目录下,按照README.md文件的操作即可进行演示。备注:有些demo运行不起来。
  ● extensions:该目录是WebExtension(扩展)的版本,里面包含chrome以及firefox的版本。
  ● external:第三方依赖库的代码。
  ● l10n: 多语言版本的按钮说明。
  ● src:源代码目录,包括core目录(核心层)、display目录(显示层)、shared目录(核心层跟显示层的之间链接库所在目录)等。
  ● test:字体、资源文件等相关测试项目。
  ● web:显示层。
  ● gulpfile.js:用于编译构建的js。
  ● package.json:指定依赖库以及对应的版本值。
  ● package-lock.json:用于锁定依赖版本的下载。

2、安装依赖库以及处理安装依赖库中出现的错误

  代码解压缩完成后,使用 npm install命令在安装pdf.js的依赖包(因为我的虚拟机同时搭建了webassembly的编译环境(https://blog.csdn.net/as3luyuan123/article/details/121648379?spm=1001.2014.3001.5502),npm对应的工具链已经安装)。中间有可能会遇到错误,这里顺便记录一下我在下载依赖包时遇到的错误。错误列表如下:

  • 这个问题是没有搭建webassembly环境下出现的,系统自带的npm以及node.js版本有点低,分别为V4.2.6和v3.5.2,不满足最新的pdf.js依赖包中node(“node”:"^12.20.0)的要求,错误截图如下:

image.png
  解决方法: 我为了以后更新node.js方便,直接使用curl -sL https://deb.nodesource.com/setup_14.x | sudo -E bash - 命令将node.js的下载链放入到ubuntu的下载源中去,然后使用sudo apt-get install -y nodejs命令,进行安装。安装完成后,使用node -v查看,版本为 v14.18.2,符合要求。然后继续运行npm install命令。

  • 在安装canvsa组件时,提示找不到"pixman-1"包。错误如下图所示:
    QQ图片20220720094557.png
      解决方法:发现是我的系统库中缺少pixman-1的开发库,因此使用apt-get命令进行安装就成。截图如下:
    QQ图片20220722144647.png

  • 在安装canvsa组件时,提示找不到"cario"包。错误如下图所示:
    image.png
       解决方法:发现系统库中缺少cairo的开发库,因此使用apt-get命令进行安装就成。截图如下:
    image.png

  • 在安装canvsa组件时,提示找不到"'pangocairo"包。错误如下图所示:
    image.png
       解决方法:发现系统库中缺少pango1.0的开发库,因此使用apt-get命令进行安装就成。截图如下:
    image.png

  • 在安装canvsa组件时,提示找不到"'gif_lib.h"头文件。错误如下图所示:
    image.png
      解决方法:发现系统库中缺少gif的开发库,因此使用apt-get命令进行安装就成。截图如下:
    image.png
    ● 在安装canvas组件时,提示"node-pre-gyp ERR! Completion callback never invoked!"的错误。备注:这个错误是编译pdf.js(2.10.377)版本遇到的,因此也记录到这里。经过查询资料发现是因为这个版本的canvas组件的安装需要sudo的权限,错误如下图所示
    在这里插入图片描述

      解决方法:使用sudo npm install --unsafe-perm命令重新安装依赖包。截图如下:
    在这里插入图片描述
    ● 在安装canvas组件时,有可能会提示" Error: Cannot find module ‘nopt’"的错误。备注:这个错误是编译pdf.js(2.10.377)版本遇到的,因此也记录到这里。错误如下图所示:
    在这里插入图片描述
      解决方法:原因是现在是全局安装上面的模块,需要把node-gyp模块进行全局安装。使用sudo npm install -g node-gyp命令重新安装依赖包。截图如下:
    在这里插入图片描述

  依赖安装完成,会提示一些警告,可以忽略,不影响使用。 截图如下:
image.png

3、编译代码

  然后使用npm install -g gulp-cli命令来安装对应的编译命令。备注:加入sudo命令,有可能会报权限不足的错误。
image.png
  安装完成后,使用gulp generic来产生对应的js文件,产生后的目录是:build/generic/build/ 。截图如下:

image.png
image.png
  ● build:该目录下存储的是核心层以及显示层相关的js以及对应的资源映射。
  ● web:该目录下存储的是UI层。

  编译完成后,就可以将generic目录部署到其他服务器下去,然后启动就可以进行网页访问了。
  启动完成后,打开chrome浏览器,地址栏中输入http://localhost:8888/web/viewer.html,就可以看到打开的pdf文件,如下图所示:
image.png
   到这里为止,编译完成。这里需要注意的是:如果需要兼容老的版本浏览器,就需要使用gulp generic-legacy命令去进行编译。如果嫌弃编译出的pdf.js文件很大,则建议使用gulp minified命令,来编译压缩后的库。
   再来备注一下版本信息:经过我的详细测试,如果要兼容chrome71以前的浏览器,建议使用的最后版本是:v2.12.313 。因为后面的版本直接编译成ES6的版本以及会使用chrome71才加入的新特性:globalThis。
   后续详细研究一下pdf.js对应的接口以及相关的控制。

参考资料

1、http://mozilla.github.io/pdf.js/ pdf.js的官网地址
2、https://github.com/mozilla/pdf.js pdf.js源码位置
3、globalThis globalThis

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
要安装和编译Qt 5.12.12的环境,需要按照以下步骤进行操作: 1. 操作系统准备:确保你使用的操作系统能够满足Qt 5.12.12的要求。Qt 5.12.12支持多个操作系统,包括Windows、macOS、Linux等。请选择适合你的操作系统版本。 2. 下载Qt 5.12.12源代码:从Qt官方网站(www.qt.io)下载qt-everywhere-src-5.12.12的源代码包。 3. 安装编译工具:根据你的操作系统,选择合适的编译工具。常见的编译工具包括GCC(Linux)、MinGW(Windows)、Xcode(macOS)等。确保你已经正确安装了这些工具,并配置好环境变量。 4. 安装依赖库:Qt 5.12.12源代码编译过程中可能需要一些依赖库的支持,例如OpenGL、Java等。根据你的需求,安装这些依赖库,并确保它们能够被编译环境正确找到。 5. 解压源代码包:将下载的qt-everywhere-src-5.12.12源代码包解压到你选择的目录中。 6. 进入源代码目录:使用命令行工具进入源代码目录,并切换到qtbase子目录。 7. 配置编译选项:运行./configure命令,选择合适的编译选项。可以使用-help参数查看可用的选项。在配置过程中,可以指定Qt的安装路径和其他选项。 8. 编译代码:运行make命令编译代码。根据你的系统性能和代码规模,编译过程可能需要一段时间。 9. 安装Qt库:运行make install命令,将编译好的Qt库安装到指定目录中。 10. 配置环境变量:根据你的操作系统,将Qt库所在路径添加到系统的环境变量中,以便在其他项目中使用Qt。 完成以上步骤后,你就成功安装和编译了Qt 5.12.12的环境。你可以使用Qt Creator等开发工具来创建和运行Qt应用程序。注意,这只是一个基本的安装和编译过程,具体细节可能会因操作系统和开发环境的不同而有所差异,建议你参考Qt官方文档和相关资料进行更详细的操作指导。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值