当前位置: 首页 > news >正文

天津正规制作网站公司小企业管理系统

天津正规制作网站公司,小企业管理系统,璧山集团网站建设,微信小商店开店流程H5实现PDF文件预览#xff0c;使用pdf.js-dist进行加载 一、应用场景 在H5平台上预览PDF文件是在原本已经开发完成的系统中新提出的需求#xff0c;原来的系统业务部门是在PC端进行PDF的预览与展示#xff0c;但是现在设备进行了切换#xff0c;改成了安卓一体机进行文件…H5实现PDF文件预览使用pdf.js-dist进行加载 一、应用场景 在H5平台上预览PDF文件是在原本已经开发完成的系统中新提出的需求原来的系统业务部门是在PC端进行PDF的预览与展示但是现在设备进行了切换改成了安卓一体机进行文件预览。因此出现了PDF文件无法显示的问题此前使用的是vue-pdf插件和PDFObject插件实现的预览所以这两个插件是无法实现PDF预览了改为了pdfjs-dist进行PDF的预览。 二、实现方法 法一通过js代码实现预览 该方法适用于预览后端返回的文件流内容但是此方法是将pdf展示在画布上因此无法选中或复制文本内容。 1、定义一个容器用来展示PDF 这个容器可以是div也可以是canvas由于pdfjs渲染pdf文件是一页一页进行展示的因此需要循环进行展示。 templatedivcanvas v-forpageIndex in pdfPages :idpdf-canvas- pageIndex :keypageIndex styledisplay: block;width:100%/canvas/div /template2、加载pdf 由于我这边的文件来自于后端返回的文件流因此我需要将base64进行转换后进行展示。 script langts setup import { getDocument } from pdfjs-dist import * as pdfjsLib from pdfjs-dist import * as pdfjsWorker from pdfjs-dist/build/pdf.worker.mjs let pdfDoc reactive({}); // 保存加载的pdf文件流 let pdfPages ref(0); // pdf文件的页数 let pdfScale ref(1.0); // 缩放比例const pdfLoader async () {//...此处为接口请求返回的res.data.result.fileByte为pdf的文件流内容pdfjsLib.GlobalWorkerOptions.workerSrc /pdf.worker.min.js;const blob new Blob([res.data.result.fileByte], { type: application/pdf });let arrayBuffer base64ToBuffer(res.data.result.fileByte);const loadingTask pdfjsLib.getDocument(arrayBuffer);loadingTask.promise.then((pdf) {pdfDoc pdf; //获取pdf文档流pdfPages.value pdf.numPages; //获取pdf文件的页数renderPage(1);//从第几页开始渲染}); } //渲染pdf文件 const renderPage (num) {pdfDoc.getPage(num).then((page) {const canvasId pdf-canvas- num;const canvas document.getElementById(canvasId);const ctx canvas.getContext(2d);const dpr window.devicePixelRatio || 1;const bsr ctx.webkitBackingStorePixelRatio || ctx.mozBackingStorePixelRatio || ctx.msBackingStorePixelRatio || ctx.oBackingStorePixelRatio || ctx.backingStorePixelRatio || 1;const ratio dpr / bsr;const viewport page.getViewport({ scale: pdfScale.value });canvas.width viewport.width * ratio;canvas.height viewport.height * ratio;canvas.style.width viewport.width px;canvas.style.height viewport.height px;ctx.setTransform(ratio, 0, 0, ratio, 0, 0);const renderContext {canvasContext: ctx,viewport: viewport,};page.render(renderContext);if (num pdfPages.value) {renderPage(num 1);}}); }; /script 法二通过内置的viewer.html文件进行预览 该方法适用于pdf在本地或者是通过后端返回url链接的操作比较简单 不需要操作API而且可以复制pdf中的文本内容如果需要修改部分功能的话可以直接修改html中的代码进行实现。 1、下载pdf.js官方插件 打开官网的链接链接地址找到下方的Stable按钮下载稳定版本的插件包。 2、将下载后的文件放到项目中 将下载后的压缩包解压后会看到这两个文件夹将这两个文件夹添加到项目中。 其中在web文件夹中有一个viewer.html文件下面将借助这个封装好的文件实现pdf的预览。实现原理是将文件的路径传给viewer.html从而解析该文件进行预览。 如果你的文件在本地那么可以把这个文件放到与viewer.html同一个路径下然后实现预览。 window.open(./js/pdfJS/web/viewer.html?file/pdf/files/compressed.tracemonkey-pldi-09.pdf);//注意路径是否正确如果你的文件是通过后端拿到的URL那么需要修改后面的pdf文件的路径注意需要提前将路径转码。 let fileUrl encodeURIComponent(http:.....xxx.pdf) //将路径转码 window.open(http:...viewer.html?file fileUrl);三、注意事项 pdf.js无法直接在本地预览文件需要启动服务器才能运行例如tomcat、live-server 插件等。查阅相关资料后发现是因为 pdf.js 渲染 pdf 文档时使用了 Web Worker 技术该 Web Worker 无法读取本地文件。
http://www.hkea.cn/news/14319286/

相关文章:

  • 视频网站开发前景如何做的网站浏览器提示不安全
  • 南通网站建设.镇江网站建设一般多少钱
  • 在哪个网站可以做酒店预定单太原网站建设价格套餐
  • 做网站找哪里南宁网站建设托管
  • 在线推广企业网站的方法网站界面(ui)设计形考任务1
  • dede网站404怎么做网站建设计划书下载
  • 如何设计网站站点成都广告设计公司有哪些
  • 网站维护服务基本内容百度广告
  • 新乡手机网站建设官网企业做网站的目的是什么
  • 建设带数据搜索的网站免费 成品模板网站
  • 云南网站建设快速优化辽宁省建设工程信息网32位浏览器
  • 网站设计与制作的过程网站案例模板
  • 网站怎么做关键词流量wordpress 同步预览
  • 青岛公司网站建设开发文山专业网站建设哪家好
  • 云南做企业网站多少钱权威网站建设
  • 网站做影集安全吗优化网站被百度屏
  • 网站建设需求表格时装+wordpress
  • 网站ip地址范围免费生成app
  • 免费ftp转换wordpress上海专业优化排名工具
  • 网站建设报价明细模板平面设计图网站有哪些?
  • 呼市品牌网站建设那家好专业的天津网站建设
  • 网站后期运营方案步骤制作网页按钮
  • 瓜子二手车网站开发安康网站制作
  • phpstudy网站端口什么是网站关键词
  • 哪个网站做自考题目免费国外便宜域名注册商
  • 网站策划书总结怎么创建微信小程序店铺
  • 如何简单制作自己的网站公司网站模板免费下载
  • 网站标题作弊app推荐
  • 怎么用wordpress搭建免费网站wordpress图片后加载很慢
  • 企业网站 静态页面民宿企业安全文化建设