利用patch-package补丁,解决H5预览PDF时电子签章不显示问题

利用patch-package补丁,解决H5预览PDF时电子签章不显示问题

一、问题描述

在生产环境中,遇到了一个紧急的技术问题:用户在移动端H5页面上查看电子票时,PDF文件预览功能正常,但其中的电子签章未能正常显示。这一问题直接影响了用户验证电子票真实性的体验,需要迅速解决。 file

二、问题排查与定位

经过仔细排查,确定了问题的根源:后端返回的PDF文件为Base64格式,前端使用pdf.js-dist库进行渲染时,由于库作者的某些原因,电子签章功能被默认屏蔽。在本地开发环境中,可以通过直接修改源码来解除这一屏蔽,但这种方法无法直接应用到生产环境,因为每次重新安装依赖时,修改的内容都会被覆盖。

三、解决方案设计与实施

为了在生产环境中修复这一问题,同时确保未来更新依赖时修改不会被覆盖,采取以下策略解决此问题:

1、引入patch-package工具:通过npm安装patch-package,这是一个允许开发者在应用npm install命令后,对node_modules中的代码进行补丁修改的npm钩子。使用它,可以安全地对pdf.js-dist库进行必要的修改,并确保这些修改在后续依赖更新时仍能保持。

npm i patch-package // 安装补丁工具

2、配置package.json:在项目的package.json文件中,添加了"postinstall"脚本,用于在每次安装依赖后自动运行patch-package命令,确保补丁被正确应用。

3、创建补丁文件:使用npx patch-package pdfjs-dist命令,手动为pdfjs-dist库创建了补丁文件。执行此命令后,项目根目录下自动生成了一个patches文件夹,其中包含了一个针对pdfjs-dist库的补丁文件,该文件详细记录了在node_modules中对pdf.js-dist库所做的修改。

npx patch-package pdfjs-dist // 在修复node_modules的源码后执行改指令

三、代码实现以及问题截图

