欢迎点击: 个人官网博客

移动端预览PDF及转化为图片保存

  • 一、iframe标签预览pdf
  • 二、vue-pdf 预览pdf(可自行封装弹出等效果)
    • 1.下载依赖包
    • 2.组件封装
      • 2.1上下滑动式
      • 2.2分页式
  • 三、pdf.js(可预览可下载) 将pdf--->canvas--->图片

由于微信中苹果限制,是无法保存下载pdf文件的(除非后端处理),安卓可以(会自动跳转到系统自带浏览器下载)。但是为了让用户能保存pdf,就只有改需求将其转化为图片,图片在微信是不受限制可以保存的。


一、iframe标签预览pdf

<iframe src="/index.pdf" width="100%" height="100%">This browser does not support PDFs. Please download the PDF to view it:
</iframe>

缺点:
1.在移动端上显示时不能全部展示完全
2.iframe在iPhone上宽度被撑开
3.iframe在iPhone上滚动条失效
…等等一系列问题(不推荐)

二、vue-pdf 预览pdf(可自行封装弹出等效果)

1.下载依赖包

npm install --sava vue-pdf

2.组件封装

2.1上下滑动式

预览:

当pdf文件比较大的时候,加载比较慢,可以适当加loading或骨架屏增加用户体验

<template><div class="m-area"><p class="u-title">电子合同签署</p><pdf v-for="index in numPages" :key="index" :src="pdfUrl" :page="index" /><button type="button" class="u-button" >同意签署</button></div>
</template><script>
import pdf from "vue-pdf"; // 引入pdf组件
export default {components: { pdf }, // 引入pdf组件data() {return {loaded: false,numPages: "",pdfUrl:''//pdf文件路径,记住如果是本地pdf文件,pdf放在public文件夹下,否则路径报错};},created() {document.body.style.background = "#FFFFFF";document.body.style.margin = 0;// 同时设置html和body元素,禁用其横向滚动条// docEl.style.overflowX = 'hidden'document.body.style.overflowX = 'hidden'this.loadPdf();},methods: {// 上下滚动pdf加载loadPdf() {this.pdfUrl = pdf.createLoadingTask(this.pdfUrl);this.pdfUrl.promise.then((pdf) => {this.$nextTick(() => {this.numPages = pdf.numPages; // pdf总页数this.loaded = true;});});},},
};
</script>

2.2分页式

组件代码比较长:可自行下载查看
demo代码

三、pdf.js(可预览可下载) 将pdf—>canvas—>图片


核心文件为pdf.min.js,pdf.worker.min.js,一个负责API解析,一个负责核心解析。

  <script src="https://cdn.bootcdn.net/ajax/libs/pdf.js/2.0.95/pdf.min.js"></script><script src="https://cdn.bootcdn.net/ajax/libs/pdf.js/2.0.95/pdf.worker.min.js"></script>

html:

<div id="imgDiv" style="display: none;"></div>
<img style="width: 100%;" v-bind:src="imgUrl" ref='aaa' alt="">

