pdf.js预览pdf文件流(base64)

简介: 新接手一个老项目,需要改造pdf文件的预览效果,接口直接返回的pdf文件的文件流base64字符串,前端只能拿到base64来进行预览。pdf.js是一款非常优秀的pdf解析工具,但不支持直接预览文件流,这里需要对pdf.js稍微改造。

1、前言:


新接手一个老项目,需要改造pdf文件的预览效果,接口直接返回的pdf文件的文件流base64字符串,前端只能拿到base64来进行预览。


pdf.js是一款非常优秀的pdf解析工具,但不支持直接预览文件流,这里需要对pdf.js稍微改造。


2、下载pdf.js


下载地址:https://mozilla.github.io/pdf.js/


0d289a13b33feb09ba1c5e9adcc49b2.png

下载稳定版本,下载后解压,把他放在静态资源目录下面,我这里的项目是老项目,前后端么有分离的java项目,放在webapp下面,我把下载以后的文件解压重新命名为pdfjs文件夹,如图


874a13e37833cfc69b0b506de8ae6f4.png

3、保存pdf文件流


我这里是一个接口返回包括内容详情,图片,pdf文件等所有内容,点击一条pdf记录,跳转打开新的标签页进行预览。因此把接口返回的pdf文件流base64编码先本地缓存.跳转到我们下载的pdf文件夹里面的【viewer.html】文件。


function getPdf(fileBase64) {
 var href = serveUrl + '//pdfjs/web/viewer.html'
 var sessionStorage.setItem('pdfBase', fileBase64)
     window.open(href,'_blank')
}

4、对viewer.html文件的处理


打开pdfjs/web下的viewer.html文件,添加js代码,对base64进行处理。这代码代码需要添加在


【viewer.js】引用之前。

<script type="text/javascript">
    var DEFAULT_URL = "";
    var pdfUrl = document.location.search.substring(1);
    if(null == pdfUrl || "" == pdfUrl){
      var BASE64_MARKER = ';base64,';//声明文件流编码格式
      var preFileId = "";
      var pdfAsDataUri = sessionStorage.getItem("pdfBase");//这里就是pdf文件的base64码,我是通过session传递base64的
      var pdfAsArray = convertDataURIToBinary(pdfAsDataUri);
      DEFAULT_URL = pdfAsArray;
      //编码转换
      function convertDataURIToBinary(dataURI) {
        //[RFC2045]中有规定:Base64一行不能超过76字符,超过则添加回车换行符。因此需要把base64字段中的换行符,回车符给去掉。
        var base64Index = dataURI.indexOf(BASE64_MARKER) + BASE64_MARKER.length;
        var base64 = dataURI.substring(base64Index).replace(/[\r\n]/g, '');
        var raw = window.atob(base64);//这个方法在ie内核下无法正常解析。
        var rawLength = raw.length;
        //转换成pdf.js能直接解析的Uint8Array类型
        var array = new Uint8Array(new ArrayBuffer(rawLength));
        for (i = 0; i < rawLength; i++) {
          array[i] = raw.charCodeAt(i) & 0xff;
        }
        return array;
      }
    }
  </script>


5、改造pdf.js源码


5.1 viewer.js更改


打开viewer.js,直接搜索“DEFAULT_URL”会找不到(因为网上有个别帖子的版本是在viewer.js里搜到“DEFAULT_UR”并且要求注释的),但是通过寻找,发现我这个版本的“DEFAULT_URL”已经放在“defaultOptions”对象里面,如下图:


8b7259d346ff066b05bd48ea3306c7d.png

f5f5e8016f0defa19b25863d97ff6cf.png


把defaultUrl的value修改为DEFAULT_URL,原来的value值是本地的一个demo文件


