VUE预览PDF文件并利用pdf.js获取鼠标选中的文字和搜索,在iframe中获取选中文字,监听鼠标事件,右键菜单

vue-pdf 操作 【代码】vue-pdf 操作。 阅读详情

一、VUE预览PDF文件并利用pdf.js获取鼠标选中的文字和搜索

需求实现:vue实现预览pdf文件,获取到鼠标选中的文字数据。调用pdf.js自带的搜索方法实现搜索功能(后期可以调用该接口满足其他的搜索需求)

 1、下载pdf.js插件

地址: Getting Started

 

下载后解压文件放置在public文件夹下

 2、在页面中引入

//搜索框和搜索按钮
<div style="margin-bottom:10px">
      <el-input prefix-icon="el-icon-search" v-model="selectText"></el-input>
      <el-button type="primary" @click="sendMessage">搜索</el-button>
</div>

   使用的时候配合<iframe>一起使用,直接将标签的src属性指向pdf.js插件的 viewer.html页面,让该页面代为展示pdf即可

//pdf展示模板
<div class="iframe_box">
     <iframe width="100%" height="100%" :src="`/pdf/web/viewer.html?file=${pdfUrl}`" frameborder="0" id="myIframe"></iframe>
</div>

 使用的是本地pulic文件夹下的pdf文件

data:{
  return{
     pdfUrl: "/2.pdf", //pdf地址
     selectText: "",//搜索框中的文本
   }
}

3、获取选中文本,实现搜索

  mounted() {
    //这是滑选事件
    this.getSelectText();
    // 搜索时 接收数据
    this.getMessage()
  },

在mounted中执行事件,iframe页面加载完成就开始监听是否触发滑选事件,并将触发后的选中文本传给搜索框(iframe.contentWindow是iframe的window对象) 

    // 滑选事件注册: 获取鼠标选中的文本
    getSelectText() {
      let _this = this;
      let iframe = document.getElementById('myIframe');
      let x = '';
      let y = '';
      let _x = '';
      let _y = '';
      // iframe 加载完成后执行并将双击事件过滤掉,因为双击事件可能也触发滑选,所以为了不误操作,将其剔除
      iframe.onload = function () {
        // 鼠标点击监听
        iframe.contentDocument.addEventListener('mousedown', function (e) {
          x = e.pageX;
          y = e.pageY;
        }, true);
        // 鼠标抬起监听
        iframe.contentDocument.addEventListener('mouseup', function (e) {
          _x = e.pageX;
          _y = e.pageY;
          if (x == _x && y == _y) return; //判断点击和抬起的位置,如果相同,则视为没有滑选,不支持双击选中
          var choose = iframe.contentWindow.getSelection().toString();
          _this.selectText = choose;
        }, true);       
      };
    },

点击搜索按钮后像iframe发送数据,在mouted中接收数据。 

   // 发送数据(搜索文字)
    sendMessage() {
      let vm = this;
      //获取iframe
      let iframe = document.getElementById('myIframe');
      //将滑选数据传入到iframe中
      iframe.contentWindow.postMessage(vm.selectText, '*');
    },

  // 接受数据
    getMessage() {
      //获取iframe
      let iframe = document.getElementById('myIframe');
      // iframe监听是否有数据传入,将传入的数据作为参数传递给pdf.js的find接口
      iframe.contentWindow.addEventListener('message', function (e) {
        //这里打印一下,看是否拿到了传入的数据
        console.log(e.data);
        // 这里打印的是pdf.js暴露出来的find接口
        console.log(iframe.contentWindow.PDFViewerApplication.findBar);
        // 输入查询数据
        iframe.contentWindow.PDFViewerApplication.findBar.findField.value = e.data;
        // 要求查询结果全体高亮
        iframe.contentWindow.PDFViewerApplication.findBar.highlightAll.checked = true;
        // 上面两部已经OK,触发highlightallchange方法。OK。全部完成,效果如文章开头,因为项目保密,所以就不这么着吧。
        iframe.contentWindow.PDFViewerApplication.findBar.dispatchEvent('highlightallchange');

      }, false);

    },

参考文章关于vue预览pdf的记录(vue-pdf,pdf.js,iframe标签)_Renyun_的博客-CSDN博客

Vue项目中利用pdf.js实现pdf内容滑选文字展示与搜索功能_十二指禅的博客-CSDN博客

二、在iframe中注册鼠标右键菜单, 销毁菜单,获取iframe选中的文字

需求实现:选中文字后,右击显示菜单打开弹窗,获取到选中的文字。单击鼠标时,菜单栏消失

 1、使用vue-contextmenujs ,在methods中实现注册菜单和销毁菜单的方法

