亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

簡(jiǎn)介

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

技術(shù)棧

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

功能特點(diǎn)

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

組件代碼

以下是組件的核心代碼:

<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í),打印頁(yè)面是本身的兩倍,在打印配置 頁(yè)面 設(shè)置 僅限頁(yè)碼為奇數(shù)的頁(yè)面 即可
	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 }}頁(yè)</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é)

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

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

相關(guān)文章

  • vue項(xiàng)目中封裝echarts的優(yōu)雅方式分享

    vue項(xiàng)目中封裝echarts的優(yōu)雅方式分享

    在實(shí)際項(xiàng)目開發(fā)中,我們會(huì)經(jīng)常與圖表打交道,比如?訂單數(shù)量表、商品銷量表、會(huì)員數(shù)量表等等,它可能是以折線圖、柱狀圖、餅狀圖等等的方式來(lái)展現(xiàn),下面這篇文章主要給大家介紹了關(guān)于vue項(xiàng)目中封裝echarts的優(yōu)雅方式的相關(guān)資料,需要的朋友可以參考下
    2022-03-03
  • vue實(shí)現(xiàn)滑動(dòng)超出指定距離回頂部功能

    vue實(shí)現(xiàn)滑動(dòng)超出指定距離回頂部功能

    這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)滑動(dòng)超出指定距離回頂部功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • vue?v-for中key的原理詳析

    vue?v-for中key的原理詳析

    key屬性可以用來(lái)提升v-for渲染的效率,vue中使用v-for渲染數(shù)據(jù)的時(shí)候,并不會(huì)去改變?cè)械脑睾蛿?shù)據(jù),下面這篇文章主要給大家介紹了關(guān)于vue?v-for中key原理的相關(guān)資料,需要的朋友可以參考下
    2022-04-04
  • vue實(shí)現(xiàn)購(gòu)物車全部功能的簡(jiǎn)單方法

    vue實(shí)現(xiàn)購(gòu)物車全部功能的簡(jiǎn)單方法

    vue是前端輕量級(jí)MVVM框架,入門門檻相對(duì)較低,今天用Vue做一個(gè)購(gòu)物車實(shí)例,所以下面這篇文章主要給大家介紹了關(guān)于vue實(shí)現(xiàn)購(gòu)物車全部功能的簡(jiǎn)單方法,需要的朋友可以參考下
    2021-07-07
  • vue數(shù)據(jù)傳遞--我有特殊的實(shí)現(xiàn)技巧

    vue數(shù)據(jù)傳遞--我有特殊的實(shí)現(xiàn)技巧

    這篇文章主要介紹了vue數(shù)據(jù)傳遞一些特殊梳理技巧,需要的朋友可以參考下
    2018-03-03
  • 基于iview-admin實(shí)現(xiàn)動(dòng)態(tài)路由的示例代碼

    基于iview-admin實(shí)現(xiàn)動(dòng)態(tài)路由的示例代碼

    這篇文章主要介紹了基于iview-admin實(shí)現(xiàn)動(dòng)態(tài)路由的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • Vue實(shí)現(xiàn)可移動(dòng)水平時(shí)間軸

    Vue實(shí)現(xiàn)可移動(dòng)水平時(shí)間軸

    這篇文章主要為大家詳細(xì)介紹了Vue實(shí)現(xiàn)可移動(dòng)水平時(shí)間軸,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-06-06
  • 使用vue自定義如何實(shí)現(xiàn)Tree組件和拖拽功能

    使用vue自定義如何實(shí)現(xiàn)Tree組件和拖拽功能

    這篇文章主要介紹了使用vue自定義如何實(shí)現(xiàn)Tree組件和拖拽功能,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • vue使用自定義指令實(shí)現(xiàn)一鍵復(fù)制功能

    vue使用自定義指令實(shí)現(xiàn)一鍵復(fù)制功能

    在Vue中,通過(guò)自定義指令v-copy和document.execCommand方法,可以實(shí)現(xiàn)點(diǎn)擊按鈕復(fù)制內(nèi)容到剪貼板的功能,適用于處理長(zhǎng)文本或多行文本的復(fù)制需求,而readonly屬性可避免內(nèi)容被修改和移動(dòng)設(shè)備上的虛擬鍵盤干擾,感興趣的朋友一起看看吧
    2024-09-09
  • 解決vue項(xiàng)目中type=”file“ change事件只執(zhí)行一次的問(wèn)題

    解決vue項(xiàng)目中type=”file“ change事件只執(zhí)行一次的問(wèn)題

    這篇文章主要介紹了vue項(xiàng)目中解決type=”file“ change事件只執(zhí)行一次的問(wèn)題,本文給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2018-05-05

最新評(píng)論