前端 pdf 预览解决方案(定位,高亮,页面切换,样式定制)
创始人
2025-01-16 12:33:43
0次

前言

PDF.js 是一个由 Mozilla 开发的开源 JavaScript 库,用于在网页上解析和渲染 PDF 文件。它不依赖于任何外部服务器或插件,可以在浏览器中直接运行。PDF.js 支持多种平台和设备,包括桌面、移动设备和嵌入式

环境:浏览器端 

技术选型:pdf.js

下载地址:pdf.js稳定版

一.介绍

1.pdf.js目录

├── build/
│   ├── pdf.js                             - display layer
│   ├── pdf.js.map                         - display layer's source map
│   ├── pdf.worker.js                      - core layer
│   └── pdf.worker.js.map                  - core layer's source map
├── web/
│   ├── cmaps/                             - character maps (required by core)
│   ├── compressed.tracemonkey-pldi-09.pdf - PDF file for testing purposes
│   ├── debugger.js                        - helpful debugging features
│   ├── images/                            - images for the viewer and annotation icons
│   ├── locale/                            - translation files
│   ├── viewer.css                         - viewer style sheet
│   ├── viewer.html                        - viewer layout
│   ├── viewer.js                          - viewer layer
│   └── viewer.js.map                      - viewer layer's source map
└── LICENSE

2.方案

        预览方式

        pdf.js 提供了多种pdf预览方式,本文采用iframe预览方式,即单独部署pdf.js作为一个预览网站,生产环境使用iframe时传入pdf文件地址即可实现预览    

        在项目页面里添加代码:

        通信

        由于需要在主项目里实现一些特殊的pdf操作,故选用postMessage 对内嵌的iframe进行数据通信来实现各种操作,由于涉及跨域通信,需要后端同事做一下cos跨域处理即可

        页面切换
// pdf.js 应用 暴露 PDFViewerApplication 实例 改写属性 window.PDFViewerApplication.page = targetPage 
        文字高亮
// pdf.js 应用 暴露 PDFViewerApplication 实例 触发文字搜索时间,高亮文字 window.PDFViewerApplication.findBar.findField.value = value; window.PDFViewerApplication.findBar.highlightAll.checked = true; window.PDFViewerApplication.findBar.dispatchEvent('highlightallchange');
        页面高度定位
// pdf.js 应用 暴露 PDFViewerApplication 实例 改写属性 window.PDFViewerApplication.scrollTop = scrollTop 
         样式、ui定制

        pdf.js 的dom结构在viewer.html文件,样式在viewer.css文件,改写需要的UI即可

3.优势

  1. 减少主项目体积压力
  2. 定制化改pdf.js更方便
  3. 多项目可真接复用

二.技术实现

1.添加数据通信

新建messageHandler.js文件,插入pdf应用中用于接收来自主应用的操作指令,文件代码如下:

window.addEventListener('message', function (message) {   const { data } = message;   const { type, value } = data;   switch (type) {     // 页面切换     case 'SET_PAGE':       window.PDFViewerApplication.page = value;       break;     // 高亮文本     case 'HIGHT_LINE':       window.PDFViewerApplication.findBar.findField.value = value;       window.PDFViewerApplication.findBar.highlightAll.checked = true;       window.PDFViewerApplication.findBar.dispatchEvent('highlightallchange');       break;     // 页面高度定位     case 'SET_TOP':       document.getElementById('viewerContainer').scrollTop = document.getElementById('viewerContainer').scrollTop+c_urlArray['top']*1;     default:       break;   } });

将该文件添加到预建包的web目录下,再在web目录下的viewer.html文件里插入一下代码:

 	 		 		 		 		 		PDF.js viewer 		 		 		 		 		          // 这是要插入的代码 		   	 ···· 

 此时pdf应用已支持处理主应用的pdf操作事件,部署到服务器即可,不要忘记叫后端同事处理一下跨域

2.部署pdf预建包

此过程可能会遇见部署后,访问请求不到部分资源问题,这是因为部署时,配置的根目录不对,正确的根目录在web文件夹的父级,慢慢来,不要急

3.主包预览

        插入代码

注意这里的src地址必需为:你部署的Ips地址+ /pdf/web...拼接而成,不然会引起代码里的文件资源会混乱,所有步骤2中正确的根目录在web文件夹的父级,这个/pdf/web里pdf文件夹是我自己起的名字,你可以自由更改这个文件夹的名字

参数说明:

  1. page 预览pdf时的初始页码
  2. top 预览pdf文件时的初始页面高度
  3. zoom 预览pdf文件时的初始页面大小比例
  4. file 你需要预览的pdf文件地址
        pdf操作实例
const iframe = document.getElementById('pdfPreview') as HTMLIFrameElement;  // 切换页面   iframe.contentWindow?.postMessage({ type: 'SET_PAGE', value: targetPageNo },'*'); // 高亮文本  iframe.contentWindow?.postMessage({ type: 'HIGHT_LINE', value: targetText},'*'); // 页面高度定位 iframe.contentWindow?.postMessage({ type: 'SET_TOP', value: targetTop},'*');

此时,你的主应用以支持调用pdf的基本操作

4.UI定制

        调整viewer.css和viewer.html文件里的代码,也可以直接引入各种库,来装饰你的pdf应用 

相关内容

热门资讯

不少玩家反映开挂教材!大胜跑得... 不少玩家反映开挂教材!大胜跑得快多功能开挂工具,大胜跑得快一贯存在有辅助工具运大胜跑得快辅助工具,进...
我来向大家传授外挂攻略!逍遥皖... 我来向大家传授外挂攻略!逍遥皖北棋牌多功能外挂攻略,逍遥皖北棋牌本来有外挂攻略1、每一步都需要思考,...
一分钟了解开挂手筋!威信茶馆大... 一分钟了解开挂手筋!威信茶馆大二多功能开挂工具,威信茶馆大二原来真的是有辅助工具1、金币登录送、破产...
推荐一款外挂攻略!悠乐汇多功能... 推荐一款外挂攻略!悠乐汇多功能外挂攻略,悠乐汇真是是有外挂攻略1、全新机制【悠乐汇ai辅助工具激活码...
一分钟快速了解开挂技巧!闲来麻... 一分钟快速了解开挂技巧!闲来麻将多功能开挂技巧,闲来麻将果然真的有开挂技巧1、下载好闲来麻将透视辅助...
重大消息辅助挂课程!同城游贵阳... 重大消息辅助挂课程!同城游贵阳捉鸡麻将多功能辅助挂软件,同城游贵阳捉鸡麻将一贯真的有辅助软件1、点击...
玩家必知教程透视阶段!蜀州麻将... 玩家必知教程透视阶段!蜀州麻将海宁多功能透视教程,蜀州麻将海宁竟然是有辅助教程1)蜀州麻将海宁有没有...
详细说明透视器插件!云鹤九霄多... 详细说明透视器插件!云鹤九霄多功能透视器插件,云鹤九霄一贯真的是有透视器插件1)云鹤九霄辅助插件:进...
玩家必备教程外挂教程!小白大作... 玩家必备教程外挂教程!小白大作战多功能外挂教程,小白大作战竟然真的是有外挂教程1、用户打开应用后不用...
推荐十款透视挂要领!放炮罚多功... 推荐十款透视挂要领!放炮罚多功能透视挂工具,放炮罚好像是有辅助工具小薇(辅助器软件下载)致您一封信;...