VUE2实现pdf批注

最近有一个开发需需求, 需要用在pdf做标注功能,用了很多插件,都和目标不太相符,最后用canvas绘制完成了此功能。


文章目录

  • VUE2实现pdf批注
  • 前言
  • 一、canvas是什么?
  • 二、使用步骤
    • 1.引入库
    • 2.实现
  • 总结

前言

如果有不懂canvas的具体操作和api调用,推荐先去b站深入学习,具体实现操作代码如下。


提示:以下是本篇文章正文内容,下面案例可供参考

一、canvas是什么?

Canvas是一个基于Web的HTML5应用程序,它提供了一个用于创建和展示图形和动画的HTML元素。Canvas可以用来绘制图形、动画、视频、音频、游戏等等。它是HTML5标准的一部分,使用JavaScript编程语言来操作和控制

二、使用步骤

1.引入库

代码如下(示例):

     <el-button size="mini">{{ pageNum }}/{{ numPages }}</el-button><el-button size="mini" type @click="resetAll">清空</el-button><el-button size="mini" type @click="handleRepealCancvs">撤销</el-button><el-button size="mini" type @click="downLoad">下载</el-button><el-button size="mini" type @click="radioClick('R')">矩形绘制</el-button><el-button size="mini" type="primary" @click="btnPre">上一页</el-button><el-button size="mini" type="success" @click="btnNext">下一页</el-button><el-button size="mini" type="danger">提交</el-button>

2.实现

代码如下(示例):

 //上一页btnPre() {let page = this.pageNumpage = page > 1 ? page - 1 : this.numPagesthis.pageNum = page},//下一页btnNext() {let page = this.pageNumpage = page < this.numPages ? page + 1 : 1this.pageNum = page// this.resetAll()},// 下载画布 这里用的是html2canvas 插件downLoad() {html2canvas(document.getElementsByClassName('pdf-canvas-warp')).then(cavans => {this.imgData = cavans.toDataURL('image/png')const fileName = 'canvas.png'if ('download' in document.createElement('a')) {// 非IE下载const elink = document.createElement('a')elink.download = fileNameelink.style.display = 'none'elink.href = this.imgDatadocument.body.appendChild(elink)elink.click()document.body.removeChild(elink)} else {// IE10+下载navigator.msSaveBlob(this.url, fileName)}})},// 关键代码实现 onPointerDown(e) {if (this.type !== 'R') {return}var location = this.unifyCoordinates(e.clientX, e.clientY)this.pointerDownLocation.x = location.xthis.pointerDownLocation.y = location.ythis.dragging = truethis.saveData()console.log(this.rubberBandRect)console.log(this.pointerDownLocation)},onPointerMove(e) {if (this.type !== 'R') {return}if (this.dragging) {let location = this.unifyCoordinates(e.clientX, e.clientY)this.restoreData()this.makeRect(location)this.drawShape(location)}},onPointerUp(e) {if (this.type !== 'R') {return}if (this.dragging) {var location = this.unifyCoordinates(e.clientX, e.clientY)this.dragging = falsethis.restoreData()this.makeRect(location)this.drawShape(location)this.recordHisy()}}//调用处 deactivated() {this.canvas.removeEventListener('pointerdown', this.onPointerDown)this.canvas.removeEventListener('pointermove', this.onPointerMove)this.canvas.removeEventListener('pointerup', this.onPointerUp)},methods: {initImage() {this.canvas = this.$refs.mycanvssthis.ctx = this.canvas.getContext('2d')const image = new Image()image.setAttribute('crossOrigin', 'anonymous')image.src = this.imgimage.onload = () => {// 图片加载完,再draw 和 toDataURLif (image.complete) {this.canvas.width = image.widththis.canvas.height = image.heightthis.imageObj = imagethis.ctx.drawImage(image, 0, 0)this.ctx.globalCompositeOperation = 'R'this.canvas.addEventListener('pointerdown', this.onPointerDown)this.canvas.addEventListener('pointermove', this.onPointerMove)this.canvas.addEventListener('pointerup', this.onPointerUp)let imgData = this.canvas.toDataURL()this.historyList.push(imgData)}}},

总结

提示:这里对文章进行总结:

以上内容是关键实现代码逻辑可对pdf内容进行圈注,撤销,清空等操作。

