vue-pdf只显示一页问题解决

文章讲述了如何使用Vue-PDF库在单页应用中动态加载并显示多页PDF,通过v-for循环实现每页独立的PDF组件,解决了默认只展示首页的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<template>
  <pdf src=""></pdf>
</template>
<script>
  import pdf from 'vue-pdf'
  exprot default {
    component: {
      pdf
    }
  }
</script>

这个时候,多页的PDF只会显示第一页,这时各位可以去查看一下vue-pdf的源码,我们可以发现,它的实现过程是将PDF按页绘制在canvas上的,其页码数oage默认值是1,展示第一页的canvas。所以我们主要使用两种方式处理。

解决方案:使用v-for循环加载所有页面

<template>
    <div>
        <pdf
            v-for="i in numPages"
            :key="i"
            :src="src"
            :page="i"
            style="display: inline-block; width: 25%"
        ></pdf>
    </div>
</template>
 
<script>
 
import pdf from 'vue-pdf'
 
var loadingTask = pdf.createLoadingTask('https://cdn.mozilla.net/pdfjs/tracemonkey.pdf');
 
export default {
    components: {
        pdf
    },
    data() {
        return {
            src: loadingTask,
            numPages: 1,
        }
    },
    mounted() {
 
        this.src.promise.then(pdf => {
 
            this.numPages = pdf.numPages;
        });
    }
}
 
</script>

### 实现 `vue-office-pdf` 插件默认显示 PDF 文件最后一页 为了使 `vue-office-pdf` 默认加载并展示 PDF 文档的最后一页,可以利用该组件提供的属性和方法来动态计算总页数,并设置初始页面为最后一页。 #### 方法一:通过监听事件获取总页数 可以在初始化时监听文档加载完成的事件,在此之后再设定当前页码等于总页数: ```javascript <template> <div id="app"> <!-- 使用 ref 给组件命名以便后续调用其内部 API --> <pdf-viewer :src="url" @loadedmetadata="onLoadedMetadata"></pdf-viewer> </div> </template> <script> export default { data() { return { url: 'path/to/your/document.pdf', totalPages: null, }; }, methods: { onLoadedMetadata(event) { const viewer = event.target; this.totalPages = viewer.numPages; // 设置当前页为最后一页 setTimeout(() => { viewer.currentPageNumber = this.totalPages; }, 0); } } }; </script> ``` 这种方法依赖于 `@loadedmetadata` 事件触发后的回调函数执行时机[^1]。 #### 方法二:直接操作实例对象 如果希望更简洁地实现相同功能而不必等待整个元数据加载完毕,则可以直接访问已挂载组件实例上的相应属性来进行设置。这通常是在钩子函数内完成,比如 mounted 阶段: ```javascript <template> <div id="app"> <pdf-viewer ref="viewer" :src="url"></pdf-viewer> </div> </template> <script> export default { data() { return { url: 'path/to/your/document.pdf' }; }, mounted() { this.$nextTick(() => { let viewerInstance = this.$refs.viewer; if (viewerInstance && typeof viewerInstance.getNumPages === 'function') { viewerInstance.page = viewerInstance.getNumPages(); } else { console.error('Failed to get the total number of pages.'); } }); } }; </script> ``` 这里假设插件提供了 `getNumPages()` 这样的接口用于查询总页数;如果没有提供这样的API,则可能需要查阅具体使用的版本是否有其他方式获得这个信息[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值