Vue2.0 通过vue-pdf-signature@4.2.7和pdfjs-dist@2.5.207实现PDF预览
1.安装依赖
npm install pdfjs-dist@2.5.207 --save
npm install vue-pdf-signature@4.2.7 --save
2.在.vue文件中 script 部分引入
<script>
import * as PDFJS from 'pdfjs-dist'
PDFJS.GlobalWorkerOptions.workerSrc = require('pdfjs-dist/build/pdf.worker.js');//解决pdf.js中文乱码问题
import pdf from 'vue-pdf-signature'
// 中文PDF加载空白引入依赖
import CMapReaderFactory from 'vue-pdf-signature/src/CMapReaderFactory'export default {components: {pdf},data(){return{pdfPages: 0,//pdf页数pdfDoc: null,//pdf对象}},mounted() {this.getFileData();},methods:{//获取后台返回的文件流getFileData() {this.$http.post("/doc/docarchivemanagereceive/preview", {...this.from,}, {responseType: 'blob',}).then(({data: res}) => {//pdf-main 滚动条回到顶部this.$nextTick(() => {document.getElementsByClassName('pdf-main')[0].scrollTop = 0})const blob = new Blob([res], {type: 'application/pdf'})let fileUrl = URL.createObjectURL(blob)this.loadFile(fileUrl)})},//加载pdf文件loadFile(url) {const loadingTask = pdf.createLoadingTask({url: url,cMapPacked: true,CMapReaderFactory});loadingTask.promise.then((pdf) => {this.pdfDoc = pdf;this.pdfPages = pdf.numPages;this.$nextTick(() => {for (let i = 0; i < this.pdfPages; i++) {this.renderPage(i + 1, i) // 从第一页开始渲染}})}).catch((err) => {console.error("pdf 加载失败", err);this.$message.error("PDF文件打开失败");});},//获取分辨率getDeviceDPI() {var dpi = 96; // 默认值 96dpiif (window.screen && window.screen.deviceXDPI && window.screen.logicalXDPI) {dpi = window.screen.deviceXDPI / window.screen.logicalXDPI * dpi;} else if (window.devicePixelRatio) {dpi = dpi * window.devicePixelRatio;}return dpi;},//渲染pdf页renderPage(num, index, scale = 1.5, rotation = 0) {let deviceDPI = this.getDeviceDPI();this.pdfDoc.getPage(num).then((page) => {var viewport = page.getViewport({scale: scale,rotation: page.getViewport({scale: scale}).rotation + rotation});// Support HiDPI-screens.var outputScale = window.devicePixelRatio || 1;var canvas = document.getElementById('pdfCanvas' + index);var context = canvas.getContext('2d');canvas.width = Math.floor(viewport.width * outputScale);canvas.height = Math.floor(viewport.height * outputScale);canvas.style.width = Math.floor(viewport.width) + "px";canvas.style.height = Math.floor(viewport.height) + "px";canvas.parentNode.style.width = canvas.width + 'px';canvas.parentNode.style.height = canvas.height + 'px';var transform = outputScale !== 1? [outputScale, 0, 0, outputScale, 0, 0]: null;var renderContext = {canvasContext: context,transform: transform,viewport: viewport};page.render(renderContext);})//pdfjs-dist 2.0.945版本getViewport(scale)的传参方式/* this.pdfDoc.getPage(num).then((page) => {var scale = 816 / page.getViewport(1).width * (window.devicePixelRatio || 1);var scaledViewport = page.getViewport(scale);var canvas = document.getElementById('pdfCanvas' + index);var context = canvas.getContext('2d');canvas.width = scaledViewport.width;canvas.height = scaledViewport.height;var renderContext = {canvasContext: context,viewport: scaledViewport};page.render(renderContext);})*/},}}</script>
3.在.vue文件中 html 部分引入
<!--pdf文件预览--><div class="pdf_view" ><div class="pdf-main"> <div class="pdf_item" v-for="(item,index) in pdfPages" :key="index"><canvas :id="'pdfCanvas' + index"/></div></div></div>
4.在.vue文件中 css 部分引入
.pdf_view {height: calc(100vh - 116px);overflow: hidden;background: #F2F4F7;}.pdf-main {width: 100%;height: calc(100vh - 116px);overflow: auto;padding: 20px 0 0 20px;display: flex;flex-direction: column;align-items: center;.pdf_item {position: relative;margin: 0 auto 20px;}
}
5.最终效果

相关文章:
Vue2.0 通过vue-pdf-signature@4.2.7和pdfjs-dist@2.5.207实现PDF预览
1.安装依赖 npm install pdfjs-dist2.5.207 --savenpm install vue-pdf-signature4.2.7 --save2.在.vue文件中 script 部分引入 <script> import * as PDFJS from pdfjs-dist PDFJS.GlobalWorkerOptions.workerSrc require(pdfjs-dist/build/pdf.worker.js);//解决pdf…...
gradle的安装及其配置
1、下载网址 Gradle | Releases 2、 3、配置环境变量 4、 5、cmd输入gradle-v查看版本...
qt QImage详解
1、概述 QImage是Qt框架中用于处理图像数据的一个核心类。与QPixmap不同,QImage是在内存中直接存储图像像素数据的,这使得它适用于需要直接访问和修改像素的应用场景,比如图像处理算法、图像绘制以及图像分析等。QImage支持多种图像格式&…...
数据分析与效果评估的有效方法与实践探讨
内容概要 在现代社会中,数据分析与效果评估已成为各类项目管理和决策制定中的重要组成部分。首先,数据分析为我们提供了一种系统化的方法,以深入了解所收集数据的内涵与趋势。通过对数据进行整理、分类和分析,我们能够发现潜在的…...
Langchain调用模型使用FAISS
1.导包 from langchain_community.document_loaders import TextLoader from langchain_community.vectorstores import FAISS from langchain_openai.embeddings import OpenAIEmbeddings from langchain_text_splitters import RecursiveCharacterTextSplitter2.加载数据 l…...
双向链表的实现
一.概念与结构 双向链表区别于单链表不同的地方在于,双链表多出于一个指针能指向前面结点,使得整个链表得以首位相连。带头链表里的头结点称为哨兵位,哨兵位结点不储存任何有效元素,只是放哨功能。 二.实现双链表 2.1双链表结构…...
Charles简单压力测试
1.接口请求次数,并发量,请求延迟时间均可配置 1.1选中需要进行测试的接口,鼠标右键选中【repeat advance】 2.设置并发参数 下面的图中,选择了1个接口,每次迭代中1个接口同时请求,迭代1000次(…...
MMSegmentation测试阶段推理速度非常慢的一种可能原因
问题背景 测试集约1000张图片。训练阶段在测试集上推理时,速度正常,推理速度约为30fps;而使用tools/test.py进行推理时,速度非常慢,推理速度不到0.1fps。 解决方案 检查配置文件中是否启用了visualizer,…...
数据结构之链式结构二叉树的实现(初级版)
本文内容将主会多次用到函数递归知识!!! 本节内容需要借助画图才能更好理解!!! 和往常一样,还是创建三个文件 这是tree.h #pragma once #include<stdio.h> #include<stdlib.h> …...
day01-MybatisPlus
目录 1.快速入门 1.2.快速开始 1.2.1引入依赖 1.2.2.定义Mapper 1.2.3.测试 1.3.常见注解 1.3.1.TableName 1.3.2.TableId 1.3.3.TableField 1.4.常见配置 2.核心功能 2.1.条件构造器 2.1.1.QueryWrapper 2.1.2.UpdateWrapper 2.1.3.LambdaQueryWrapper 2.2.自…...
Postgresql源码(137)执行器参数传递与使用
参考 《Postgresql源码(127)投影ExecProject的表达式执行分析》 0 总结速查 prepare p_04(int,int) as select b from tbl_01 where a $1 and b $2为例。 custom计划中,在表达式计算中使用参数的值,因为custom计划会带参数值&…...
韩国恋爱游戏:阿西, 美女室友竟然…?百度网盘下载
故事情节/出场人物 [阿西, 美女室友竟然…?]是一款 FMV 真人视频恋爱游戏,你将以第一人称与5位美女室友一起体验别样合租生活。 在本作中,您将扮演合租公寓的房东男主 吴宥万(直译:牛奶男),一直独来独往的你,生活…...
一个运维牛人对运维规则的10个总结
一个运维牛人对运维规则的10个总结 在运维领域,经验和流程往往决定了系统的稳定性与可靠性。一个运维人,总结出了以下10条运维规则,涵盖了从基础管理到高级策略的全面内容,旨在帮助运维人员更好地应对各种挑战,确保系…...
Istio基本概念及部署
一、Istio架构及组件 Istio服务网格在逻辑上分为数据平面和控制平面。 控制平面:使用全新的部署模式:Istiod,这个组件负责处理Sidecar注入,证书颁发,配置管理等功能,替代原有组件,降低复杂度&…...
基于 Python 的 Django 框架开发的电影推荐系统
项目简介:本项目是基于 Python 的 Django 框架开发的电影推荐系统,主要功能包括: 电影信息爬取:获取并更新电影数据。数据展示:提供电影数据的列表展示。推荐系统:基于协同过滤算法实现个性化推荐。用户系…...
离线数仓开发SQL编写和调试的最佳实践(如何又快又好完成任务,学会几条就不用当很辛苦的牛马)
目录 在开发阶段对数据进行抽样 理论基础 实践应用 使用Hive进行数据采样 使用Spark进行数据采样 采用CTE模块化设计 逐步验证 逐步验证案例实践: 验证sales_data CTE: 验证ranked_sales CTE: 验证top_sales CTE: 结论 用Doris或Impala等更快查询的代替Hive …...
PostgreSQL 增量备份:保护你的数据资产
全文目录: 开篇语📜 前言📚 增量备份概述🔑 增量备份的优势 🛠️ PostgreSQL 增量备份实施步骤🌟 环境准备🚀 第一步:全量备份⏳ 第二步:定期增量备份🔄 第三…...
字节青训-寻找最大葫芦
问题描述 在一场经典的德州扑克游戏中,有一种牌型叫做“葫芦”。“葫芦”由五张牌组成,其中包括三张相同牌面值的牌 aa 和另外两张相同牌面值的牌 bb。如果两个人同时拥有“葫芦”,我们会优先比较牌 aa 的大小,若牌 aa 相同则再比…...
el-checkbox勾选一个变成了勾选所有
问题: el-checkbox完成后勾选一个选项变成了所有选项都勾选了。非model值不正确,我的model值绑定的是数组,但是还是勾选一个变成了勾选多个。 解决 因为勾选的内容比较简单,且值不需要入库,所以我最开始定义的option为…...
ExpandingCard扩展卡片
文章目录 演示效果分析思路核心代码总结 源码 演示效果 分析思路 使用flex布局,每个卡片的宽度都由flex进行灵活调整交互可以增加和删除active,来实现宽度扩增和恢复还需要使用transition进行动画过渡,使得平滑切换 核心代码 首先创建一个…...
用Java+GDAL+OpenCV玩转遥感图像:手把手教你实现Landsat标准假彩色合成(附完整代码)
JavaGDALOpenCV遥感图像处理实战:Landsat标准假彩色合成全流程解析 遥感图像处理正逐渐从专业软件向通用编程语言生态迁移。对于熟悉Java的开发者而言,利用GDAL和OpenCV这两个强大的库,完全可以构建自主可控的遥感处理流程。本文将完整展示如…...
全域数学公理体系下Navier-Stokes方程本源证明(正式论文版)
全域数学公理体系下Navier-Stokes方程本源证明(正式论文版) 作者:乖乖数学 成文日期:2026年5月25日 体系归属:全域数学大典卷七数学物理应用层 核心立论:光速恒定公理、时空曲率公理、四维通量守恒公理格式…...
基于CircuitPython与YouTube API的智能直播状态指示器制作指南
1. 项目概述与核心价值 如果你是一个内容创作者,或者你关注的某个频道正在直播,一个醒目、酷炫的“ON AIR”指示灯绝对能瞬间提升氛围感。今天要聊的这个项目,就是基于CircuitPython和YouTube API,自己动手打造一个能自动感知直播…...
出口土耳其:关键注意事项与避坑指南
与土耳其贸易需重点关注收汇安全、海关政策及单证认证。掌握即期信用证规则、海关拍卖时限及使馆认证要求,是防范货款与货物风险的关键。一、收汇风险防范土耳其商人常要求赊账或开具空头支票,部分还以个人财产抵押开具汇票,此类方式风险极高…...
终极Windows解析工具:WinFlexBison完整指南
终极Windows解析工具:WinFlexBison完整指南 【免费下载链接】winflexbison Main winflexbision repository 项目地址: https://gitcode.com/gh_mirrors/wi/winflexbison 你是否在Windows平台上开发编译器、解析器或需要处理复杂文本格式时,为缺少…...
终极CoreCycler教程:5分钟掌握CPU超频稳定性测试
终极CoreCycler教程:5分钟掌握CPU超频稳定性测试 【免费下载链接】corecycler Script to test single core stability, e.g. for PBO & Curve Optimizer on AMD Ryzen or overclocking/undervolting on Intel processors 项目地址: https://gitcode.com/gh_mi…...
从像素到诗歌:多模态AI的创意实践与工程实现
1. 项目概述:当像素点遇上AI诗人最近在GitHub上看到一个挺有意思的项目,叫smouj/pixel-poet-skill。光看名字,一股子赛博朋克混搭文艺青年的气息就扑面而来了。Pixel是像素,Poet是诗人,Skill是技能,组合起来…...
为Cursor AI编程助手配置安全规则:防范代码生成风险
1. 项目概述:为什么我们需要为Cursor定制安全规则如果你是一名开发者,并且已经开始使用Cursor这样的AI编程助手,那你大概率已经体会过它带来的效率革命。它能帮你生成代码、重构函数、甚至解释复杂的逻辑。但效率提升的同时,一个隐…...
3分钟搞定Windows安卓应用:APK安装器让你的电脑秒变安卓设备!
3分钟搞定Windows安卓应用:APK安装器让你的电脑秒变安卓设备! 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 你知道吗?现在无需安装…...
基于GitHub Actions的跨平台应用自动化发布流水线实战指南
1. 项目概述:一个开源应用发布管道的诞生在软件开发的日常里,发布环节常常是那个“说起来简单,做起来一团糟”的部分。尤其是在团队协作中,从代码提交到最终用户能下载到安装包,中间要经历构建、测试、签名、打包、上传…...
