uniapp H5预览PDF支持手势缩放、分页、添加水印、懒加载、PDF下载

效果预览

项目说明

uniapp + vue2

node:v14.18.3

npm: 6.14.15

安装pdfh5.js插件

pdfh5 - npm (npmjs.com)pdfh5.js 基于pdf.js和jQuery

pdfh5 - npm (npmjs.com)

npm install pdfh5

由于我安装最新的pdfh5.js后运行时报错

所以我选择降低版本,可能是node版本问题

npm install pdfh5@1.4.2

pdfh5的使用

!
<template><view><u-button:ripple="true"size="medium"type="primary":custom-style="{backgroundColor: '#378CED !important',borderColor: '#378CED !important',}"@click="getInvoiceUrl('123')">发票下载</u-button><!-- 发票预览弹窗 --><u-popupwidth="100%":mask-close-able="false"closeablemode="center"v-model="popupShow"@open="popupOpen"@close="popupClose"><view class="top-tips fs-16 w-full">请长按图片保存到相册</view><scroll-view style="height: auto" scroll-y="true" scroll-x="true"><view ref="pdfH5Ref" id="pdfH5"></view></scroll-view></u-popup></view>
</template><script>
import Pdfh5 from "pdfh5";
import {invoiceListByOrderNoGet,invoiceSingleApplication,invoiceUrlGet,
} from '@/api/invoice'
export default {name: 'InvoiceList',components: {},props: {},data() {return {popupShow: false,pdfh5: null,pdfCodeArray: '',}},watch: {},created() {},mounted() {},methods: {popupOpen() {//实例化// 这里使用pdfurl或data,取决后端返回的文件格式,我这里用的是pdf文件流,具体可看文档this.pdfh5 = new Pdfh5('#pdfH5', {// pdfurl: 'http://storage.xuetangx.com/public_assets/xuetangx/PDF/PlayerAPI_v1.0.6.pdf',data: this.pdfCodeArray,cMapUrl: 'https://unpkg.com/pdfjs-dist@3.8.162/cmaps/', //如果是预览发票这里必须加上,否则会丢失字体scale: 5, //比例越大,pdf越清晰// responseType: "arraybuffer" // blob arraybuffer})//监听完成事件this.pdfh5.on('complete', (status, msg, time) => {this.$nextTick(() => {//禁止手势缩放// this.pdfh5.zoomEnable(false)// 下载pdf// this.pdfh5.download()// 获取 pdfH5Ref 组件的引用 为解决scale值大时,canvas展示过大问题const pdfH5Ref = this.$refs.pdfH5Ref// 查找具有 viewerContainer 类名的元素const viewerContainer = pdfH5Ref.$el.querySelector('.viewerContainer')if (viewerContainer) {// 查找具有 pinch-zoom-container 类名的元素const pinchZoomContainer = viewerContainer.querySelector('.pinch-zoom-container')if (pinchZoomContainer) {pinchZoomContainer.style.height = 'auto' // 替换为所需的高度// 查找具有 pageContainer 类名的元素const pageContainers =pinchZoomContainer.querySelectorAll('.pageContainer')// 设置 pinch-zoom-container 元素的高度if (pageContainers) {// 循环处理每个 pageContainerpageContainers.forEach((pageContainer) => {pageContainer.style.width = '100%'pageContainer.style.height = '100%'pageContainer.style.minWidth = '100%'pageContainer.style.maxWidth = '100%'pageContainer.style.minHeight = '100%'pageContainer.style.maxHeight = '100%'// 查找当前 pageContainer 下的所有 img 元素const imgElements = pageContainer.querySelectorAll('img')if (imgElements) {// 设置每个 img 元素的宽度imgElements.forEach((imgElement) => {imgElement.style.width = '100%' // 替换为所需的宽度imgElement.style.height = '100%' // 替换为所需的宽度})}})}}}})})},popupClose() {this.pdfh5.destroy()this.pdfh5 = null},//获取发票下载地址getInvoiceUrl(invoiceID) {invoiceUrlGet({ invoiceID }).then((res) => {if (res.code === 200) {this.popupShow = truethis.pdfCodeArray = res.data.einvoiceUrl}})},},
}
</script><style lang="scss" scoped>
@import "pdfh5/css/pdfh5.css";
</style>

如需开启其它功能或调用相关api请移步GitHub地址自行探索

pdfh5项目gitee地址

pdfh5项目GitHub地址

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/166612.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

解决Jenkins执行git脚本时报错:No such device or address问题

问题现象&#xff1a; Jenkins执行BeanShell脚本时&#xff0c;报错&#xff1a;jenkins fatal: could not read Username for http://112.11.120.1: No such device or address 解决方案&#xff1a; 解决服务器拉取git仓库的代码权限&#xff0c;使用高级子模块克隆功能。…

vioovi的ECRS工时分析软件:食品加工行业的生产效率提升利器

在食品加工行业&#xff0c;提高生产效率、降低成本、优化资源配置是至关重要的。随着科技的不断发展&#xff0c;越来越多的企业开始借助先进的软件工具来助力生产管理。本文将介绍一款备受食品加工企业青睐的工业工程软件——vioovi的ECRS工时分析软件&#xff0c;并探讨其如…

【JavaEESpring】Spring Web MVC⼊⻔

Spring Web MVC 1. 什么是 Spring Web MVC1.1 什么是 MVC ?1.2 是什么 Spring MVC? 2. 学习 Spring MVC2.1 建立连接2.2 请求2.3 响应 3. 相关代码链接 1. 什么是 Spring Web MVC 官⽅对于 Spring MVC 的描述是这样的&#xff1a; 1.1 什么是 MVC ? MVC 是 Model View C…

【网络编程】传输层——TCP协议

文章目录 TCP协议TCP协议格式窗口大小六个标志位确认应答机制超时重传机制连接管理机制三次握手四次挥手 流量控制滑动窗口拥塞控制延迟应答捎带应答面向字节流粘包问题TCP异常情况TCP小结基于TCP的应用层协议TCP与UDP的对比 TCP相关实验CLOSE_WAIT状态实验TIME_WAIT状态实验TI…

ubuntu 火焰图脚本

环境ubuntu1804 x86_64 #!/bin/bash if [ "$2_" "_" ];thenecho "usage ./fire.sh oncpu/offcpu pid"exit fiif [ "$1_" "oncpu_" ];thensudo perf record -F 99 -p $2 -g -- sleep 10syncsudo perf script > out.pe…

Maven中的继承与聚合

一&#xff0c;继承 前面我们将项目拆分成各个小模块&#xff0c;但是每个小模块中有很多相同的依赖于是我们创建一个父工程将模块中相同的依赖定义在父工程中&#xff0c;然后子工程继承父工程Maven作用&#xff1a;简化依赖配置&#xff0c;统一依赖管理,可以实现多重继承像J…

竞赛选题 深度学习猫狗分类 - python opencv cnn

文章目录 0 前言1 课题背景2 使用CNN进行猫狗分类3 数据集处理4 神经网络的编写5 Tensorflow计算图的构建6 模型的训练和测试7 预测效果8 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; **基于深度学习猫狗分类 ** 该项目较为新颖&a…

Android Camera App启动流程解析

前言&#xff1a;做了7年的camera app开发&#xff0c;给自己一个总结&#xff0c;算是对camera的一次告白吧。Camera被大家誉为手机的眼睛&#xff0c;是现在各大手机厂商的卖点&#xff0c;也是各大厂商重点发力的地方。Camera的重要性我就不在这里赘述了&#xff0c;让我们进…

物联网中的毫米波雷达:连接未来的智能设备

随着物联网&#xff08;IoT&#xff09;技术的飞速发展&#xff0c;连接设备的方式和效能变得越来越重要。毫米波雷达技术作为一种先进的感知技术&#xff0c;正在为物联网设备的连接和智能化提供全新的可能性。本文将深入探讨毫米波雷达在物联网中的应用&#xff0c;以及它是如…

三数之和(双指针)

15. 三数之和 - 力扣&#xff08;LeetCode&#xff09; 题目描述 给你一个整数数组 nums &#xff0c;判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k &#xff0c;同时还满足 nums[i] nums[j] nums[k] 0 。请 你返回所有和为 0 且不重复的三…

【笔记】系统集成项目管理工程师-各管理输入输出整理

目录 一、整体管理 二、范围管理 三、进度管理 四、成本管理 五、质量管理 六、人力资源管理 七、干系人管理 八、风险管理 九、word 版本整理 十、PPT图版本管理 一、整体管理 1. 制订项目章程 2. 制订项目管理计划 3. 指导与管理项目工作 4. 监控项目工作 5. 实施…

vue-cli创建自定义preset预设项目

vue-cli创建自定义preset预设项目 背景自定义预设创建默认预设创建预设项目preset.jsonprompts.jstemplate预设模板generator.js 本地预设创建项目 背景 一个 Vue CLI preset 是一个包含创建新项目所需预定义选项和插件的 JSON 对象&#xff0c;让用户无需在命令提示中选择它们…