最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Vue3+TypeScript實現(xiàn)PDF預(yù)覽組件

 更新時間:2024年04月23日 16:22:31   作者:下雨會打傘的前端  
這篇文章主要為大家詳細介紹了如何基于Vue3+TypeScript實現(xiàn)PDF預(yù)覽組件,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

簡介

在現(xiàn)代的 Web 應(yīng)用中,預(yù)覽 PDF 文件是一個常見需求。本文介紹了一個基于 Vue3 和 TypeScript 的 PDF 預(yù)覽組件,該組件支持分頁預(yù)覽、打印和下載功能。

技術(shù)棧

  • Vue3
  • TypeScript
  • Element Plus
  • unocss
  • vue-pdf-embed

功能特點

  • 分頁預(yù)覽: 支持在不同的 PDF 頁面之間進行切換。
  • 打印: 提供直接在瀏覽器中打印 PDF 的功能。
  • 下載: 用戶可以下載整個 PDF 文檔。
  • 顯示所有頁: 提供一個選項,用戶可以選擇查看所有頁面。

組件代碼

以下是組件的核心代碼:

<script setup lang="ts">
import { ref } from "vue";
import VuePdfEmbed from "vue-pdf-embed";

const pdfUrl = "https://raw.githubusercontent.com/mozilla/pdf.js/ba2edeae/web/compressed.tracemonkey-pldi-09.pdf";

const dialogVisible = ref(false);
const loading = ref(false);
const pdfRef = ref();
const source = ref("");
const currentPage = ref<number | undefined>(1);
const pageCount = ref(1);
const showAllPages = ref(false);

const open = (url: string = pdfUrl) => {
	source.value = url;
	dialogVisible.value = true;
	loading.value = true;
};

const documentRender = () => {
	loading.value = false;
	pageCount.value = pdfRef.value.doc.numPages;
};

const showAllPagesChange = () => {
	currentPage.value = showAllPages.value ? undefined : 1;
};

const handleDownload = () => {
	pdfRef.value.download();
};

const handlePrint = () => {
	// 如果在打印時,打印頁面是本身的兩倍,在打印配置 頁面 設(shè)置 僅限頁碼為奇數(shù)的頁面 即可
	pdfRef.value.print();
};

defineExpose({
	open
});
</script>

<template>
	<div>
		<el-dialog v-model="dialogVisible" title="預(yù)覽" width="80%" align-center destroy-on-close>
			<div flex="~ justify-between items-center">
				<div>
					<el-pagination
						v-if="!showAllPages"
						v-model:current-page="currentPage"
						layout="prev, pager, next"
						:page-size="1"
						:total="pageCount"
						hide-on-single-page
					/>
					<div v-else>共{{ pageCount }}頁</div>
				</div>
				<div flex="~ items-center">
					<el-checkbox v-model="showAllPages" @change="showAllPagesChange">展示所有</el-checkbox>
					<el-tooltip effect="dark" content="下載">
						<SvgIcon
							ml-2
							color="#000"
							cursor-pointer
							@click="handleDownload"
							:icon-style="{ width: '20px', height: '20px' }"
							name="download"
						/>
					</el-tooltip>
					<el-tooltip effect="dark" content="打印">
						<SvgIcon
							ml-2
							color="#000"
							cursor-pointer
							@click="handlePrint"
							:icon-style="{ width: '20px', height: '20px' }"
							name="printing"
						/>
					</el-tooltip>
				</div>
			</div>
			<el-scrollbar mt-3 height="75vh" v-loading="loading">
				<vue-pdf-embed ref="pdfRef" container overflow-auto :source="source" :page="currentPage" @rendered="documentRender" />
			</el-scrollbar>
		</el-dialog>
	</div>
</template>

<style lang="scss" scoped></style>

總結(jié)

通過組合 Vue3、TypeScript 和其他現(xiàn)代前端技術(shù),我們創(chuàng)建了一個功能豐富的 PDF 預(yù)覽組件。這個組件提供了用戶友好的分頁預(yù)覽、打印和下載功能,為開發(fā)者在 Web 應(yīng)用中集成 PDF 預(yù)覽提供了便捷的解決方案。