VUE2实现pdf批注相关推荐

  1. 如何用PDF编辑器更改和隐藏PDF批注

    PDF批注是审阅PDF文档的主要功能之一,其作用是注释PDF.评论PDF文档内容.它不会影响或修改PDF文档原本的内容,在审阅PDF文档时非常实用.因此,在PDF编辑器的使用技巧中,掌握PDF批注的更 ...

  2. 【源码】PDF.js批注注释插件库(纯JS). 创建和保存PDF批注(PDF 高亮/签名/插图/截屏/文本框/画笔/多边形)-pdf.js

    基于 PDF.js 开发了 PDF 批注注释插件库,支持多种批注类型,支持写入批注到pdf中并保存,为目前纯前端 JavaScript 最佳实现方案,完美支持 老版浏览器.手机.平板 等移动端设备,仅 ...

  3. 金山pdf批注更改批注作者_Linux上的PDF批注工具

    金山pdf批注更改批注作者 What are good PDF annotation tools on Linux? Preferring saving the annotation in the P ...

  4. 该页面仅以HTML格式保存_学用系列PDF批注保存不容易!Ashampoo PDF PK 悦书PDF

    整本书阅读中,最令人头痛的是文档协作共读的数据保存.有朋友推荐说可以使Ashampoo PDF与悦书PDF阅读器进行本地阅读批注,再分享给朋友.胖胖老师赶紧下载软件尝试PDF批注保存功能,看看究竟这样 ...

  5. ofdrw ofd转pdf批注痕迹丢失或显示错误

    正常的ofd文件: 使用ofwrw转pdf后,发现签批痕迹丢失.如下: 经过排查发现是ofdrw版本比较低(1.17.6),升级到最新版本1.7.16. <dependency><g ...

  6. 中批注转成pdf看不到_超实用的PDF在线转换器,你绝对用的到~

    PDF 是我们工作中常用的文档形式,有时候需要对它进行转换或者编辑等工作. 给大家分享一款界面简洁,操作简单的一站式 PDF 工具:LightPDF.LightPDF 是一款线上 PDF 转换器与编辑 ...

  7. go语言实现将word文件转成pdf_超实用的PDF在线转换器,你绝对用的到~

    PDF 是我们工作中常用的文档形式,有时候需要对它进行转换或者编辑等工作. 给大家分享一款界面简洁,操作简单的一站式 PDF 工具:LightPDF.LightPDF 是一款线上 PDF 转换器与编辑 ...

  8. pdf导入ps颜色太浅_PDF 文件编辑转换难?或许你需要一个扫描全能王!

    手机上存了各种资料,想把所有 PDF 文件统一存储.管理? 手机打开 PDF 文件时,阅读难?批注难?分享难? 想编辑/调整 PDF 页面,装了一堆杂七杂八的 APP 效果仍然不理想? PDF,素来以 ...

  9. PDF Reader Pro for mac(全能pdf阅读器)

    PDF Reader Pro 版该软件支持PDF阅读,编辑,注释,创建/填写表格,转换,创建,OCR和签署PDF文件等,满足您的所有PDF文档需求. PDF Reader Pro for mac版软件 ...

最新文章

  1. mysql查询正在执行的存储过程,[转]ms sql server 存储过程,查看正在执行的sql语句...
  2. 话里话外:ERP与PDM、MES的关系区别是什么
  3. django-模板文件加载顺序
  4. wordpress文章页饮用php文件,wordpress主题的文章和页面如何运行php代码?
  5. 首届国际数字科技节启动仪式暨主办单位战略合作签约仪式在京举行
  6. Spring AOP实现原理
  7. 【使用Markdown自动生成目录的几种方法】
  8. 复制粘贴到word文档中的表格超出页面该怎么办
  9. vuefilters过滤器的使用,给金钱价格加上符号单位
  10. 服务器上没有空闲位置星露谷,星露谷物语 献祭全房间收集攻略(上)
  11. 嵌入式视频处理考虑(二)
  12. 酷炫暗黑个人主页简历HTML5模板
  13. 【Java数据结构与算法】Java如何实现环形队列
  14. 微信公众号数据2019_2019年微信公众号文章数据报告
  15. 微信小程序 java校友录交流系统springboot
  16. C语言课程设计-满分作业
  17. Keil5添加STM32芯片包
  18. 物联网大数据存储利器IoTDB介绍
  19. PHP跌出前十,Python依然霸占榜首,C#有望摘得年度编程语言 TIOBE 12 月编程语言排行榜
  20. python飞书到期提醒

热门文章

  1. excel 自动填充序号
  2. 骁龙660_骁龙660相当于苹果的哪款处理器?你知道吗
  3. 全国税收调查系统服务器的url地址,天津市电子税务局税收统计调查数据采集操作流程说明...
  4. 微信抢红包(一)界面修改
  5. 火狐女CEO访谈记要
  6. 基于STM32的半导体制冷片控制系统设计
  7. ubuntu16.04安装nvidia geforce gtx1080ti显卡驱动和cuda10.0用来运行gromacs-gpu
  8. C++11 lambda表达式与函数对象
  9. Redis禁用Config命令后SpringBoot启动报错:ERR config is disabled command
  10. centos7 生成ssl证书,搭建https地址