实现Vue移动端的PDF预览

移动端pdf在线预览(pdfh5使用) 这里我下载时候没有指定版本报了一些错,所以直接建议大家下载 1.4.3版本,执行 npm install pdfh5@1.4.3 成功后如下图: 3.引用pdf 的vue 页面 最后的效果如下 (内容打码了,真实很清晰) 阅读详情

最近做到一个功能,PDF预览;这个功能看着蛮简单的,结果搞了两个下午,真是欲哭无泪。记录一下所查到的预览方法。
我在网上找了蛮多教程的,大致都是以下几个方法实现预览:

  1. 使用 iframe 标签
  2. 使用 embed 标签
  3. 安装 Vue 插件 vue-pdf
  4. 安装 Vue 插件 pdfh5

下面配合代码详细说我实现预览的过程吧!

iframe标签
<iframe :src="url" style="border: none;width: 100%;height: 100%;" frameborder="0" />
<script>
export default {
  data() {
    return {
      show: false, 
      url: '', // pdf地址
    }
  },
  methods: {
}
</script>

这个标签其实蛮方便的,毕竟上一页、下一页,跳转,下载都是齐全的,个人觉得如果是用在pc端就非常的舒适,一个标签解决所有,但是如果在移动端可能就有点小毛病;我这次需要在一个弹窗里预览PDF文件,在展示时样式就很丑(如下图),不过我没多挣扎就放弃了
在这里插入图片描述

embed 标签
<embed :src="url" type="application/pdf" width: 100% height: 100% >
<script>
export default {
  data() {
    return {
      show: false, 
      url: '', // pdf地址
    }
  },
  methods: {
}
</script>

这个方法有局限性,如果浏览器不支持PDF嵌入,那这个标签就什么也不展示。

Vue 插件 vue-pdf
npm install --save vue-pdf // 安装一下
<!--这是一次加载完,还可以分页展示,这里就不详细说了-->
<div class="toast">
          <PDF v-for="i in pageNum" :key="i" ref="pdf" :src="url" :page="i" style="width: 100%" />
</div>
<script>
import PDF from 'vue-pdf' // 引入
import { CellGroup, Field, Popup, Toast } from 'vant'
export default {
  components: {
    PDF, [CellGroup.name]: CellGroup, [Field.name]: Field, [Popup.name]: Popup, [Toast.name]: Toast
  },
  data() {
    return {
      show: false, // 打开弹窗
      url: '', // 预览地址
      currentPage: 0, // 页码
      pageNum: null
    }
  },
  computed: {
  },
  created() {
  },
  methods: {
    // 查看pdf
    lookPdf(item) {
      console.log('打开弹窗')
      this.getNumPages()
      this.show = true
    },
    getNumPages() {
      this.url = 'https://xxx/xxxx/test.pdf'
      const loadingTask = PDF.createLoadingTask(this.url)
      loadingTask.promise
        .then((pdf) => {
          this.pageNum = pdf.numPages
        })
        .catch((err) => {
          console.error('pdf 加载失败', err)
        })
    }
  }
}
</script>

这个方法,我之前做PC端的时候,真的很丝滑;但这次做移动端就开始报错,用浏览器调试时,一到移动端模式就开始报错(如下图),在网上找的解决教程也没起作用,果断放弃。毕竟要多给别的方法机会嘛!
在这里插入图片描述

npm install pdfh5
npm install pdfh5 // 安装一下
<template>
  <div class="m-pdf">
    <div id="pdf-content" />
  </div>
</template>
<script>
import Pdfh5 from 'pdfh5'
import 'pdfh5/css/pdfh5.css'
export default {
  name: 'Pdfh5',
  data() {
    return {
      pdfh5: null,
    }
  },
  mounted() {
  },
  methods: {
    initPdf(pdfUrl) {
      console.log('子组件的地址', pdfUrl)
      // pdfh5实例化时传两个参数:selector选择器,options配置项参数,会返回一个pdfh5实例对象,可以操作pdf,监听相关事件
      this.pdfh5 = new Pdfh5('#pdf-content', {
        pdfurl: pdfUrl
      })
      this.pdfh5.scrollEnable(true) // 允许pdf滚动
      // 监听pdf准备开始渲染,可以拿到pdf总页数
      this.pdfh5.on('ready', function() {
        console.log('总页数:' + this.totalNum)
      })
      // 监听pdf加载完成事件
      this.pdfh5.on('complete', (status, msg, time) => {
        console.log('状态:' + status + ',信息:' + msg + ',耗时:' + time + '毫秒')
      })
    }
  }
}
</script>
// 父组件
<template>
  <button @click="showPdf">
  <div v-if = "show">
      <preview-pdf ref="previewPdfh5" style="height:450px;margin-bottom:12px;" />
   </div>
</template>
<script>
import PreviewPdf from '../pdf.vue'
export default {
components: {
    PreviewPdf
  },
  data() {
    return {
      show: false, 
      url: '', // pdf地址
    }
  },
  methods: {
  showPdf(){
     this.show
     this.url = 'https://xxx/xxxx/test.pdf' // pdf文件的地址
     this.$refs.previewPdfh5.initPdf(this.url) // 父组件调用子组件的方法,动态渲染pdf
  }
}
</script>

这个方法到这里也很丝滑,上述方法的问题都没有碰到;然而在调后端接口时,报错了。
在这里插入图片描述
真是欲哭无泪,我上网找教程,根本没有。接口传过来的PDF里有一些字段是动态变化的,就导致这个问题出现。在我不懈奋斗了几个小时之后,无意间看到了pdfh5的中文文档的一个参数例子(如图),问题就解决啦!
在这里插入图片描述
给代码加个参数

 methods: {
    initPdf(pdfUrl) {
      console.log('子组件的地址', pdfUrl)
      this.pdfh5 = new Pdfh5('#pdf-content', {
        pdfurl: pdfUrl,
        cMapUrl: 'https://unpkg.com/pdfjs-dist@2.0.943/cmaps/' // 改一下这个参数的默认地址
      })
      this.pdfh5.scrollEnable(true) 
      this.pdfh5.on('ready', function() {
        console.log('总页数:' + this.totalNum)
      })
      this.pdfh5.on('complete', (status, msg, time) => {
        console.log('状态:' + status + ',信息:' + msg + ',耗时:' + time + '毫秒')
      })
    }
  }

这是我参考的文档地址:https://github.com/EncodingAESKey/pdfh5/blob/master/README.md

总结一下:磕磕碰碰也终于实现了功能。这几个方法都能实现功能;如果图方便就用iframe标签,图样式简洁且使用方法简单就用 vue-pdf 插件,图样式简洁且功能齐全就用 pdfh5 插件;至于embed 标签,我还没用过。不过我用 vue-pdf 插件遇到的问题,到现在也没解决好,不知道是不是移动端要添加什么配置,还是我代码环境不兼容;后面如果有好的解决方法,我会记得来更。

h5手机端pdf预览(可缩放) 【代码】h5手机端pdf预览(可缩放) 阅读详情

相关推荐

vue使用pdf.js实现移动端在线PDF文件预览

pdfjs实现vue pdf预览

yujin0213的博客 7287

H5移动端文件预览pdf

需求:H5页面嵌入浙政钉,需要文件预览Pdf。!!先讲最终方案,兼容ios,安卓,鸿蒙多种系统手机,移动端和pc端的pdf预览方式 — pdf.js + iframe。

猫大人的博客 2万+

Vue2 + Vant2 实现移动端 PDF 预览

本文介绍了在Vue2.6.10和vant2.11.1项目中集成pdf.js2.13.216实现移动端PDF预览的解决方案。重点包括:pdf.js的核心功能及内置优势;项目环境搭建;PDF文件加载与渲染实现;安卓/iOS系统兼容性处理;微信公众号H5特殊适配;性能优化策略(预加载、懒加载等)。通过真机测试验证了该方案在移动端和微信公众号环境下的稳定性,为移动端PDF预览提供了可靠的技术实现。

互联网改遍了世界。 1262

vue移动端H5预览PDF(pdfh5) 支持放大、分页、添加水印、PDF下载

vue移动端H5预览PDF(pdfh5) 支持放大、分页、添加水印、下载,pdfh5.js 基于pdf.js和jQuery,web/h5/移动端PDF预览手势缩放插件。

qq_37831545的博客 1万+

我想自己组装一台服务器,微调大模型通义千问2.5 Omni 72B,但是我是个人购买,资金非常有限,最省的方案

阶段动作✅ 推理用 GGUF + llama.cpp + 4090 加载 14B INT4✅ 微调训练 Qwen2.5-7B-Chat,使用 LoRA / QLoRA❌ 放弃Qwen2.5-Omni-72B 全量微调(显存需求 >160G,不现实)

AngelCryToo的专栏 2829

Eureka自我保护机制

Eureka自我保护机制 默认情况下,当eureka server在一定时间内没有收到实例的心跳,便会把该实例从注册表中删除(默认是90秒),但是,如果短时间内丢失大量的实例心跳,便会触发eureka server的自我保护机制,比如在开发测试时,需要频繁地重启微服务实例,但是我们很少会把eureka server一起重启(因为在开发过程中不会修改eureka注册中心),当一分钟内收到的心跳数大量减少时,会触发该保护机制。可以在eureka管理界面看到Renews threshold和Renews(last

Soul_Ming的博客 543

vue框架移动端预览pdf文件

1.安装插件:yarn add pdfh5 或者 npm install --save pdfh5 2.使用pdfh5插件预览pdf <template> <div class="m-pdf"> <div id="pdf"></div> </div> </template> <script> import Pdfh5 from 'pdfh5' import 'pdfh5/css/pdf...

weixin_45484007的博客 4242

ADS2023实战:手把手教你用Load-Pull设计40W LDMOS功率放大器(附工程文件)

本文以飞思卡尔MRF8P9040N LDMOS晶体管为例,详细介绍了在ADS 2023中设计一款40W功率放大器(PA)的全流程。内容涵盖从直流偏置设置、稳定性分析、核心的负载牵引(Load-Pull)仿真,到基于Smith圆图的匹配网络设计、谐波平衡性能验证,直至版图生成与优化。文章提供了手把手的实战指导和工程文件,旨在帮助射频工程师掌握高效率PA的设计方法与关键技巧。

cake8的博客 1072

在移动端通过vue-pdf实现预览pdf

应用场景:比赛报表pdf文件需要在线预览跟下载,发现直接使用window.open(url, '_blank'),在pc端是可以实现预览,但是在移动端是直接通过打开浏览器进行下载再预览,经查资料发现可以使用vue-pdf组件实现预览!!! 参考:https://www.cnblogs.com/steamed-twisted-roll/p/9648255.html GitHub...

weixin_30873847的博客 4861

python基础·练习1(字符串作业)

python基础·练习1字符串作业一、填空二、编程初级中级 字符串作业 一、填空 1.已知s2 = ‘123’,则:s2 * 3 = ___________; s2 + str(456) = ___________; s2 = '123' print(s2 * 3) #123123123 print(s2 + str(456)) #123456 2.已知s1 = ‘123456789’。则: s1[:3] = ________; s1[-5:] =____________; s1[::2]=______;

qq_47326711的博客 8122

OS实验xv6 6.S081 开坑

OS实验xv6 6.S081 开坑 终于把xv6 2019 6.S081做完了,网络部分没有写,因为有计网实验了。怎么说呢,xv6的坑有点多,能做完多亏了:和我同学ljj交流,参考RedemptionC老哥的博客(他写的非常详细,遗憾的是,他好像没有写mmap),再者就是参考这位老哥的做法(没有源码,写得不是特别详细,不过有借鉴作用,mmap就是借鉴了他的思想)……废话不多说了,直接开始。 实验指导 首推RedemptionC的博客 这位老哥的个人博客 xv6 6.S081官网(后面的实验都要参考官网

不定期更新系统使用、编程小技巧,哔哩哔哩账号:https://space.bilibili.com/399455629,欢迎关注 4493

vue移动端实现pdf、excel、图片在线预览

vue移动端实现pdf、excel、图片在线预览

weixin_50083085的博客 3956

Unity游戏开发实战:手把手教你用C#实现一个简单的反向运动学(IK)控制器

本文详细介绍了在Unity游戏开发中如何使用C#实现一个简单的反向运动学(IK)控制器。通过建立骨骼层级结构、实现CCD算法和角度限制,开发者可以轻松创建自然的角色动画效果。文章还提供了可视化调试工具和性能优化方案,帮助提升开发效率。

weixin_42523711的博客 244

vue项目中移动端,pc端,实现pdf预览和分页

目前项目中,移动端和 PC端都有pdf预览的需求,个人建议PC端用vue-pdf,能很好地实现分页的效果,移动端建议用pdfh5.js,一次性加载,滑动查看,先记录下vue-pdf 1.安装:npm install --save vue-pdf 2.引入: import pdf from 'vue-pdf' components: {pdf} 3.写template <div class="pdf" v-show="fileType === 'pdf'"> <p cl

qq_44712405的博客 2187

【100%通过率】华为od机试C卷【特殊的加密算法】Python 实现

有一种特殊的加密算法,明文为一段数字串,经过密码本查找转换,生成另一段密文数字串。规则如下1.明文为一段数字串由0-9组成2.密码本为数字0-9组成的二维数组3.需要按明文串的数字顺序在密码本里找到同样的数字串,密码本里的数字串是由相邻的单元格数字组成,上下和左右是相邻的,注意:对角线不相邻,同一个单元格的数字不能重复使用。

MISAYAONE的博客 5924

解决Jupyter Notebook中Plotly图表显示问题

摘要:在Jupyter Notebook中使用Plotly绘图时遇到图表无法显示的问题。通过分析发现Python 3.12版本与Jupyter存在兼容性问题。解决方案是将Python降级到3.11版本,重新创建虚拟环境后图表正常显示。这表明版本兼容性对数据可视化工具至关重要,环境配置检查是解决问题的关键步骤。该案例为遇到类似问题的开发者提供了参考方案。

m0_74337424的博客 125

vue实现移动端在线预览pdf

1.安装vue-pdf 命令:npm install --save vue-pdf 安装的版本为 2.代码块 <template> <div class="pdf"> <p class="arrow"> <span @click="changePdfPage(0)" class="turn">上一页</span> {{currentPage}} / {{pageCount}} <span

ababbaqq的博客 2026

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

vue移动端实现预览word,excel,pdf, text以及cordova app 打开处理方案

1.word 引入import mammoth from 'mammoth' 主要代码 try { var xhr = new XMLHttpRequest() xhr.open('GET', this.url) xhr.responseType = 'arraybuffer' xhr.onload = function (e) { var arrayBuffer = xhr.response // arrayBuffer

weixin_45410246的博客 3994

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

vue3移动端实现pdf预览

然后就加载出来了,最后在各个环境测试的时候又发现,微信小程序里面打开这个模块,pdf还是没加载出来,console之后发现请求401,报错信息是登陆访问超时,发现pdfjs加载pdf时没有携带token。用了第二种插件后,苹果手机还是加载不出来,后面查到因为pdfjs-dist有时候会出现部分手机比如iphone6和iphone8渲染不出pdf问题。,安卓手机可以正常显示,于是换成了第二种方法。我一开始使用的时第一种方法,然后测试之后发现。遂,在加载url时添加token即可。添加之后就加载出来了。

qq_43614064的博客 4665

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Vue3集成Pdf.js实现PDF预览与移动端双指缩放

PDF处理是现代Web开发中的常见需求,特别是在文档管理系统、在线教育平台等场景中。Pdf.js作为Mozilla开源的JavaScript库,提供了纯前端渲染PDF的能力,无需依赖任何插件。其核心原理是通过解析PDF文件格式,将内容转换为Canvas绘制指令,实现高质量的文档渲染。在Vue3项目中集成Pdf.js时,开发者可以充分利用Composition API进行状态管理,同时结合Web Worker提升解析性能。针对移动端场景,通过监听touch事件实现双指缩放功能,并采用requestAnimat

weixin_28040125的博客 202

vue移动端实现vue-pdf在线预览与展示,并且解决页面汉字空白的问题

/1、安装依赖vue-pdf。

weixin_46659028的博客 2148

vue移动端pdf在线预览,并实现手势缩放、移动

通常我们会遇到ios手机不能下载文件的问题,那是因为苹果手机的拦截机制,这时我们只能通过别的方法来解决问题,我这里的解决方法是直接实现在线预览 pdf预览跟图片预览不同,pdf可能会有多张,而图片只有一张,使用图片预览的组件肯定是行不通的 这里我使用的是一个vue-pdf的插件,这是一个使用起来容易上手的插件。首先我们需要在vue项目中引入它: npm install --save vue-pdf 然后在展示pdf的页面引用 import pdf from ‘vue-pdf’ 要想让pdf实现

weixin_45956838的博客 1万+

vue-pdf 实现预览pdf并且适配移动端

【代码】vue-pdf 实现预览pdf并且适配移动端。

逗比爱好者 704

vue3中使用pdf.js、实现移动端、PC端的PDF预览、支持绝大部分情况

之前一直使用的pdf.js+canvas的形式预览PDF,但是这有一个很大的弊端,就是canvas生成的图片太糊了,而且本质上这渲染的根本不是pdf,而是一张图片,很多pdf中带有的功能这里都不能实现。我的理解是,在手机端使用手势缩放放大缩小pdf后,出现了错乱的情况,这时候我再手动调用一下源码中自带的。我在源码中加了一个被我隐藏的按钮,并为其添加点击事件,在缩放完成后,调用点击事件,完成pdf的更新。抛砖引玉,我这个方法虽然可以解决,但是太僵硬了,为了解决而解决,肯定是有更好的办法的。

qq_40893035的博客 9366

Vue移动端使用PDF.js实现预览功能

使用插件:PDF.js 使用时需要注意到的事项 1. 引入 填坑1:import 进不来,会报错,改用require 填坑2:未设置GlobalWorkerOptions.workerSrc时会报错,请求worker.js 404 const PDF = require('pdfjs-dist'); PDF.GlobalWorkerOptions.workerSrc = require('pdfjs-dist/build/pdf.worker.entry'); 2. 调用,打开pdf文件..

qq_43340606的博客 2838

Vue3+Vite实现docx/pdf/pptx在线预览与移动端适配全攻略

在线预览是后台管理系统的高频需求,涉及文件解析、前端渲染与移动端适配。从文件流获取与Blob分发入手,介绍基于pdfjs-dist、docx-preview、JSZip的纯前端解析方案,结合Vue3+Vite工程化实践,解决PDF逐页渲染、Word转HTML、PPT妥协处理等难题,并深入移动端rem适配、手势缩放、内存管理以及内外网部署的Nginx配置。这套方案适合在后台管理系统、低代码平台中处理附件预览场景,帮助开发者快速构建内网外网均可用的在线预览模块。

weixin_31497453的博客 276
上一篇: 鉴权的基本概念及session和cookie的入门认识
下一篇: vue的下载功能
only*z*
博客等级 码龄6年 49粉丝 28原创
评论 7
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值