vue2使用pdfjs-dist实现pdf预览(iframe形式,不修改pdfjs原来的ui和控件,dom层可以用display去掉一部分组件)

前情提要

在一开始要使用pdf预览的时候,第一次选的是vue-pdf,但是vue-pdf支持的功能太少,缺少了项目中需要的一项-复制粘贴功能

之后我一顿搜搜搜,最终貌似只有pdfjs能用

但是网上支持text-layer的貌似都是用的2.09那个版本。

使用textlayer出现的报错:

因为我项目中还有用到vue-pdf的地方,在我npm install pdfjs-dist之后,因为他们的依赖冲突库库报错,最后不得已用了本地的pdfjs

但是因为wiki内容不足,没找到最新版本的textlayer怎么调用,然后加上各种报错最后还是放弃了使用自己调用的pdfjs,选择了最方便的使用浏览器自带的pdfjs(这个问题也多,微信自带浏览器打开不显示)

这两天有空了,又找了找网上的代码,最终在某站上看到一个大佬用的是本地pdfjs,然后没用getDocment的方法,直接用本地的服务访问了pdfjs

vue实现案例

  1. 先去官网下载最新的pdfjs-dist
    https://github.com/mozilla/pdf.js/releases
    我下载的这个版本官网说是可以支持旧版浏览器
  2. 下载之后放到vue项目中的public目录下

    在 web/viewer.mjs中 这段代码可以注释调,好像是避免跨域问题
javascript 复制代码
// const fileOrigin = new URL(file, window.location.href).origin;
      // if (fileOrigin !== viewerOrigin) {
      //   throw new Error("file origin does not match viewer's");
      // }
  1. 这时候就可以访问下看看了
    http://localhost:80/js/pdfjs/web/viewer.html (你自己的项目访问地址)
  2. 然后给你项目中的pdf地址前面加上这个本地的地址后用iframe访问就可以了
javascript 复制代码
<iframe
	:src="pdfurl"
	frameborder="0"
	width="100%"
	height="850px"
></iframe>
this.pdfurl = '/js/pdfjs/web/viewer.html?file=' + data.data.ulr;
  1. 用dom可以修改iframe中的样式(同源的情况下)
javascript 复制代码
document.getElementsByTagName('iframe')[0].onload = function () {
			var iframeDocument =
				this.contentDocument || this.contentWindow.document;
			var styleElement = iframeDocument.createElement('style');
			styleElement.textContent = 'body { background-color: blue; }';
			iframeDocument.head.appendChild(styleElement);
		};

感谢下https://github.com/Laomai-codefee这个博主,很强

这个是博主用pdfjs实现的项目案例和一些使用方法(react)

https://github.com/Laomai-codefee/pdfjs-annotation-extension/blob/main/README_CN.md

相关推荐
知识分享小能手15 分钟前
Html5学习教程,从入门到精通,HTML5 简介语法知识点及案例代码(1)
开发语言·前端·javascript·学习·前端框架·html·html5
IT、木易18 分钟前
大白话React第二章深入理解阶段
前端·javascript·react.js
晚安72024 分钟前
Ajax相关
前端·javascript·ajax
图书馆钉子户26 分钟前
怎么使用ajax实现局部刷新
前端·ajax·okhttp
bin915342 分钟前
DeepSeek 助力 Vue 开发:打造丝滑的单选按钮(Radio Button)
前端·javascript·vue.js·ecmascript·deepseek
qianmoQ1 小时前
第五章:工程化实践 - 第五节 - Tailwind CSS 常见问题解决方案
前端·css
那就可爱多一点点1 小时前
超高清大图渲染性能优化实战:从页面卡死到流畅加载
前端·javascript·性能优化
不能只会打代码2 小时前
六十天前端强化训练之第一天HTML5语义化标签深度解析与博客搭建实战
前端·html·html5
OpenTiny社区2 小时前
Node.js技术原理分析系列——Node.js的perf_hooks模块作用和用法
前端·node.js
菲力蒲LY2 小时前
输入搜索、分组展示选项、下拉选取,全局跳转页,el-select 实现 —— 后端数据处理代码,抛砖引玉展思路
java·前端·mybatis