关于vue-contextmenujs 的使用  VUE右键菜单 vue-contextmenujs的使用_ZMJ_QQ的博客-CSDN博客

  //注册菜单   
  onContextmenu(event) {
      event.preventDefault()
      this.$contextmenu({
        items: [
          {
            icon: "el-icon-circle-plus-outline",
            label: "添加标签",
            onClick: () => {
              this.addTagVisible = true;
            }
          },
        ],
        event,
        //菜单显示X坐标, 存在event则失效
        // x: event.clientX,  //x轴坐标
        // y: event.clientY, //y轴坐标
        customClass: "class-a",
        zIndex: 3,
        minWidth: 100
      });
      return false;
    },
   //销毁菜单
    contextmenuDestory() {
      this.$contextmenu.destroy();
    },

2、改写iframe的加载方法,监听鼠标抬起时,将获取到选中文字赋值给弹窗中。在iframe中自定义鼠标右键事件。

    因为我的菜单位置有问题,查找后发现vue-contextmenujs中,使用的是event.cilentX,该字段是只读的,可通过 Object.defineProperty。。重新设值,如果菜单位置正常则可忽略

注册完右键菜单后,如果不添加菜单销毁事件,则菜单栏会一直停留在页面上,需要在单击事件中销毁菜单。

    // 滑选事件注册: 获取鼠标选中的文本
    getSelectText() {
      let _this = this;
      let iframe = document.getElementById('myIframe');
      let x = '';
      let y = '';
      let _x = '';
      let _y = '';
      // iframe 加载完成后执行并将双击事件过滤掉,因为双击事件可能也触发滑选,所以为了不误操作,将其剔除
      iframe.onload = function () {
        // 鼠标点击监听
        iframe.contentDocument.addEventListener('mousedown', function (e) {
          x = e.pageX;
          y = e.pageY;
        }, true);
        // 鼠标抬起监听
        iframe.contentDocument.addEventListener('mouseup', function (e) {
          _x = e.pageX;
          _y = e.pageY;
          if (x == _x && y == _y) return; //判断点击和抬起的位置,如果相同,则视为没有滑选,不支持双击选中
          var choose = iframe.contentWindow.getSelection().toString();
          console.log(choose);
          _this.selectText = choose;
        //给弹窗中的字段辅助
          _this.tagform.tag = choose;
        }, true);

        // 自定义鼠标右键事件
        iframe.contentWindow.oncontextmenu = function (event) {
          if (_this.tagform.tag) {
           //重新设置菜单位置,如果菜单位置正常可忽略
            Object.defineProperty(event, 'clientX', {
              value: event.screenX,
              writable: true,
              configurable: true,
              enumerable: true,
            });
           //重新设置菜单位置,如果菜单位置正常可忽略
            Object.defineProperty(event, 'clientY', {
              value: event.screenY - 100,
              writable: true,
              configurable: true,
              enumerable: true,
            });
            // alert('请不要点击鼠标右键!');
            _this.onContextmenu(event)
            return false;//组织浏览器右键
          }
        };
        iframe.contentWindow.onclick = function () {
          _this.contextmenuDestory()
        }

      };
    },

参考文章:在iframe中获取选中的数据/iframe中鼠标事件_Flyfish2058的博客-CSDN博客_iframe 鼠标移动事件

vue2】纯前端实现本地的pdf/word/epub文件预览(包括pdf选中文字,epub高亮等) 需求是预览本地的pdf/word/epub格式的文件,但是搜索后发现没有可以直接使用的,格式不同,显示的方式效果也都略有不同。 最后还是分别实现预览的功能。 补充功能:pdf选中文字,epub高亮(我的需求是选中pdf/epub的文字后进行收藏) 阅读详情

相关推荐

Sqribble:面向内容创作者的结构化电子书自动化生成工具

电子书制作本质上是将结构化内容转化为符合出版规范的视觉文档的过程。其核心原理在于标题层级识别、样式规则映射与分页逻辑控制,技术价值体现在消除格式不一致、降低协作修改成本、保障跨设备交付可靠性。典型应用场景包括营销白皮书、课程手册、技术文档咨询报告等强结构内容的快速交付。区别于AI写作工具,Sqribble更接近一种‘结构翻译机’,依赖确定性规则而非概率模型,尤其适配已具备清晰Markdown或Word样式的文本输入。本文深入解析其模板驱动、零本地依赖、结构优先的工程实现逻辑。

android_mylove的专栏 412

JS获取鼠标选中文字

下面是小编给大家分享的js获取鼠标选中文字js获取鼠标选中的值关键代码,大家如果有需要可以参考下

Python Playwright自动化办公实战:从环境搭建到高级应用

