VUE实现PDF在线阅读

使用Vue.js显示PDF文件
本文档展示了如何在Vue.js应用中安装和使用`vue-pdf`库来展示PDF文件。首先通过npm安装依赖,然后在HTML部分创建一个条件渲染的div,内含`pdf`组件,并设置其属性以绑定PDF源、当前页数和总页数。接着在JS部分,定义了数据结构和方法,包括获取PDF文件、改变页面和加载PDF时的处理。最后,提供了上一页和下一页的按钮以及页面信息的显示。

1、安装npm

npm install --save vue-pdf

2、HTML部分

<div v-if="dataForm.pdfUrl !== '' & dataForm.pdfUrl !== null & dataForm.pdfUrl !== undefined">
    <div class="pdf">
        <pdf :src="pdfOption.src"
        :page="pdfOption.currentPage"
        @num-pages="pdfOption.pageCount=$event"
        @page-loaded="pdfOption.currentPage=$event"
        @loaded="loadPdfHandler">
        </pdf>
    </div>
    <div class="text-center">
        <el-button @click="changePdfPage(0)" size="small" :disabled="pdfOption.currentPage == 1">上一页</el-button>
        <el-button @click="dialogVisible = false" size="small" disabled>单前第{{pdfOption.currentPage}}页,共{{pdfOption.pageCount}}页</el-button>
        <el-button @click="changePdfPage(1)" size="small" :disabled="pdfOption.currentPage==pdfOption.pageCount">下一页</el-button>
    </div>
</div>

3、JS部分

<script>
import pdf from 'vue-pdf'
export default {
    data () {
        return {
          // pdf 数据
          pdfOption: {
            currentPage: 0,
            pageCount: 0,
            fileType: 'pdf',
            src: ''
          }
        }
    },
    methods: {
        // 获取文章详细
        getInfo () {
          this.$http.get(`/zs/zscms/getArticleDetailByArticleId?id=${this.dataForm.id}`).then(({ data: res }) => {
            this.dataForm = {
              ...this.dataForm,
              ...res
            }
            this.pdfOption.src = res.pdfUrl
          }).catch(() => {})
        },
        // 改变PDF页码,val传过来区分上一页下一页的值,0上一页,1下一页
        changePdfPage (val) {
          if (val === 0 && this.pdfOption.currentPage > 1) {
            this.pdfOption.currentPage--
          }
          if (val === 1 && this.pdfOption.currentPage < this.pdfOption.pageCount) {
            this.pdfOption.currentPage++
          }
        },
        // pdf加载时
        loadPdfHandler (e) {
          this.pdfOption.currentPage = 1
        }
    },
    created () {
      if (this.$route.query.id === undefined) {
        this.$router.push({ path: '/index' })
      } else {
        this.dataForm.id = this.$route.query.id
        this.getInfo()
      }
      document.title = '文章详细'
  },
  components: {
     pdf
  }
}
</script>
Vue 3中实现PDF在线阅读,可借助第三方库,下面详细介绍使用`pdfjs-dist`库的方法。 #### 安装依赖 首先,需在项目里安装`pdfjs-dist`库,在终端执行以下命令: ```bash npm install pdfjs-dist ``` #### 创建PDF组件 在`src/components`目录下创建`PdfViewer.vue`组件,代码如下: ```vue <template> <div> <canvas ref="pdfCanvas"></canvas> </div> </template> <script setup> import { onMounted, ref } from 'vue'; import * as pdfjsLib from 'pdfjs-dist'; import pdfjsWorker from 'pdfjs-dist/build/pdf.worker.entry'; pdfjsLib.GlobalWorkerOptions.workerSrc = pdfjsWorker; const pdfCanvas = ref(null); const loadPDF = async () => { const pdfUrl = 'your_pdf_file.pdf'; // 替换为实际的PDF文件路径 const pdf = await pdfjsLib.getDocument(pdfUrl).promise; const page = await pdf.getPage(1); // 获取第一页 const viewport = page.getViewport({ scale: 1.0 }); const canvas = pdfCanvas.value; const context = canvas.getContext('2d'); canvas.height = viewport.height; canvas.width = viewport.width; const renderContext = { canvasContext: context, viewport: viewport }; await page.render(renderContext).promise; }; onMounted(() => { loadPDF(); }); </script> <style scoped> canvas { border: 1px solid #ccc; } </style> ``` #### 在页面中使用组件 在`src/App.vue`中使用`PdfViewer`组件: ```vue <template> <div id="app"> <PdfViewer /> </div> </template> <script setup> import PdfViewer from './components/PdfViewer.vue'; </script> <style> #app { font-family: Avenir, Helvetica, Arial, sans-serif; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; text-align: center; color: #2c3e50; margin-top: 60px; } </style> ``` ### 代码解释 - **安装依赖**:`pdfjs-dist`是Mozilla开发的PDF解析库,能在浏览器中渲染PDF文件。 - **创建组件**:在`PdfViewer.vue`组件里,利用`pdfjsLib.getDocument`方法加载PDF文件,再用`page.render`方法把指定页面渲染到`<canvas>`元素上。 - **使用组件**:在`App.vue`中引入并使用`PdfViewer`组件,从而在页面显示PDF文件。 ### 注意事项 - 要把`pdfUrl`替换成实际的PDF文件路径,可使用本地路径或远程URL。 -PDF文件较大,加载时间可能较长,可考虑添加加载提示。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值