1. 前言
- 虽然我自己找工作的时候没有问到此问题,但是有些道友私下wei我了,每次解释比较麻烦,还是单独写篇文章吧
- 谁让前端啥都能干呢
2. 准备工作
- 主要框架vue3
- pdf第三方库:
PDF.js
是一个开源的 JavaScript 库,可以在网页上直接加载
和渲染
PDF 文件。
3.通过引入 PDF.js 库并使用其提供的 API,在 Vue 组件中实现 PDF 的预览功能- 安装依赖 注意 依赖名字
npm install pdfjs-dist
3. vue组件 ---预览
<template>
<div>
<div ref="pdfContainer"></div>
</div>
</template>
<script setup>
import { ref, onMounted } from 'vue';
import * as pdfjs from 'pdfjs-dist/build/pdf';
const pdfUrl = '/path/to/pdf.pdf';
const pdfContainer = ref(null);
onMounted(() => {
const pdfViewer = new pdfjs.PDFViewer({
container: pdfContainer.value,
});
pdfjs.getDocument(pdfUrl).promise.then((pdf) => {
pdfViewer.setDocument(pdf);
});
});
</script>
- 使用了
pdfjs-dist
库来加载和渲染 PDF 文件。
2.在 onMounted 钩子中,我们创建
了一个 PDFViewer实例
3.并将 PDF 文件渲染
到指定的容器
中
- 这只写了 PDF 文件的预览功能,你还可以根据需要对预览界面进行进一步的样式和交互优化。同时,确保将实际的 PDF 文件路径(pdfUrl)替换为你自己的路径
4. iframe 实现预览
- 使用 iframe 元素加载 PDF 文件。通过将 PDF 文件的 URL 设置为
iframe
的src
属性,可以在网页上嵌入 PDF 文件并实现预览功能。- 相关代码
<template>
<div>
<iframe ref="pdfViewer" :src="pdfUrl"></iframe>
</div>
</template>
<script setup>
import { ref } from 'vue';
const pdfUrl = '/path/to/pdf.pdf';
const pdfViewer = ref(null);
</script>
<style scoped>
iframe {
width: 100%;
height: 100%;
border: none;
}
</style>
- 使用 ref 来引用 iframe 元素,并将 PDF 文件的 URL 绑定到 iframe 的 src 属性上。
- 这样就可以在页面中嵌入 PDF 文件并实现预览功能。你可以根据需要调整 iframe 的样式和大小。
- 使用 iframe 预览 PDF 文件可能受到浏览器安全策略的限制,具体行为可能因浏览器而异。
5. 下载功能实现
- 前端下载其实都很方便的
使用 <a> 标签
- 最简单的方式是使用
<a>
标签来创建一个下载链接,- 将 PDF 文件的 URL 设置为该链接的 href 属性。
- 用户点击链接时,浏览器会自动下载 PDF 文件
<template>
<div>
<a :href="pdfUrl" download="filename.pdf">下载PDF</a>
</div>
</template>
<script setup>
import { ref } from 'vue';
const pdfUrl = '/path/to/pdf.pdf';
</script>
- 使用
<a>
标签创建一个下载链接,并将URL
绑定到href
属性上。- 通过设置
download
属性,可以指定下载的文件名
。- 用户
点击
链接时,浏览器会自动下载
指定的 PDF 文件。
- 确保将实际的 PDF 文件路径(
pdfUrl
)替换为你自己的路径,并根据需要自定义下载链接的样式。
使用 JavaScript 下载
- 如果你需要在用户执行某个操作后
触发
PDF 文件的下载
,可以使用 JavaScript 来实现文件下载功能。- 这可以通过创建临时的
Blob
对象和使用URL.createObjectURL()
方法来实现
<template>
<div>
<button @click="downloadPdf">下载PDF</button>
</div>
</template>
<script setup>
import { ref } from 'vue';
const pdfUrl = '/path/to/pdf.pdf';
const downloadPdf = () => {
const xhr = new XMLHttpRequest();
xhr.open('GET', pdfUrl, true);
xhr.responseType = 'blob';
xhr.onload = () => {
if (xhr.status === 200) {
const blob = new Blob([xhr.response], { type: 'application/pdf' });
const url = URL.createObjectURL(blob);
const link = document.createElement('a');
link.href = url;
link.download = 'filename.pdf';
link.click();
URL.revokeObjectURL(url);
}
};
xhr.send();
};
</script>
- 定义了
downloadPdf
方法,在用户点击按钮时触发该方法。- 方法内部使用
XMLHttpRequest
对象进行异步请求,获取 PDF 文件的Blob
数据。- 然后,通过创建 <a> 标签,将
Blob
对象的 URL 设置为链接
的 href 属性,- 再使用
click()
方法模拟点击下载
。
请注意,将实际的 PDF 文件路径(pdfUrl
)替换为你自己的路径,并根据需要自定义触发下载操作的方式和样式。
6. 服务端下载
- 前端通过调用后端接口来实现下载也是常用的方式
网友评论