{
  defaultOptions.defaultUrl = {
    // value: "compressed.tracemonkey-pldi-09.pdf",
    value: DEFAULT_URL,
    kind: OptionKind.VIEWER
  };

更改标签页标题:


打开“viewer.js”,搜索“document.title”

3c7875ecfa1131763b46d51436f967e.png


更改如下

setTitle(title = this._title) {
    this._title = title;
    if (this.isViewerEmbedded) {
      return;
    }
   // document.title = `${this._hasAnnotationEditors ? "* " : ""}${title}`;
     document.title = this._title.split(" ")[0]
  },

5.2 修改viewer.js.map


打开viewer.js.map,搜索defaultUrl,把value更改为【DEFAULT_URL】,如图:c1bcd8c24a6926c04c8d29070ef638c.png

ab0b0d822a060186626ca7e59fade59.png


最后pdf预览如图(pdf内容打了马赛克)

84e2ecba4404872b2966cd5da525af0.png


另外,更改以后的pdfjs文件夹,已经上传到csdn资源,有需要的可以下载,地址如下:

https://download.csdn.net/download/xingmei_ok/86838446


目录
相关文章
|
1月前
|
数据采集 Web App开发 JavaScript
Puppeteer自动化:使用JavaScript定制PDF下载
在现代Web开发中,自动化工具如Puppeteer可显著提升效率并减少重复工作。Puppeteer是一款强大的Node.js库,能够控制无头Chrome或Chromium浏览器,适用于网页快照生成、数据抓取及自动化测试等任务。本文通过示例展示了如何使用Puppeteer自动化生成定制化的PDF文件,并介绍了如何通过配置代理IP、设置user-agent和cookie等技术增强自动化过程的灵活性与稳定性。具体步骤包括安装Puppeteer、配置代理IP、设置user-agent和cookie等,最终生成符合需求的PDF文件。此技术可应用于报表生成、发票打印等多种场景。
113 6
Puppeteer自动化:使用JavaScript定制PDF下载
|
1月前
|
前端开发
PDF文件上传转成base64编码并支持预览
PDF文件上传转成base64编码并支持预览
120 12
|
3月前
|
存储 JavaScript 前端开发
JS上传文件(base64字符串和二进制文件流)
这篇文章介绍了两种JavaScript文件上传的方法:使用FileReader对象将文件读取为base64字符串上传,以及使用FormData对象以二进制文件流的形式上传文件,包括如何处理文件选择、读取和上传的详细代码示例。
451 2
JS上传文件(base64字符串和二进制文件流)
|
3月前
|
XML 缓存 JSON
为什么浏览器中有些图片、PDF等文件点击后有些是预览,有些是下载
为什么浏览器中有些图片、PDF等文件点击后有些是预览,有些是下载
257 0
|
22天前
|
JavaScript 定位技术
jQuery鹰眼视图小地图定位预览插件minimap.js
这是一个jQuery小地图定位预览视图,默认左侧是页面主要内容,minimap.js的好处就是在它的右侧形成一个快速定位通道,产生一个缩小版的页面,即预览效果,可以点击并快速定位到页面的某个位置。简单实用,欢迎下载!
30 0
|
3月前
|
Web App开发 iOS开发 容器
Vue3PDF预览(vue3-pdf-app)
`vue3-pdf-app` 插件提供了一个简单而强大的 PDF 预览解决方案。通过 `&lt;a&gt;` 标签即可快速预览 PDF 文件。为满足更复杂的定制需求,提供了 `PDFViewer.vue` 组件,基于 `vue3-pdf-app@1.0.3` 封装,支持多种功能如缩放、旋转、全屏预览、打印等,并可自定义主题颜色与语言。组件属性包括文件地址 (`src`)、预览容器尺寸 (`width`, `height`)、默认缩放规则 (`pageScale`) 和主题 (`theme`) 等。适用于多种浏览器,方便集成到项目中。
558 2
Vue3PDF预览(vue3-pdf-app)
|
2月前
|
SQL 安全 数据库
用html+javascript打造公文一键排版系统2:显示源码/显示预览、清除格式
用html+javascript打造公文一键排版系统2:显示源码/显示预览、清除格式
|
3月前
|
移动开发 资源调度 JavaScript
Vue移动端网页(H5)预览pdf文件(pdfh5和vue-pdf)
这篇文章介绍了在Vue移动端网页中使用`pdfh5`和`vue-pdf`两个插件来实现PDF文件的预览,包括滚动查看、缩放、添加水印、分页加载、跳转指定页数等功能。
2683 0
Vue移动端网页(H5)预览pdf文件(pdfh5和vue-pdf)
|
4月前
|
JavaScript 前端开发 程序员
《JavaScript权威指南第7版》中文PDF+英文PDF+源代码 +JavaScript权威指南(第6版)(附源码)PDF下载阅读分享推荐
JavaScript是Web标准语言,广泛应用于各类浏览器,造就了其最广泛部署的地位。Node.js的兴起扩展了JavaScript的使用场景,使其成为开发者首选语言。无论新手还是经验丰富的程序员,都能受益于学习JavaScript。[《JavaScript权威指南第7版》资源链接](https://zhangfeidezhu.com/?p=224)
272 5
《JavaScript权威指南第7版》中文PDF+英文PDF+源代码 +JavaScript权威指南(第6版)(附源码)PDF下载阅读分享推荐
|
3月前
|
JavaScript 前端开发
JS - 如何上传 Base64 编码的图片
本文展示了如何将Base64编码的图片在前端转换为Blob对象,并使用`FormData`上传到服务器端的方法。
186 0