vue3实现在element Dialog 对话框中预览pdf文件

最近有一个需求就是点击按钮在弹框中去预览pdf文件,于是发现了一个HTML中比较重要的标签:embed,前面说的需求就可以用这个标签来实现,一起来学习一下吧。
embed标签是HTML中的一个非常重要的标签,它可以在你的网页上插入各种类型的多媒体内容,例如交互式应用程序,PDF,Flash,音频和视频文件等。

下面是embed标签的一些主要属性:

  1. src:此属性定义要嵌入的资源的URL。
  2. type :此属性定义资源的MIME类型。MIME类型是一种识别数据类型的方式,如
    'image/jpeg'、'video/mpeg' 等。
  3. width 和 height:这些属性定义嵌入对象的尺寸,单位为像素。
  4. pluginspage:此属性指向能播放嵌入内容的插件的下载位置。

下面直接看具体应用吧,我是把它单独拎出页面写的,所以直接在需要用到的组件里引入,想要传什么值自行添加即可

javascript 复制代码
<template>
  <!-- 弹出框 -->
  <el-dialog
    title="pdf预览.pdf"
    v-model="openPdf"
    @close="onClose"
    :close-on-click-modal="false"
    width="1050px"
  >
  <!-- 预览pdf文件 -->
    <embed
      src="https://www.latex-project.org/help/documentation/usrguide.pdf"
      type="application/pdf"
      width="1010px"
      height="600px"
    />
  </el-dialog>
</template>

<script setup name="showPdf">
import { ref, reactive, computed, watch, getCurrentInstance } from "vue";
const { proxy } = getCurrentInstance();
// 是否打开弹窗
const openPdf = ref(false);

const props = defineProps({
  openPdf:{
    type:Boolean
  },
  uuid:{
    type:String
  },
  title:{
    type:String
  }
})
// 关闭弹窗
const onClose =()=>{
  openPdf.value = false;
}
</script>

<style lang="scss" scoped></style>
javascript 复制代码
<template>
     <button @click="openDetail">打开弹窗</button>
     <!-- 弹窗 -->
     <showPdf v-model="openPdf" :uuid="uuid"></showPdf>
  </div>
</template>

<script setup>
import { ref} from "vue";
import showPdf from "@/views/showPdf.vue" // 引入前面写好的弹窗组件

const uuid = ref(null);
const openPdf = ref(false);

/**打开pdf弹窗 */
const openDetail=()=> {
  openPdf.value = true;
};
</script>

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

效果图:

相关推荐
yanchGod9 小时前
CSS page-break-before 属性详解:控制打印分页的艺术
前端·javascript·css·html·css3·html5
卜凡.9 小时前
Vue是对HTML、CSS、JS的标准化、组件化和响应式的上层抽象与增强
javascript·vue.js·html
冰暮流星10 小时前
javascript之默认事件
开发语言·javascript·ecmascript
梵克之泪10 小时前
批量拆分PDF只取PDF的首页,批量按文件页数拆分PDF,按卷内目录页码表计算批量拆分分割PDF
pdf·pdf拆分
前端之虎陈随易10 小时前
为什么今天还会有新语言?MoonBit 想解决什么问题?
大数据·linux·javascript·人工智能·算法·microsoft·typescript
kyriewen10 小时前
你等的Babel编译,够喝三杯咖啡了——用Rust重写的SWC,只需眨个眼
前端·javascript·rust
Ww.xh10 小时前
鸿蒙系统中HTML与Vue集成方案
vue.js·html·harmonyos
张元清11 小时前
SSR 状态管理陷阱:defineStore vs defineContextStore
前端·javascript·面试
openKaka_11 小时前
为什么 React 18 之后使用 createRoot,而不是 ReactDOM.render
前端·javascript·react.js