首页 > 其他分享 >vue中PDF文件转图片方式

vue中PDF文件转图片方式

时间:2024-03-05 17:45:42浏览次数:19  
标签:文件 canvas vue const pdf PDF pdfjs viewport 图片

1、在vue中安装依赖  pdfjs-dist   

2、在需要引用的文件中添加

  import * as pdfjs from 'pdfjs-dist'
  import * as pdfjsWorker from 'pdfjs-dist/build/pdf.worker.entry'
  pdfjs.GlobalWorkerOptions.workerSrc = pdfjsWorker

3、编写需要转换的方法

<div v-for="(item, i) in imgFiles" :key="i" style="width:100vw;margin-top:10px;">
              <canvas :id="`pdf_canvas_${item}`" style="border: 1px solid #eeeeee;float:left;"></canvas>
          </div>
      // 地址转文件   url为需要转化的文件路径
      getFileFromUrl(url) {
        const that = this;
        fetch(url)
        .then((response) => response.blob()) // 返回Blob对象表示文件内容
        .then((blob) => {
            const file = new File([blob], 'filename.pdf'); // 创建File对象并指定文件名
            // 处理文件逻辑...
            console.log('已成功将URL转换为文件!', file);
            that.handlePdf(file)
        })
        .catch((error) => {
            console.error('转换失败:', error);
        });
      },
      handlePdf(file) {
            let that = this;
            var reader = new FileReader();
            reader.readAsDataURL(file); //将文件读取为 DataURL
            reader.onload = function () { //文件读取成功完成时触发
                const loadingTask = pdfjs.getDocument(reader.result)
                loadingTask.promise.then((pdf) => {
                    var pageNum = pdf.numPages;
                    console.log("页数:" + pageNum);
                    //准备图片
                    for (let i = 1; i <= pageNum; i++) {
                        let one = i;
                        that.imgFiles.push(one);
                    }
                    //处理
                    for (let i = 1; i <= pageNum; i++) {
                        pdf.getPage(i).then((page) => {
                            const canvas = document.getElementById('pdf_canvas_' + i);
                            const ctx = canvas.getContext('2d')
                            const viewport = page.getViewport({ scale: 1 })
                            canvas.height = viewport.height;
                            canvas.width = viewport.width;
                            const destWidth = viewport.width/1.5;
                            canvas.style.width = destWidth + 'px';
                            canvas.style.height = destWidth * (viewport.height / viewport.width) + 'px';
                            page.render({
                                canvasContext: ctx,
                                viewport,
                            })
                        })
                    }
                })
            }
        },

 

标签:文件,canvas,vue,const,pdf,PDF,pdfjs,viewport,图片
From: https://www.cnblogs.com/WEB_zhumeng/p/18054546

相关文章

  • 详细vite创建vue3项目(vue3+vue-router+ts+vite+element-plus+pinia)
    详细vite创建vue3项目(vue3+vue-router+ts+vite+element-plus+pinia):https://blog.csdn.net/qq_44423029/article/details/126378199?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522170891147716800185818285%2522%252C%2522scm%2522%253A%252220140713.130102334..%2......
  • Vue学习笔记33-生命周期
    示例一: <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><title>引入生命周期</title>......
  • PDFBox-Android添加图片被遮挡
    使用pdfbox-android在已存在的pdf上面追加图片,需要先创建PDPageContentStream,在创建的时候需要注意设置模式为APPEND,并且将resetContext参数设置为truevalcs=PDPageContentStream(document,......
  • vue问题
    1.报错errorUnexpectedconsolestatementno-console百度得知是eslint校验问题处理方法:1)在代码中增加eslint忽略文件(貌似不生效)cat.eslintignorebuild/*.jssrc/assetspublicdistsrc/common2)在服务器中安装插件babel-plugin-transform-remove-consolenpmins......
  • 【HarmonyOS NEXT】解决Scan Kit生成二维码不支持添加logo图片
    ​ 【关键字】HarmonyOS、ScanKit、二维码、logo图片、生成二维码 1、写在前面HarmonyOS的ScanKit提供了码图生成的能力,具体的使用方式可以参考开发指南:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/scan-barcodegenerate-0000001714658685现在有个......
  • Vue学习笔记32--自定义指令--对象式
    Vue学习笔记32--自定义指令--对象式总结:1.autofocus属性,用于input自动获取焦点2.directives指令中this是指window3.vm中使用directives进行自定义指令,为局部指令4.全局指令和全局过滤器类似,应在vm之外使用directive进行声明使用自定义指令总结: 定......
  • vue的mixin和extend
    使用场景:mixin:通用逻辑共享:当多个组件需要共享相同的方法,数据和属性时,可以通过mixin实现extend:如果想基于现有组件创建一个新组件,并且新组件还能继承现有组件的数据,方法和属性时,可以通过extend实现,extend类似于class使用实例:mixin部分代码使用mixin当组件使用混入对象时,......
  • PHP处理上传图片出现旋转问题
    相关参考链接:图像生成和处理(可交换图像信息):https://www.php.net/manual/zh/book.exif.php一、EXIF方向参数Orientation简介:EXIFOrientation参数让你随便照像但都可以看到正确方向的照片而无需手动旋转(前提要图片浏览器支持,Windows自带的不支持)。这个参数在有的照......
  • C#实现图片对比
    前言虽然已经正式转JAVA了,但最近发现一个特别好的开源项目masuit,不仅提供很多简便的功能,还有图像的一些特殊操作功能。下面就实现一个简单图像对比。实现对比代码如下,实现一个可以对比翻转,旋转的图片。`usingMasuit.Tools.Media;usingSixLabors.ImageSharp;usingSystem......
  • 如何合并两个PDF
      不用安装其它合并工具,wpsoffice本身自带的PDF工具中就有PDF合并工具,且稳定好用。新建pdf, 选择PDf工具中的合并PDF即可,合并后将不需要的页面删除。 ......