js:

                 urlToBlob() {let that=thislet file_url ='./a.pdf'let xhr = new XMLHttpRequest();xhr.open("get", file_url, true);xhr.responseType = "blob";xhr.onload = function () {if (this.status == 200) {that.file=this.responsethat.showPdf(that.file)}};xhr.send();},openPage(pdfFile, pageNumber, context) {var scale = 2;let that=thispdfFile.getPage(pageNumber).then(function (page) {viewport = page.getViewport(scale); // reference canvas via contextvar canvas = context.canvas;canvas.width = viewport.width;canvas.height = viewport.height;// 记录当前canvas的width,heightwindow.wi = canvas.width;window.he = canvas.height;canvas.style.width = "100%";canvas.style.height = "100%";var renderContext = {canvasContext: context,viewport: viewport};page.render(renderContext);//setTimeout(()=>{// that.imgUrl=canvas.toDataURL("image/png");// },500)});return;},showPdf(files) {/*pdf.js无法直接打开本地文件,所以利用FileReader转换*/var reader = new FileReader();reader.readAsArrayBuffer(files);let that=thisreader.onload = function (e) {var myData = new Uint8Array(e.target.result)var docInitParams = {data: myData};var typedarray = new Uint8Array(this.result);PDFJS.cMapUrl = 'https://cdn.jsdelivr.net/npm/pdfjs-dist@2.0.288/cmaps/';PDFJS.cMapPacked = true;PDFJS.getDocument(typedarray).then(function (pdf) { //PDF转换为canvas$("#imgDiv").css("border", "0"); //清除文本、边框if (pdf) {window.pageNum = pdf.numPages;$("#pagesText").text(pageNum);for (var i = 1; i <= pageNum; i++) {var canvas = document.createElement('canvas');canvas.id = "pageNum" + i;$("#imgDiv").append(canvas);var context = canvas.getContext('2d');that.openPage(pdf, i, context);}}});};},```

移动端预览PDF及转成图片保存相关推荐

  1. PDF文件转成图片保存

    最新版访问:https://blog.csdn.net/wmf_helloWorld/article/details/107105353 1.根据文件路径获取文件,并将PDF文件的每一页转换为一个图片 ...

  2. 移动端预览PDF插件

    本插件基于pdf.js和jquery 需要引入指定的js文件 1.pdf.js 2.pdf.worker.js 3.pdfh5.js 4.pdfh5.css 建议先引入jquery文件再引入上述文件 ...

  3. 使用pdf.js在移动端预览pdf文档

    pdf.js 是一个技术原型主要用于在 HTML5 平台上展示 PDF 文档,无需任何本地技术支持. 在线演示地址:http://mozilla.github.com/pdf.js/web/viewe ...

  4. h5,移动端预览pdf文件,使用pdfh5插件

    苹果机 是可以直接打开一个 pdf的网络路径进行预览的  问题是 安卓直接打开的话  就跳转到下载页面 或者那个大哥可以找一个h5 页面可以预览word文档 (其实吧 也可以  只要你愿意花钱 还是能 ...

  5. vue 手机移动端预览pdf

    最新需求是在手机实现pdf的预览,最终采用的是pdfh5,可以保存为图片,比较方便 首先pdf返回的是pdf文件流 接收pdf文件流的时候需要设定文件类型responseType: 'arraybuf ...

  6. uniapp移动端H5在线预览PDF等文件实现源码及注解

    uniapp移动端H5预览文件实现分为两个场景处理: (这里以预览PDF文件为示例,在线预览就是查看网络文件) 1. IOS客户端预览PDF文件 IOS客户端预览PDF文件可以通过跳转文件地址实现预览 ...

  7. uni-app移动端-H5-微信小程序在线预览pdf,图片,视频

    封装了一个插件,可直接导入hbuilderx查看使用: 插件地址:uni-app移动端-H5-微信小程序在线预览pdf,图片,视频 <template><view class=&qu ...

  8. UNI-APP开发在线预览PDF(ios,安卓,H5端亲测有效)

    插件地址 (如果出现空白,检查自己的pdf链接---我这边的测试链接,不一定哪天无效了https://pinshushu.zyrkeji.cn/uploads/20230406170306d8cf55 ...

  9. 移动端H5+vue使用vue-pdf在线预览PDF

    需求是点击查看收据按钮,进入新页面直接显示收据,可以放大.缩小.旋转.下载,没有分页 1.安装 npm i vue-pdf --save 2.使用 <template><div &g ...

  10. 网页嵌入pdf、在线预览pdf工具及插件(转)

    摘要:在web开发时我们有时会需要在线预览PDF内容,在线嵌入pdf文件: 问题1:如何网页中嵌入PDF: 在网页中: 常用的几种PDF预览代码片段如下: 代码片段1: 1 <object ty ...

最新文章

  1. ugui 转轮_Unity3D研究院之Android NDK编译C/C++结合Unity实现本地数据共享(二十八)...
  2. java转换CSV文件生成xml格式数据
  3. .Net下的HashTable
  4. ML:MLOps系列讲解之《端到端 ML工作流生命周期》解读
  5. android 横向滑动日期_移动端横向滑动如何设计?
  6. linux下配置DHCP中继代理
  7. android开发实例之minitwitter登录界面 代码,Android实例miniTwitter登录界面
  8. 论文总结:Fast and Light Bandwidth Testing for Internet Users(21‘ NSDI)
  9. 华强北耳机为啥老是有人翻车?
  10. 日常问题——阿里云服务器ssh经常一段时间就断掉解决办法
  11. dpdk的无锁环形队列Ring
  12. AsyncTask更新UI线程的基本原理
  13. JAVA基础知识|进程与线程
  14. 使用JMH做Java微基准测试(一)测试入门
  15. Scrapy实践:爬取斗鱼TV主播的头像(重写ImagesPipeline实现图片爬取)
  16. springboot中日志使用
  17. c语言gcd 简易函数,简单[GCD]用法详细总结(上)
  18. 简洁桌面(使用Windows自带的桌面整理功能)
  19. 敏捷技术和管理方法思考列表---长期维护
  20. 程序员必备的量子力学知识

热门文章

  1. 《Android框架揭秘》——2.1节主机环境构成
  2. oauth2授权码模式——微信第三方登录原理
  3. vc++2010注册表修改
  4. 留存记录:Graph500-2.1.4教程
  5. 数据挖掘导论课后习题答案 第二章(一)
  6. 打造黑苹果(一)组装硬件的选择与组装
  7. 廖雪峰Git学习 | 笔记五:撤销修改
  8. Android自带的抓包工具tcpdump
  9. Mac下载工具哪个好?迅雷 for Mac是个不错的选择!
  10. 在一个窗口显示多个视频子窗口