美文网首页
【vue学习】整合pdf.js

【vue学习】整合pdf.js

作者: 前端菜篮子 | 来源:发表于2020-05-23 17:39 被阅读0次

方式1:将PDF文件渲染成Canvas

<template>
    <div class="canvas-container">
        <canvas ref="myCanvas" class="pdf-container">
        </canvas>
    </div> 
</template>
<script>
import pdfJS from 'pdfjs-dist'
pdfJS.GlobalWorkerOptions.workerSrc = 'pdfjs-dist/build/pdf.worker.js';
export default {
    name:'pdfJs',
    data() {
        return {
            loadFinished:false
        }
    },
    methods: {
        //预览pdf
        previewPdfByUrl(url,scale) {
            pdfJS.getDocument({
                url
            }).promise.then((pdf) => {
                this.loadFinished = true
                let numPages = pdf.numPages
                let pageNumber = 1
                this.getPage(pdf, pageNumber, numPages,scale)
            })
        },
        //pdfData格式为:ArrayBuffer
        previewPdfByData(pdfData,scale) {
            // 引入pdf.js的字体(这里我没起效)
            let CMAP_URL = 'https://unpkg.com/pdfjs-dist@2.0.943/cmaps/'
            //读取base64的pdf流文件
            pdfJS.getDocument({
                data: pdfData, // PDF base64编码
                cMapUrl: CMAP_URL,
                cMapPacked: true
            }).promise.then((pdf) => {
                this.loadFinished = true
                let numPages = pdf.numPages
                let pageNumber = 1
                this.getPage(pdf, pageNumber, numPages,scale)
            })
        },
        getPage(pdf, pageNumber, numPages, scale=1) {
            let _this = this
            pdf.getPage(pageNumber).then((page) => {
                // 获取DOM中为预览PDF准备好的canvasDOM对象
                let canvas = _this.$refs.myCanvas
                let viewport = page.getViewport({scale})
                canvas.height = viewport.height
                canvas.width = viewport.width

                let ctx = canvas.getContext('2d')
                let renderContext = {
                    canvasContext: ctx,
                    viewport: viewport
                }
                /**注意这里,是promise.then
                 原先是直接 .then(没有promise,则报过期的api)*/
                page.render(renderContext).promise.then(() => {
                    pageNumber += 1
                    if (pageNumber <= numPages) {
                        _this.getPage(pdf, pageNumber, numPages)
                    }
                })
            })
        },
        //blob转arrayBuffer
        blob2Array(blob) {
            var reader = new FileReader()
            reader.readAsArrayBuffer(blob)
            reader.onload = function (e) {
                return e.target.result
            }
        },
        
    },
    mounted() {
        this.$nextTick(() => {
            //通过请求等方式获取到data
            let pdfData = "" 
            this.previewPdfByData(pdfData)
        })
    }
}
</script>

<style lang="scss" scoped>

    .pdf-container {
        width: 750px;
    }
    .canvas-container {
        border: 1px dashed black;
        position: relative;
    }

</style>

方式2:viewer.html

1.到官网下载包v1.10.88/pdfjs-1.10.88-dist.zip

  1. 默认viewer.html打开的pdf路径配置在viewer.js如下:
var DEFAULT_URL = 'compressed.tracemonkey-pldi-09.pdf' 
  1. 想要动态打开自己的pdf可以对应这块做修改

  2. 具体改法可参照使用pdfjs提供的viewer.html展示pdf文件流及其他方案

相关文章

  • 【vue学习】整合pdf.js

    方式1:将PDF文件渲染成Canvas 方式2:viewer.html 1.到官网下载包v1.10.88/pdfj...

  • vue-pdf.js 在线预览问题

    最近修改公司vue项目中使用pdf.js来实现在线预览上传的各类文件.由于使用pdf.js在预览时是直接在标签内将...

  • vue 日常使用

    一. vue 使用 pdf 插件 使用Vue Cli生成项目 下载pdf.js 解压下载后的文件,将文件夹里面的b...

  • 【vue学习】整合Lodop

    前端实现自动打印 批量打印 vue中使用lodop调用标签打印机 利用lodop打印控件轻松实现批量打印 本文主要...

  • 灵动云商node版本启动

    任务 整合vue:如果使用lean up就不好vue-cli,应该是双向开弓,再代理整合 代理 或许我可以从vue...

  • vue 使用pdf.js

    到官网下载 pdf.js 插件并解压 (地址: http://mozilla.github.io/pdf.js/...

  • vue pdf.js 使用

    官网下载稳定版本 放进项目的静态资源文件staticimage.png iframe 引入文件 3.路径拼接 坑:...

  • Vue整合openlayer学习一

    效果图: 1、首先在Vue项目中安装openlayer: 2、在页面中使用 除了显示地图外,还可以在地图上设置图标...

  • vue中使用pdf.js操作步骤

    [js学习笔记]PDF.js专题[https://blog.csdn.net/xiangcns/article/d...

  • VUE pdf.js 打开 pdf流文件

    pdf.js插件官网[http://mozilla.github.io/pdf.js/getting_starte...

网友评论

      本文标题:【vue学习】整合pdf.js

      本文链接:https://www.haomeiwen.com/subject/wxjkahtx.html