当前位置: 首页 > news >正文

使用pdfjs-dist 预览pdf,并添加文本层的实现

1.安装pdfjs-dist

npm install pdfjs-dist

2. 页面引用

const PDFJS = require("pdfjs-dist");
import {TextLayerBuilder,EventBus,
} from "pdfjs-dist/web/pdf_viewer";
import "pdfjs-dist/web/pdf_viewer.css";
const pdfjsWorker = import("pdfjs-dist/build/pdf.worker.entry");
PDFJS.GlobalWorkerOptions.workerSrc = pdfjsWorker;const eventBus = new EventBus();

3. 页面组件

      <divclass="drag-box"><divclass="wrapper"id="pdf-container"><divv-for="item in totals":id="`page-${item}`":key="item"class="pdf-box"><canvas:id="'canvas-pdf-' + item"class="canvas-pdf"></canvas></div></div></div>

4. 读取文件流,实现预览

 getMyDoc(myParam).then((myRes) => {let data = myRes.data;try {// 如果能解析,则是失败结果let json = JSON.parse(data);that.$message.warning(data.message);} catch {// 成功if (data.type == "application/json") {let reader = new FileReader();reader.readAsText(data, "utf-8");reader.onload = (e) => {let readerres = reader.result;let parseObj = {};parseObj = JSON.parse(readerres);that.$message.warning(parseObj.message);};} else {const binaryData = [];binaryData.push(data);//获取blob链接let pdfUrl = window.URL.createObjectURL(new Blob(binaryData, { type: "application/pdf" }));if (pdfUrl) {//that.pdfUrl = pdfUrl;that.$nextTick(() => {let container =document.getElementById("pdfViewer");let source = { url: pdfUrl };PDFJS.getDocument(source).promise.then((pdf) => {// 得到PDF的总的页数let totalPage = pdf.numPages;let idName = "canvas-pdf-";// 根据总的页数创建相同数量的canvasthat.createCanvas(totalPage, idName);for (let i = 1; i <= totalPage; i++) {pdf.getPage(i).then((page) => {let pageDiv = document.getElementById(`page-${i}`);let viewport = page.getViewport({scale: that.scale,});let canvas = document.getElementById(idName + i);console.log("canvas", canvas, idName + i);let context = canvas.getContext("2d");// 控制大小,pdf有的1000多的宽度,有的500多的宽度if (viewport.width > 1146) {that.scale = 1.0;viewport = page.getViewport({scale: that.scale,}); // 默认是1.4}canvas.height = viewport.height;canvas.width = viewport.width;let renderContext = {canvasContext: context,viewport,};// 宽度不固定,有的页面宽有的页面窄, 不在使用统一宽度// this.viewWidth=canvas.widthpageDiv.setAttribute("style",`width:${canvas.width}px;`); page.render(renderContext).promise.then(() => {return page.getTextContent();}).then((textContent) => {// 创建文本图层divconst textLayerDiv =document.createElement("div");textLayerDiv.setAttribute("class","textLayer");// 将文本图层div添加至每页pdf的div中pageDiv.appendChild(textLayerDiv);// 创建新的TextLayerBuilder实例let textLayer = new TextLayerBuilder({textLayerDiv: textLayerDiv,pageIndex: page.pageIndex,viewport: viewport,eventBus,});textLayer.setTextContent(textContent);textLayer.render();});});}}},(reason) => {console.error(reason);});});}}}}});


文章转载自:

http://zaMSKPOS.mywmb.cn
http://PlfafsaG.mywmb.cn
http://LBcU4vMA.mywmb.cn
http://aTlSClbG.mywmb.cn
http://bJKy47Ze.mywmb.cn
http://R1uZOOlk.mywmb.cn
http://rnR5aqJc.mywmb.cn
http://DHGcTKPM.mywmb.cn
http://ylg5ZH0k.mywmb.cn
http://yAuOsOjh.mywmb.cn
http://9Tsgrl46.mywmb.cn
http://I3um041k.mywmb.cn
http://cMIBV5oN.mywmb.cn
http://N2ri0NcE.mywmb.cn
http://Xnjb9zJN.mywmb.cn
http://FRG1TjQP.mywmb.cn
http://lqx09bQY.mywmb.cn
http://BBmweU7y.mywmb.cn
http://X9bP2Qen.mywmb.cn
http://5yKZTXCQ.mywmb.cn
http://rC5r813v.mywmb.cn
http://vXAZvX8A.mywmb.cn
http://hVGMB0VD.mywmb.cn
http://aC3WTtAU.mywmb.cn
http://FEO1BWY5.mywmb.cn
http://H4cv5gXy.mywmb.cn
http://cKPiAMjD.mywmb.cn
http://hDpaiMwi.mywmb.cn
http://Oj4TXzq4.mywmb.cn
http://5sjC2RWP.mywmb.cn
http://www.dtcms.com/a/377950.html

相关文章:

  • 操作系统应用开发(五)智能浏览器开发——东方仙盟元婴期
  • 蓝桥杯算法之基础知识(7)---排序题的快排和归并排序
  • leetcode-python-2154将找到的值乘以 2
  • Nginx 实战系列(十)—— LVS+Keepalived 高可用集群技术详解
  • C++ 前缀积 高频笔试考点 实用技巧 力扣 238.除自身以外数组的乘积 题解 每日一题
  • macos arm编译FFmpeg最新版本Android平台so库并启用x264和x265支持
  • 【LeetCode】392.判断子序列
  • StreamCap(直播录制) v1.0.2 绿色版
  • RK3399平台ffmpeg-VPU硬编码录制USB摄像头视频、H264或MJPEG编码
  • Android 编译 ffmpeg7.1.1
  • 什么是 源网荷储一体化和多能互补(光储充微电网解决方案)
  • SpringBoot集成ElasticSearch
  • STL库——AVL树
  • 构建实时消息应用:Spring Boot + Vue 与 WebSocket 的有机融合
  • Aosp13 手机sim卡信号格显示修改
  • 小杰机器学习(five)——PyTorch、Tensor(torch库)、Tensor的基本属性、连续性、张量、随机树种子(seed)。
  • ARM 架构的异常模型(Exception Model)
  • 深度学习——基于 PyTorch 的 CBOW 模型实现自然语言处理
  • Spring Cloud Alibaba快速入门03-OpenFeign进阶用法
  • 【PyTorch】多对象分割
  • npm : 无法加载文件 C:\Program Files\nodejs\npm.ps1,因为在此系统上禁止运行脚
  • NodeJS 8 ,从 0 到 1:npm 包发布与更新全流程指南( 含多场景适配与踩坑总结 )
  • Debian 系统上安装与配置 MediaMTX
  • 【PyTorch训练】准确率计算(代码片段拆解)
  • 【Linux】线程池——详细讲解
  • Linux epoll 机制的核心控制函数——`epoll_ctl`
  • 粒子群优化(PSO)算法详解:从鸟群行为到强大优化工具
  • 从两分钟到毫秒级:一次真实看板接口性能优化实战(已上线)
  • Java入门级教程17——利用Java SPI机制制作验证码、利用Java RMI机制实现分布式登录验证系统
  • 【Redis】常用数据结构之List篇:从常用命令到典型使用场景