<template>
<!-- 查看电子票 -->
<div class="nucleicAcidTestMain"><e-headers class="nucleicAcidTestNav" Transparency>查看电子票</e-headers><div class="pdfList" /><div class="tips">长按可下载电子票</div></div>
</template>
<script>import PDFJS from 'pdfjs-dist';export default {mounted() {this.pdfBase64(url); //url为base64格式的pdf},methods: {// 解码pdfBase64(url) {let base64 = url.replace(new RegExp('data:application/pdf;base64,', 'g'), '').replace(/[\n\r]/g, '');let decodedBase64 = atob(base64); //使用浏览器自带的方法解码this.pdfToCanvas({ data: decodedBase64 });},// pdf转canvas图片async pdfToCanvas(url) {this.canDown = true;let pdfList = document.querySelector('.pdfList');let pdf = await PDFJS.getDocument(url); //返回一个pdf对象let pages = pdf.numPages; //声明一个pages变量等于当前pdf文件的页数for (let i = 1; i <= pages; i++) {//循环页数let canvas = document.createElement('canvas');let page = await pdf.getPage(i); //调用getPage方法传入当前循环的页数,返回一个page对象let scale = 5; //缩放倍数,1表示原始大小(倍数越大越清晰)let viewport = page.getViewport(scale);let context = canvas.getContext('2d'); //创建绘制canvas的对象canvas.height = viewport.height; //定义canvas高和宽canvas.width = viewport.width;canvas.style.width = '100%';let renderContext = { canvasContext: context, viewport: viewport };await page.render(renderContext);const imgUrl = canvas.toDataURL('image/png', 1.0); // canvas转为图片,实现下载const img = document.createElement('img');img.src = imgUrl;img.style.width = '100%';pdfList.appendChild(img);}},returnPage() {this.$router.go(-1);}}};
</script>

file

四、总结

成功解决了移动端H5电子票PDF预览中的电子签章不显示问题。通过引入patch-package工具,可以在生产环境中有效地对第三方库进行补丁修改,但是此种补丁方法要求对应依赖版本,也就是说项目所对应的PDFJS库版本更改后,很可能会导致补丁不生效或者需要重新生成补丁。所有一般采用固定版本号对应补丁。 file 需求考虑项目是否强依赖于库更新。

本文由博客一文多发平台 OpenWrite 发布!

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

人工智能算法工程师高级课程1-单类目标识别之人脸检测识别技术MTCNN模型介绍与代码详解

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下人工智能算法工程师高级课程1-单类目标识别之人脸检测识别技术MTCNN模型介绍与代码详解。本文深入探讨了基于PyTorch的人脸检测与识别技术&#xff0c;详细介绍了MTCNN模型、Siamese network以及center loss、softm…

【操作系统】文件管理——文件共享与保护,文件系统的结构(个人笔记)

学习日期&#xff1a;2024.7.18 内容摘要&#xff1a;文件共享&#xff0c;文件保护&#xff0c;文件系统的层级结构和全局结构&#xff0c;虚拟文件系统 文件共享 操作系统提供的文件共享功能&#xff0c;可以让多个用户共享使用同一个文件。文件共享和文件复制是不一样的&a…

mac docker no space left on device

mac 上 docker 拉取镜像报错 Error response from daemon: write /var/lib/docker/tmp/docker-export-3995807640/b8464f52498789c4ebbc063d508f04e8d2586567fbffa475e3cd9afd3c5a7cf2/layer.tar: no space left on device解决&#xff1a; 增加 docker 虚拟磁盘大小。如下图

分(中)位数回归算法 -医学小样本数据回归分析的更佳选择 ?

分&#xff08;中&#xff09;位数回归算法 -医学小样本数据回归分析的更佳选择 &#xff1f; 在医学研究中&#xff0c;小样本数据回归分析是一项常见且重要的任务。由于医学数据的复杂性、多样性和稀缺性&#xff0c;传统的回归分析方法如最小二乘法&#xff08;OLS&#xf…

LeetCode 3112.访问消失节点的最少时间:单源最短路的Dijkstra算法

【LetMeFly】3112.访问消失节点的最少时间&#xff1a;单源最短路的Dijkstra算法 力扣题目链接&#xff1a;https://leetcode.cn/problems/minimum-time-to-visit-disappearing-nodes/ 给你一个二维数组 edges 表示一个 n 个点的无向图&#xff0c;其中 edges[i] [ui, vi, l…

大数据之数据抽取架构演变过程

架构演变之Flink架构的演变过程 一、 起初搭建整个大数据平台是基于CDH这一套资源管理和整合的CM资源管理器搭建的 整个平台包括了&#xff1a; HDFS&#xff0c;YARN&#xff0c;HIVE&#xff0c;zoozie,FLINK,Spark,Zookeeper等组件搭建而成&#xff0c; 刚开始搭建的时候&am…

Quartus II 13.1添加新的FPGA器件库

最近需要用到Altera的一款MAX II 系列EPM240的FPGA芯片&#xff0c;所以需要给我的Quartus II 13.1添加新的器件库&#xff0c;在此记录一下过程。 1 下载所需的期间库 进入Inter官网&#xff0c;&#xff08;Altera已经被Inter收购&#xff09;https://www.intel.cn/content…

人工智能导论-机器学习

机器学习概述 概述 本章主要介绍的机器学习的概念、发展历程、发展趋势、相关应用&#xff0c;着重拓展机监督学习和无监督学习的相关知识。 重点&#xff1a;机器学习的定义和应用&#xff1b; 难点&#xff1a;机器学习算法及分类。 机器学习 - 重要性 MachineLeaning出…

基于X86+FPGA+AI数字化医疗设备:全自动尿沉渣检测仪

助力数字医疗发展&#xff0c;信迈可提供全自动尿沉渣检测仪专用计算机 随着信息技术的不断进步&#xff0c;医疗也进入了一个全新的数字化时代。首先是医疗设备的数字化&#xff0c;大大丰富了医疗信息的内涵和容量&#xff0c;具有广阔的市场发展前景。 数字化医疗设备&…

[开源]语雀+Vercel:打造免费个人博客网站

大家好,我是白露。 今天我想和大家分享我的今年的第一个开源项目 —— 基于语雀+Nextjs+Vercel实现免费的博客系统。 简单来说,你在语雀写博客,然后直接一键同步到个人网站上,网站自动部署! 而且,整个过程几乎不需要额外的成本,也不用充值语雀超级会员,hh。这个项目…

IAR嵌入式开发解决方案已全面支持芯科集成CX3288系列车规RISC-V MCU,共同推动汽车高品质应用的安全开发

中国上海&#xff0c;2024年7月16日 — 全球领先的嵌入式系统开发软件解决方案供应商IAR与芯科集成电路&#xff08;以下简称“芯科集成”&#xff09;联合宣布&#xff0c;最新版本IAR Embedded Workbench for RISC-V 3.30.2功能安全版已全面支持芯科集成CX3288系列车规RISC-V…

分布式服务框架zookeeper+消息队列kafaka

一、zookeeper概述 zookeeper是一个分布式服务框架&#xff0c;它主要是用来解决分布式应用中经常遇到的一些数据管理问题&#xff0c;如&#xff1a;命名服务&#xff0c;状态同步&#xff0c;配置中心&#xff0c;集群管理等。 在分布式环境下&#xff0c;经常需要对应用/服…

秋招突击——7/18——多线程编程(Java线程池和Executor框架的)

文章目录 引言基础知识线程池原理Executor框架Executor框架的两级调度模型Executor框架结构Executor框架成员ThreadPoolExecutor详解——这里简单过一下&#xff0c;知道原理即可FixedThreadPool简介SingleThreadExecutorCachedThreadPool ScheduledThreadPoolExecutor详解——…

【Docker】基于Docker-compose创建LNMP环境

目录 一.Docker-compose 概述 1.容器编排管理与传统的容器管理的区别 2.docker-compose 作用 3.docker-compose 本质 4.docker-compose 的三大概念 二.YML文件格式及编写注意事项 1.yml文件是什么 2.yml问价使用注意事项 3.yml文件的基本数据结构 三.Docker-compose …

Redis常用的5大数据类型

Reids字符串&#xff08;String&#xff09; 设置相同的key&#xff0c;之前内容会覆盖掉 Redis列表&#xff08;List&#xff09; 常用命令 从左往右放值 数据结构 Redis集合&#xff08;set&#xff09; sadd<key><value1><value2>...... 数据结构 Set数据…

2024可信数据库发展大会|存算分离架构驱动电信数据平台革新

7 月 16 日 - 17 日&#xff0c;由中国通信标准化协会和中国信息通信研究院主办&#xff0c;大数据技术标准推进委员会承办&#xff0c;InfoQ 联合主办的「2024 可信数据库发展大会」&#xff08;TDBC&#xff09;在北京召开。 酷克数据解决方案架构师吴昊受邀参与“电信行业数…

给Wordpress评论列表的用户昵称增加个性化角色称号和注册年数

什么是个性化角色称号? 个性化称号:其实就是对应wordpress的几个用户组,重新给它装个面具。 比如:管理员 -> 华山掌门 比如:订阅者 -> 华山弟子 比如:VIP组 -> 掌门亲传弟子 。。。 就是个好玩的东西 什么又是注册年数? 显示用户在你的网站上注册了多少…

阿里布达插画:成都亚恒丰创教育科技有限公司

阿里布达插画&#xff1a;梦幻与现实交织的绮丽画卷 在浩瀚的艺术长河中&#xff0c;总有一些作品以其独特的魅力&#xff0c;跨越时空的界限&#xff0c;触动着每一个观者的心灵。阿里布达插画&#xff0c;便是这样一股不可忽视的艺术清流&#xff0c;它以细腻的情感描绘、奇…

紫光展锐5G安卓核心板T760__国产手机芯片方案

展锐T760安卓核心板是具备续航和性能更加均衡的5G移动平台。其主要特点包括主流的6400万像素摄像头和高达120Hz的刷新率。 平台采用多模融合的创新架构和AI智能调节技术&#xff0c;从而在5G数据场景下降低了37%的整体功耗&#xff0c;在5G待机场景下降低了18%的整体功耗。 多…

收银系统源码-线上商城diy装修

线下线上一体化收银系统越来越受门店重视&#xff0c;尤其是连锁多门店&#xff0c;想通过线下线上相互带动&#xff0c;相互引流&#xff0c;提升门店营业额。商城商城如何装修呢&#xff1f; 1.收银系统开发语言 核心开发语言: PHP、HTML5、Dart后台接口: PHP7.3后合管理网…