【vue】vue项目中实现pdf预览功能

我用的方法是window.open(),所以前提得有一个后端返回的pdf文件路径,放到地址栏可以直接预览,而不是直接下载下来的。
实现方式如下:

<template>
	<span slot="action" slot-scope="text, record">
		<a @click="onPreview(record)">查看</a>
	</span>
</template>
<script>
	export default {
		methods:{
			// 预览
			onPreview(record) {
				// record.videos 就是后端返回的线上文件地址
      			window.open(record.videos)
    		}
		}
	}
</script>

最后的效果如下:
在这里插入图片描述
说明:pc端实现pdf预览方式蛮多的,也可以使用vue-pdf插件,也可以用<object :data="url"></object>,但需要用一个对话框组件去展示

要在vue3项目实现pdf在线预览下载功能,可以使用pdf.js库。以下是基本的实现步骤: 1. 安装pdf.js库:可以使用npm安装,命令为npm install pdfjs-dist。 2. 引入pdf.js库:在需要使用的组件引入pdf.js库,可以使用import语法。 3. 创建canvas元素:使用canvas元素来渲染pdf文件,需要在组件创建一个canvas元素。 4. 加载pdf文件:使用pdf.js库提供的方法加载pdf文件,可以使用fetch或者axios等方式获取pdf文件。 5. 渲染pdf文件:使用pdf.js库提供的方法将pdf文件渲染到canvas元素。 6. 实现下载功能:使用a标签的download属性或者使用FileSaver.js等库实现pdf文件下载功能。 以下是一个简单的示例代码: ``` <template> <div> <canvas ref="pdfCanvas"></canvas> <button @click="downloadPdf">下载</button> </div> </template> <script> import pdfjs from 'pdfjs-dist' import { saveAs } from 'file-saver' export default { data() { return { pdfUrl: 'http://example.com/example.pdf', pdfDoc: null, pdfPage: null } }, mounted() { this.loadPdf() }, methods: { async loadPdf() { try { const pdfData = await fetch(this.pdfUrl).then(res => res.arrayBuffer()) this.pdfDoc = await pdfjs.getDocument({ data: pdfData }).promise this.pdfPage = await this.pdfDoc.getPage(1) this.renderPdf() } catch (error) { console.error(error) } }, async renderPdf() { try { const canvas = this.$refs.pdfCanvas const context = canvas.getContext('2d') const viewport = this.pdfPage.getViewport({ scale: 1 }) canvas.width = viewport.width canvas.height = viewport.height await this.pdfPage.render({ canvasContext: context, viewport }).promise } catch (error) { console.error(error) } }, downloadPdf() { const blob = new Blob([this.pdfDoc], { type: 'application/pdf' }) saveAs(blob, 'example.pdf') } } } </script> ``` 以上代码实现pdf文件的加载和渲染,以及pdf文件的下载功能。需要注意的是,pdf.js库的使用可能会比较复杂,可以参考pdf.js官方文档进行详细了解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值