到此這篇關(guān)于Vue3+TypeScript實現(xiàn)PDF預(yù)覽組件的文章就介紹到這了,更多相關(guān)Vue3 TypeScript PDF預(yù)覽內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • vue elementUi+sortable.js實現(xiàn)嵌套表格拖拽問題

    vue elementUi+sortable.js實現(xiàn)嵌套表格拖拽問題

    這篇文章主要介紹了vue elementUi+sortable.js實現(xiàn)嵌套表格拖拽問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • vue中keep-alive內(nèi)置組件緩存的實例代碼

    vue中keep-alive內(nèi)置組件緩存的實例代碼

    這篇文章主要介紹了vue中的keep-alive內(nèi)置組件緩存,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-04-04
  • 淺析Vue3如何實現(xiàn)頁面訪問攔截

    淺析Vue3如何實現(xiàn)頁面訪問攔截

    在Vue3中,頁面訪問攔截(Navigation?Guards)是一種常見的路由控制機制,那么Vue3具體是如何實現(xiàn)這一功能的呢,下面就跟隨小編一起來學(xué)習(xí)一下吧
    2024-03-03
  • vue-cli中的webpack配置詳解

    vue-cli中的webpack配置詳解

    本篇文章主要介紹了vue-cli中的webpack配置詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • 在Vue3中實現(xiàn)拖拽文件上傳功能的過程詳解

    在Vue3中實現(xiàn)拖拽文件上傳功能的過程詳解

    文件上傳是我們在開發(fā)Web應(yīng)用時經(jīng)常遇到的功能之一,為了提升用戶體驗,我們可以利用HTML5的拖放API來實現(xiàn)拖拽文件上傳的功能,本文將介紹如何在Vue3中實現(xiàn)這一功能,文中有詳細的代碼示例供大家參考,需要的朋友可以參考下
    2023-12-12
  • vue+elementUI封裝一個根據(jù)后端變化的動態(tài)table(完整代碼)

    vue+elementUI封裝一個根據(jù)后端變化的動態(tài)table(完整代碼)

    這篇文章主要介紹了vue+elementUI,封裝一個根據(jù)后端變化的動態(tài)table,實現(xiàn)了自動生成和插槽兩個方式,主要把el-table 和el-pagination封裝在一起,結(jié)合示例代碼給大家介紹的非常詳細,需要的朋友可以參考下
    2022-08-08
  • Vue3中Vite和Vue-cli的特點與區(qū)別詳解

    Vue3中Vite和Vue-cli的特點與區(qū)別詳解

    vue-cli是Vue早期推出的一款腳手架,使用webpack創(chuàng)建Vue項目,可以選擇安裝需要的各種插件,比如Vuex、VueRouter,下面這篇文章主要給大家介紹了關(guān)于Vue3中Vite和Vue-cli的特點與區(qū)別的相關(guān)資料,需要的朋友可以參考下
    2022-12-12
  • Vue中使用matomo進行訪問流量統(tǒng)計的實現(xiàn)

    Vue中使用matomo進行訪問流量統(tǒng)計的實現(xiàn)

    這篇文章主要介紹了Vue中使用matomo進行訪問流量統(tǒng)計的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • vue+element使用動態(tài)加載路由方式實現(xiàn)三級菜單頁面顯示的操作

    vue+element使用動態(tài)加載路由方式實現(xiàn)三級菜單頁面顯示的操作

    這篇文章主要介紹了vue+element使用動態(tài)加載路由方式實現(xiàn)三級菜單頁面顯示的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08
  • vue的三種圖片引入方式代碼實例

    vue的三種圖片引入方式代碼實例

    這篇文章主要介紹了vue的三種圖片引入方式代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-11-11

最新評論

金山区| 剑阁县| 伊吾县| 思茅市| 永城市| 科技| 台中县| 大洼县| 兰坪| 渝中区| 蓬安县| 双柏县| 伊春市| 唐河县| 武鸣县| 南通市| 卫辉市| 鄂托克前旗| 沿河| 浦东新区| 政和县| 咸宁市| 玉环县| 望城县| 襄垣县| 彭州市| 南平市| 大渡口区| 宜城市| 漾濞| 揭东县| 镇沅| 禹城市| 郓城县| 长阳| 南召县| 沐川县| 弥渡县| 麟游县| 天气| 囊谦县|