浏览器自动化是现代办公数据处理中的关键技术,它通过模拟用户操作实现网页交互的自动化。其核心原理是程序化控制浏览器引擎,执行点击、输入、导航等操作,从而替代重复性人工劳动。这项技术的价值在于显著提升工作效率、减少人为错误,实现7x24小时无人值守任务执行。在应用场景上,它广泛适用于数据抓取、报表自动下载、系统流程自动化、日常办公任务处理等领域。本文聚焦于Python Playwright这一新兴工具,它凭借内置自动等待、多浏览器支持、异步发等特性,在稳定性与开发体验上优于传统方案。通过实战案例,详细解析

weixin_33901641的博客 359

vue+element+input+提取选中文字

textarea中有大量数据,获得鼠标选中的部分数据

vue3项目使用pdf.js插件实现:搜索高亮、修改pdf.js显示的页码、向pdf.js传值、控制搜索、处理接口文件

官网下载地址:https://mozilla.github.io/pdf.js/getting_started/#download.1、使用pdfjs已经写好的viewer.html页面。下载后将pdf.js 放到服务器上 如:http://xxxx:8080/static/pdfjs。这种方法需要从官网上将pdf.js包下载下来。pdf.worker.js:负责核心解析。通过插件docx-preview实现。2、将PDF文件渲染成Canvas。pdf.js: 负责API解析,

wang13679201813的博客 2万+

vue+pdf.js 印章签署完后鼠标滑过显示签章信息

