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

【前端】Vue中实现pdf逐页转图片,图片再逐张提取文字

给定场景:后端无法实现pdf转文字,由前端实现“pdf先转图片再转文字”。

方法:
假设我们在< template>中有一个元素存放我们处理过的canvas集合

<div id="canvasIDpdfs" />

我们给定一个按钮,编写click函数,通过点击按钮触发pdf先转图片再转文字的功能

this.pdfdata()

在< script>里编写函数

pdfdata() {const url = pdf路径;if (url) {const that = this;const canvasID = document.getElementById('canvasIDpdfs');// 引入插件库PDFJSPDFJS.getDocument({url,httpHeaders: {token: that.$cookie.get('token'),},}).then((pdfDoc_) => {if (pdfDoc_) {// 清空canvascanvasID.innerHTML = '';// 清空富文本this.editor.txt.clear();// 赋值that.pdfDoc = pdfDoc_;// 别名const pdfDoc = pdfDoc_;// 逐页for (let i = 1; i <= pdfDoc.numPages; i++) {// 传入页码与画布that.renderPage(i, canvasID);}}}).catch((e) => {console.log(`获取pdf文件失败,${e} `);});}
},renderPage(num, canvasID) {// 使用PDFJS能力this.pdfDoc.getPage(num).then((page) => {// 所有画布容器const canvasList = canvasID;// 新画布const canvas = document.createElement('canvas');// 存新画布canvasList.appendChild(canvas);// 绘图const ctx = canvas.getContext('2d');// 缩放const viewport = page.getViewport(1.5);// 尺寸canvas.height = viewport.height;canvas.width = viewport.width;// 使用PDFJS能力const renderContext = {canvasContext: ctx,viewport,};// 使用PDFJS能力const renderTask = page.render(renderContext);renderTask.promise.then(() => {// 新画布已绘制完成const latestCanvas =document.getElementById('canvasIDpdfs').getElementsByTagName('canvas')[num - 1].toDataURL("image/jpeg");// 对其进行图片转文字axios({url: 图片转文字的服务API,method: 'post',headers: {'Content-Type': 'application/json',token: Cookies.get('token'),},data: {image: latestCanvas.split('data:image/jpeg;base64,')[1],},}).then((res) => {// 得到文字if (res.result&& res.result > 0) {res.result.forEach((m) => {// 自定义样式const style = '';// 文字添加到富文本this.editor.txt.append(`<p style="${style}">${m.words}</p>`);});}});});});
},
http://www.lryc.cn/news/2396164.html

相关文章:

  • 焦虑而烦躁的上午
  • Python使用
  • 分类预测 | Matlab实现CNN-LSTM-Attention高光谱数据分类
  • 【解决方案-RAGFlow】RAGFlow显示Task is queued、 Microsoft Visual C++ 14.0 or greater is required.
  • 爬虫到智能数据分析:Bright Data × Kimi 智能洞察亚马逊电商产品销售潜力
  • 高级前端工程师必备的 JS 设计模式入门教程,常用设计模式案例分享
  • unix/linux source 命令,其发展历程详细时间线、由来、历史背景
  • 2023年电赛C题——电感电容测量装置
  • pycharm打印时不换行,方便对比观察
  • 因泰立科技:镭眸T51激光雷达,打造智能门控新生态
  • Microsoft Fabric - 尝试一下Data Factory一些新的特性(2025年5月)
  • NodeJS全栈开发面试题讲解——P10微服务架构(Node.js + 多服务协作)
  • 【前端】javascript和Vue面试八股
  • WEB3——区块链留言板(留言上链),查看web3日志-入门项目推荐
  • 开源库免费API服务平台 ALLBEAPI
  • 【配置vscode默认终端为git bash】
  • Cloudflare
  • Cypress + TypeScript + Vue3
  • Oracle DG库控制文件IO错误导致宕机的应急处理
  • ​​技术深度解析:《鸿蒙5.0+:全场景能效的产业革命》​
  • Spring Boot启动慢?Redis缓存击穿?Kafka消费堆积?——Java后端常见问题排查实战
  • 深入解析 IP 代理:原理、应用场景与优化策略
  • 58、辣椒种植学习
  • 【SpringBoot】零基础全面解析SpringBoot配置文件
  • python:PyMOL 能处理 *.pdb 文件吗?
  • GNSS终端授时之四:高精度的PTP授时
  • Vim文本编辑器快捷键用法以及简单介绍
  • CppCon 2014 学习:C++ in Huge AAA Games
  • PHP与MYSQL结合中中的一些常用函数,HTTP协议定义,PHP进行文件编程,会话技术
  • MapReduce 分布式计算模型