效果图 核心思想: pdf.js签署印章,搜索相关文档就好 签署完后,每一页可能有多个印章,将这些印章跟随鼠标移动显示印章信息 首先思考将这些印章的提示信息放在生成的div中,然后添加鼠标移动事件,根据页数鼠标移动的坐标判断是否经过了某一页的印章 核心代码 if(this.sginData!=null){ for(var key in this.sginData){ console.log('kye====', key) for(var i=0 ; i < thi.

朝花夕拾的博客 2715

vue pdf.js访问远程服务器上的文件报错file origin does not match viewer‘s

pdf.js访问远程服务器上的文件报错file origin does not match viewer's 找到web/viewer.js文件中下面这两行代码注释掉。

ZMJ_QQ的博客 1009

SuperCopy插件原理与实战:解锁网页复制限制的前端技术解析

在Web前端开发中,CSS的user-select属性JavaScript事件监听是控制网页文本选择与复制行为的核心技术。user-select: none; 能够禁止用户选中特定区域的文本,而JavaScript可以通过拦截copy、selectstart等事件来阻止默认复制操作,这些机制常用于保护版权内容、防止UI误选或在线考试防作弊。从技术价值看,这些限制在保护内容的同时,也可能影响用户正常的资料摘录与学习体验。因此,浏览器扩展工具应运而生,它们通过注入CSS规则干预事件监听,在客户端临时解除限制

weixin_33946605的博客 304

10个经久不衰的JavaScript交互特效原理与现代实践

JavaScript交互特效是提升网页用户体验的关键技术手段,其本质是通过DOM操作、事件监听与CSS过渡(transform/transition)构建微交互反馈。这类特效非炫技堆砌,而是解决真实问题的设计范式——如模态层降低跳转成本、表格排序优化信息获取效率、图片悬停增强视觉层次。随着浏览器能力演进,原始脚本已可通过IntersectionObserver、CSS自定义属性、硬件加速等现代方案轻量适配,兼顾兼容性与性能。尤其在首屏加载、移动端响应、无障碍访问等工程场景中,合理选用经验证的交互模式,比盲

世范水晶 195

多模态自主AI代理:基于树搜索的网页交互智能架构

网页自动化正从静态脚本向动态决策演进,核心在于让AI具备类人的状态感知、路径规划与错误恢复能力。多模态指同步融合DOM结构、视觉布局、文本语义与交互反馈;自主性体现为无需预设流程即可动态生成动作序列;而树搜索则提供可解释、可回溯、可剪枝的决策骨架。该技术显著提升RPA在反爬强、UI多变场景下的鲁棒性,支撑金融比价、SaaS配置、高可靠数据采集等关键任务,是突破提示词工程瓶颈与页面微调即失效困局的工程化路径。

weixin_30788239的博客 559

Playwright交互操作全解析:从点击输入到实战避坑指南

在Web自动化测试领域,模拟用户交互是核心挑战之一。其原理在于通过程序控制浏览器,精准触发页面元素的事件响应,从而模仿真实用户操作。这项技术的价值在于能够实现端到端的业务流程验证,大幅提升测试覆盖率效率。常见的应用场景包括表单提交、动态内容操作以及复杂UI交互的自动化。本文将聚焦于Playwright框架中的交互API,深入探讨其内置的智能等待机制与真实事件模拟能力,帮助开发者解决元素点击无效、输入异常等典型问题,分享在动态页面、富文本编辑器等复杂场景下的实战技巧与调试方法。

weixin_34253126的博客 485

Agent-Browser可控交互实战:Puppeteer-core架构与状态协商协议

浏览器自动化是AI Agent落地的关键执行层,其本质是让大模型决策与前端运行时环境建立可靠、可观测、可调试的双向交互。传统方案将Browser视为黑盒输出设备,导致时序失控、状态不可见、错误难溯源;而真正有效的Agent-Browser协同,需基于结构化状态反馈(如焦点元素坐标、DOM可见性、网络空闲信号)构建‘白盒协商’机制。本文聚焦Puppeteer-core底层协议集成、可控半自动架构设计、真实页面动态加载与反爬应对等工程核心,覆盖从Chrome启动参数调优、CSS选择器健壮定位,到滑块验证码人机协

weixin_30571465的博客 379

6个工业级浏览器扩展重构数字工作流

浏览器已从简单浏览工具演变为现代知识工作的核心操作系统。理解其底层机制(如Cookie隔离、DOM操作、OCR文本提取、网络请求拦截)是提升效率的基础。本文聚焦真实工作流中的高频痛点——多账号切换卡顿、网页内容杂乱难提取、导航依赖鼠标低效、广告与追踪干扰加载、前端调试响应迟滞、标签页失控膨胀,基于场景鲁棒性、权限最小化与可审计性三大原则,精选6款经72小时压测与四重安全验证的开源扩展。它们不堆功能,而是以Unix哲学精准解决单一问题:PureCopy实现跨渲染层纯文本提取,LinkHint将网页变为键盘可寻

jardownload的博客 441

React 可访问可受控 Tabs 组件实战指南

Tabs 是 Web 应用中基础但关键的导航模式,其本质是管理视图状态与用户交互的受控界面闸门。遵循 WAI-ARIA 规范实现语义化结构(role='tablist' / 'tab' / 'tabpanel'),结合受控组件设计(activeId + onTabChange)保障状态可预测、可测试、可路由同步;通过 CSS max-height 过渡替代 JS 动画,在保证 60fps 性能的同时满足无障碍焦点管理与键盘导航(Arrow/ Home/End 键支持)。该方案直击 React 生产环境高频痛

weixin_30411239的博客 349

Opera AI Browser Operator:浏览器内核级网页自动化新范式

网页自动化是企业提效的关键技术,其本质是通过程序模拟用户操作完成跨页面、带状态、需判断的业务流程。传统方案依赖RPA工具或插件宏录制,存在延迟高、上下文感知弱、安全边界模糊等瓶颈。随着AI Browser OperatorWeb Automation等原生能力兴起,浏览器正从内容展示终端升级为可编程智能代理——依托本地轻量模型、内核级DOM操作与意图驱动流程编排,实现低延迟、强感知、高安全的自动化执行。该技术已广泛应用于电商比价、教育报告生成、IoT巡检等真实场景,显著降低自动化门槛。本文深入解析Oper

weixin_34319111的博客 333

Page Agent:浏览器原生AI代理,用文本化DOM实现网页自主操作

网页自动化正从‘外部操控’转向‘内生智能’,其核心是将大语言模型(LLM)深度集成到浏览器运行时环境中。基于文本化DOM快照的轻量级AI代理技术,摒弃高延迟、高风险的截图+视觉模型路径,通过语义压缩、可交互元素识别与上下文感知过滤,在毫秒级完成界面理解;结合强约束指令生成与浏览器端原生事件执行,保障操作精准性与登录态一致性。该方案天然适配SPA、无障碍场景及企业级后台系统,已在CRM同步、政务办事、电商上架等真实业务中验证99%+准确率与2~3倍性能提升,代表下一代前端智能化基础设施的关键演进方向。

weixin_34405354的博客 486

Agent 时代的 UI/UX 革命:Generative UI 与动态交互界面

当人工智能从「工具」演变为「自主协作的智能体(Agent)」时,人与技术的交互边界正在被彻底重构——传统的「点击-拖拽-表单提交」式静态界面已经无法满足 Agent 时代「实时意图驱动、多模态输入输出、跨场景自适应、多主体协作同步」的需求。本文将从Agent 时代交互范式的底层变革入手,深入解析 Generative UI(生成式界面)这一核心技术路径,通过生动的生活化类比(如智能管家的「按需布置房间」vs 传统酒店的「固定房型布局」)拆解其核心概念、数学模型、算法原理与 Python 实现;接着结合。

AI天才研究院 429

获取鼠标选中文字

今天的问题是想在笔记里面选着想要的文本 来创建新的任务问题

HTML5_student的博客 972
上一篇: js修改只读属性
下一篇: 扫描型PDF转成可搜索可复制的文字型PDF,使用PDF24 OCR 程序报“下载需要的文件时出现一个错误”
~Serendipity~
博客等级 码龄6年 120粉丝 100原创
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值