Vue 项目实战——如何在页面中展示 PDF 文件以及 PDFObject 插件实战

文章目录

  • 📋前言
  • 🎯使用 HTML 标签
    • 🧩 embed 标签
    • 🧩 object标签
    • 🧩 iframe标签
    • 🧩完整代码
  • 🎯使用 PDFObject 插件
    • 🧩为什么使用 PDFObject 插件(AI翻译)
    • 🧩浏览器支持
    • 🧩在 Vue项目 使用 PDFObject 插件
      • 🔗安装 PDFObject 插件
  • 📝最后


在这里插入图片描述

📋前言

在之前的两篇关于 Print.js 文章中,我们已经初步学习了打印插件 Print.js 的使用,既然涉及到 PDF 的打印,如果想要预览 PDF 后再进行打印应该怎么做呢,接下来通过这篇文章记录一下 Vue 项目实战中,在页面中展示 PDF 文件的一些例子。
在这里插入图片描述
其实把 PDF 展示到页面后,我们可以通过操作 PDF 展示窗口就行下载操作和分页预览操作等等。那么这样又会有出现一个问题,既然已经展示了 PDF,并且可以 PDF 预览窗口进行下载,那么还需要用到 Print.js 进行打印吗?其实可以分两种情况进行分析,第一种仅仅展示 PDF ,不使用其对应打印的功能(其实就是浏览器内置的调起打印窗口 Ctrl + p),我们也可以通过代码修改预览窗口的功能按钮;第二种则是反之,不使用 Print.js 进行打印,直接点击打印列表的对应打印项,然后预览 PDF,不再通过 Print.js 的打印功能按钮,通过预览窗口的下载按钮调起打印。
在这里插入图片描述


🎯使用 HTML 标签

通过上面分析和应用场景介绍,我们一起来看看如何在网页中展示PDF文件这个需求。HTML 提供了一些原生标签,如 <embed><object><iframe>,可以直接嵌入PDF文件,并在网页中展示。接下来先介绍一下这些原生的 HTML 标签,以及它们的使用方法和属性设置,来实现在网页中展示 PDF 文件。

🧩 embed 标签

embed 标签可以用于嵌入各种类型的媒体文件,包括 PDF。使用 embed 标签展示PDF文件时,可以将 PDF 文件的 URL 作为 src 属性的值,如下所示。

<embed src="path/to/your/pdf.pdf" type="application/pdf" width="100%" height="600px" />

src 属性指定了 PDF 文件的 URL,type 属性指定了媒体类型为 PDF,width 和 height 属性可以设置展示的宽度和高度。

🧩 object标签

object 标签也可用于嵌入 PDF 文件,它提供了更多的灵活性和功能。使用 object 标签展示 PDF 文件的示例如下。

<object data="path/to/your/pdf.pdf" type="application/pdf" width="100%" height="600px"><p>此浏览器不支持 PDF 预览,请点击<a href="path/to/your/pdf.pdf">这里</a>下载 PDF。</p>
</object>

在 object 标签内部,可以添加一段备用内容,用于在不支持PDF预览的浏览器上显示。用户可以通过备用内容中的链接下载PDF文件。

🧩 iframe标签

iframe 标签可以用于在网页中嵌入其他网页或文档,包括PDF文件。使用 iframe 标签展示PDF文件的示例如下。

<iframe src="path/to/your/pdf.pdf" width="100%" height="600px"></iframe>

src 属性指定了 PDF 文件的 URL,width 和 height 属性可以设置展示的宽度和高度。

🧩完整代码

<template><h1>PDFObject Test</h1><div class="pdf-box"><h2>embed 标签</h2><embed :src="pdflink" type="application/pdf" width="600px" height="600px" /></div><div class="pdf-box"><h2>object 标签</h2><object :data="pdflink" type="application/pdf" width="600px" height="600px"><p>此浏览器不支持 PDF 预览,请点击<a :href="pdflink">这里</a>下载 PDF。</p></object></div><div class="pdf-box"><h2>iframe 标签</h2><iframe :src="pdflink" width="600px" height="600px"></iframe></div>
</template><script setup>
import { ref } from "vue";
// 不使用 setup 语法糖
// export default {
//   setup() {
//     // 在setup函数中编写逻辑
//     const pdflink = ref("https://pdfobject.com/pdf/sample-3pp.pdf");
//     return {
//       pdflink,
//     };
//   },
// };
const pdflink = ref("https://pdfobject.com/pdf/sample-3pp.pdf");
</script><style lang="scss">
h1,
h2 {text-align: center;
}.pdf-box {display: flex;justify-content: center;align-items: center;flex-direction: column;
}
</style>

效果图(局部)
在这里插入图片描述
这三个标签都可以用来展示PDF文件,具体选择哪个标签取决于具体的需求和兼容性要求。建议在使用时测试不同的标签,并根据实际情况进行选择。


🎯使用 PDFObject 插件

官方文档地址:https://pdfobject.com/#the-why

🧩为什么使用 PDFObject 插件(AI翻译)

官方是这样解释道的,PDFObject 是一个实用工具,可以检测浏览器是否支持内嵌式/嵌入式 PDF 文档。如果您正在处理动态 HTML,比如单页 Web 应用程序,可能需要动态插入 PDF 文档。然而,某些浏览器不支持 PDF 内嵌,如果您没有先检查 PDF 支持情况就插入标记,则可能会导致缺少内容或破碎的用户界面。

PDFObject 通过检测浏览器对 PDF 内嵌的支持来帮助您避免这些情况。如果浏览器支持内嵌,则 PDF 将被内嵌。如果浏览器不支持内嵌,则 PDF 不会被内嵌。

默认情况下,当浏览器不支持内嵌 PDF 文档时,PDFObject 会插入一个备用链接到PDF文档。这确保您的用户始终可以访问您的 PDF 文档,并旨在帮助您编写更少的代码。备用链接可以自定义,或者如果您喜欢,也可以禁用该选项。

PDFObject 已经准备好使用 npm。现代 Web 应用程序使用 npm 来管理包和依赖项。PDFObject 2.x 已在 Node Package Manager (npm) 中注册,并可以动态加载。

PDFObject 还使得方便指定 Adobe 专有的“ PDF 打开参数”。请注意,这些参数仅受 Adobe Reader 支持,大多数 PDF 阅读器将忽略这些参数,包括 Chrome、Edge、Internet Explorer 和 Safari 内置的 PDF 阅读器。

🧩浏览器支持

PDFObject 2.x 是为现代浏览器设计的,并在 Chrome、Firefox、Safari、IE 11 和 MS Edge 中进行了成功测试。移动浏览器不支持 PDF 内嵌!对于移动浏览器(Android、iOS、iPadOS),PDFObject 将加载您指定的备用内容。

重要提示:浏览器对 PDFObject 的支持并不意味着浏览器支持 PDF 内嵌!PDFObject 存在的原因是在浏览器支持 PDF 时帮助您嵌入 PDF 文档,并在浏览器不支持 PDF 时显示替代的非 PDF 内容。虽然大多数现代桌面浏览器都支持 PDF 内嵌,但有些浏览器不支持。尤其需要注意的是,Internet Explorer 11 需要像 Adobe Acrobat 这样的第三方工具来显示 PDF 文档。

因此我们在选择使用 PDFObject 插件的时候要注意兼容性和浏览器支持,划重点!浏览器对 PDFObject 的支持并不意味着浏览器支持 PDF 内嵌!如果是要在移动端展示为主的需求,不建议使用 PDFObject 插件,因为 PDFObject 在手机 webview 使用兼容性不太好。

🧩在 Vue项目 使用 PDFObject 插件

🔗安装 PDFObject 插件

在 Vue 项目中使用 PDFObject 插件,需要在 Vue 组件中引入 PDFObject 并在适当的生命周期钩子中调用它来嵌入 PDF 文件。首先通过 npm 安装 PDFObject 插件。

npm install pdfobject

在这里插入图片描述
然后通过 import PDFObject from 'pdfobject'; 将 PDFObject 导入到页面。下面是一个使用例子。

<template><div><div ref="pdfContainer"></div></div>
</template><script>
import PDFObject from 'pdfobject';export default {mounted() {this.embedPDF();},methods: {embedPDF() {const options = {width: "100%",height: "500px"};// replace 'example.pdf' with your actual PDF file pathPDFObject.embed("example.pdf", this.$refs.pdfContainer, options);}}
}
</script>

在上面的例子中,我们先在 mounted 生命周期钩子中调用了 embedPDF 方法,该方法使用 PDFObject 将 PDF 文件嵌入到组件的 pdfContainer 中。其中 example.pdf 替换实际的 PDF 文件路径即可(这里可以用到文章前面用到的 https://pdfobject.com/pdf/sample-3pp.pdf 这个文件路径)。注意这里的案例使用的是组件作为 target参数,除此之外这个参数可以是一个 DOM 元素、DOM 元素的 ID 字符串,或者一个 jQuery 对象。

关于 PDFObject.embed(url [string], target [mixed], options [object]) 我们做一个简单的解析,该方法是 PDFObject 插件提供的一个方法,用于将 PDF 文件嵌入到网页中。这个方法接受三个参数如下。

  • url (字符串):表示要嵌入的 PDF 文件的 URL 或文件路径。
  • target (混合类型):表示要将 PDF 文件嵌入到的目标元素。这个参数可以是一个 DOM 元素、DOM 元素的 ID 字符串,或者一个 jQuery 对象。
  • options (对象): 一个包含定制化选项的对象,用于设置嵌入的 PDF 的行为和外观。

通过调用这个方法,你可以在网页中动态地将 PDF 文件嵌入到指定的位置,并且可以通过传入不同的选项来控制嵌入的方式,比如设置 PDF 的宽度、高度等参数。

例如,你可以这样调用这个方法来将一个名为 “example.pdf” 的 PDF 文件嵌入到 ID 为 “pdf-container” 的 div 元素中,并设置嵌入的宽度为 “100%”,高度为 “500px”。

PDFObject.embed("example.pdf", "#pdf-container", { width: "100%", height: "500px" });

在 Vue3 中实际写法如下。

<template><h1>PDFObject Test</h1><div class="pdf-box"><h2>PDFObject 插件</h2><div ref="pdfContainer"></div></div>
</template><script setup>
import { ref, onMounted } from "vue";
import PDFObject from "pdfobject";
// 不使用 setup 语法糖
// export default {
//   setup() {
//     // 在setup函数中编写逻辑
//     const pdflink = ref("https://pdfobject.com/pdf/sample-3pp.pdf");
//     return {
//       pdflink,
//     };
//   },
// };
const pdfContainer = ref(null);
onMounted(() => {embedPDF();
});
const embedPDF = () => {const options = {width: "600px",height: "500px",};PDFObject.embed("https://pdfobject.com/pdf/sample-3pp.pdf",pdfContainer.value,options);
};
</script><style lang="scss">
h1,
h2 {text-align: center;
}.pdf-box {display: flex;justify-content: center;align-items: center;flex-direction: column;
}
</style>

在这里插入图片描述


📝最后

通过本文的介绍,我们了解到使用原生的HTML标签 embed、object 和 iframe 来展示PDF文件是一种简单而有效的方式。根据具体的需求,可以选择适合的标签和属性来实现定制化的展示效果。同时,还有一些 JavaScript 插件和库,如 PDFObject 插件,可以进一步实现 PDF 文件的展示和操作。无论是使用原生标签还是插件和库,展示 PDF 文件在网页中为用户提供了更好的阅读体验,同时也可以丰富网页的内容和交互性。

到此就是在页面中展示 PDF 文件以及 PDFObject 插件实战的全部内容了,我们通过分析不同情况使用不同的展示方法吗,以及展示的需求,结合文章的案例和实战内容,进一步了解和学习了在页面中展示 PDF 文件的技术。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/157012.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【微服务】SaaS云智慧工地管理平台源码

智慧工地系统是一种利用人工智能和物联网技术来监测和管理建筑工地的系统。它可以通过感知设备、数据处理和分析、智能控制等技术手段&#xff0c;实现对工地施工、设备状态、人员安全等方面的实时监控和管理。 一、智慧工地让工程施工智能化 1、内容全面&#xff0c;多维度数…

华为云IoT与OpenHarmony深度协同,加速设备上鸿即上云【云驻共创】

本次专题论坛探讨了华为云IoT与Open Harmony的深度协同、边缘屏蔽硬件差异、实现智慧隧道全方位智能化管理&#xff0c;以及华为云与Open Harmony生态的合作。同时也介绍了华为云物联网卡平台、HTTP2协议以及华为物联网在交通领域的应用。 一&#xff0e;华为云IoT与Open Harm…

数学几百年重大错误:将两异函数误为同一函数

黄小宁 因各实数都可是数轴上点的坐标所以数集A可形象化为数轴上的点集A&#xff0c;从而使x∈R变换为实数yxδ的几何意义可是&#xff1a;一维空间“管道”g内R轴上的质点x∈R(x是点的坐标)运动到新的位置yxδ还在管道g内&#xff08;设各点只作位置改变而没别的改变即变位前…

Vue学习

1。 搭框架 依赖等 创建vue项目 vue create 项目名称 vue create [options] <app-name>使用vite npm init vitelatest <app-name>-- --template vue 目录调整1 apiutilsvenderimages、styles 配置文件 jsconfig.json 配置之后路径可以直接使用 / {"comp…

mysql 查询

-- 多表查询select * from tb_dept,tb_emp; 内来链接 -- 内连接 -- A 查询员工的姓名 &#xff0c; 及所属的部门名称 &#xff08;隐式内连接实现&#xff09;select tb_emp.name,tb_dept.name from tb_emp,tb_dept where tb_emp.idtb_emp.id;-- 推荐使用select a.name,b.n…

【精选】OpenCV多视角摄像头融合的目标检测系统:全面部署指南&源代码

1.研究背景与意义 随着计算机视觉和图像处理技术的快速发展&#xff0c;人们对于多摄像头拼接行人检测系统的需求日益增加。这种系统可以利用多个摄像头的视角&#xff0c;实时监测和跟踪行人的活动&#xff0c;为公共安全、交通管理、视频监控等领域提供重要的支持和帮助。 …

TS类型全解

使用TypeScript开发的程序更安全&#xff0c;常见的错误都能检查出来。TS能让程序员事半功倍。而原因在于TS的“类型安全”&#xff08;借助类型避免程序做无效的事情&#xff09;。 图 运行程序的过程 但是TS不会直接编译成字节码&#xff0c;而是编译成JavaScript代码。TS编…

【C+进阶之路】第六篇:C++11

文章目录 一、【C】C11&#xff08;1&#xff09;二、【C】C11&#xff08;2&#xff09; 一、【C】C11&#xff08;1&#xff09; 【C】C11&#xff08;1&#xff09; 二、【C】C11&#xff08;2&#xff09; 【C】C11&#xff08;2&#xff09; &#x1f339;&#x1f33…

3.计算机网络

1.重点概念 MSL&#xff08;Maximum segment lifetime&#xff09;&#xff1a;TCP 报⽂最⼤⽣存时间。它是任何 TCP 报⽂在⽹络上存在的 最⻓时间&#xff0c;超过这个时间报⽂将被丢弃。实际应⽤中常⽤的设置是 30 秒&#xff0c;1 分钟和 2 分钟。 TTL&#xff08;Time to …

LeetCode算法心得——打家劫舍(记忆化搜索)

大家好&#xff0c;我是晴天学长&#xff0c;准备开始深入动态规划啦&#xff0c;先从记忆化搜索开始&#xff0c;需要的小伙伴可以关注支持一下哦&#xff01;后续会继续更新的。&#x1f4aa;&#x1f4aa;&#x1f4aa; 1) .打家劫舍 你是一个专业的小偷&#xff0c;计划偷窃…

RK3568平台开发系列讲解(Linux系统篇)kernel config 配置解析

🚀返回专栏总目录 文章目录 一、图形化界面的操作二、Kconfig 语法简介三、.config 配置文件介绍四、deconfig 配置文件沉淀、分享、成长,让自己和他人都能有所收获!😄 📢 Linux 内核可以通过输入“make menuconfig”来打开图形化配置界面,menuconfig 是一套图形化的配…

Javaweb之Axios的详细解析

1.3 Axios 上述原生的Ajax请求的代码编写起来还是比较繁琐的&#xff0c;所以接下来我们学习一门更加简单的发送Ajax请求的技术Axios 。Axios是对原生的AJAX进行封装&#xff0c;简化书写。Axios官网是&#xff1a;https://www.axios-http.cn 1.3.1 Axios的基本使用 Axios的…

map的基础定义及运用

Map 1 使用 1 声明 /*声明map*/map<int, string> myMap {{1, "Apple"}, {2, "Banana"}, {3, "Orange"}};2 插入元素 myMap.insert(make_pair(4, "Graphes"));3 通过访问键查找和访问元素 cout << myMap[2] <<…

[SCTF 2021]rceme

文章目录 前置知识可变参数绕过create_function注入无字母数字RCE动态链接库so绕过disable_functions利用php原生类进行文件读取 解题过程 前置知识 可变参数绕过 PHP 在用户自定义函数中支持可变数量的参数列表。在 PHP 5.6 及以上的版本中&#xff0c;由 … 语法实现&#x…

2023 年爆肝将近 20 万字讲解最新 JavaEE 全栈工程师基础教程(更新中)

1. Java 语言基本概述 Java 是一种广泛使用的编程语言&#xff0c;由 James Gosling 在 Sun Microsystems&#xff08;现在是 Oracle Corporation 的一部分&#xff09;于 1995 年发表。Java 是一种静态类型的、类基础的、并发性的、面向对象的编程语言。Java 广泛应用于企业级…

【Computer Vision Foundation】全球计算机视觉基金会论文网

计算机视觉基金会&#xff08;Computer Vision Foundation&#xff0c;简称CVF&#xff09;是一个致力于推动计算机视觉领域研究和发展的组织。以下是关于计算机视觉基金会的一些基本信息&#xff1a; 成立目的&#xff1a; CVF成立的目的是促进计算机视觉领域的学术研究、技术…

LVS+Keepalived 高可用群集

一、一.Keepalived工具介绍 专为LVS和HA设计的一款健康检查工具 • 支持故障自动切换&#xff08;Failover&#xff09; • 支持节点健康状态检查&#xff08;Health Checking&#xff09; • 官方网站&#xff1a;http://www.keepalived.org/ 二、Keepalived工作原理 • …

子虔科技出席2023WAIC“智能制造融合创新论坛”

7月7日&#xff0c;2023世界人工智能大会&#xff08;WAIC&#xff09;闵行会场在大零号湾举办。子虔科技联合创始人周洋作为专家嘉宾受邀参与智能制造融合创新论坛大会。会上探讨了工业和制造业数字化转型的机遇、挑战和对策。其中&#xff0c;周洋提到&#xff0c;工业制造业…

03-基于Feign的远程调用,详解Feign的自定义配置和优化,创建Feign模块

Feign远程调用 Feign替代RestTemplate 利用RestTemplate发起远程调用的代码的缺点 代码可读性差编程体验不统一 , 面对参数复杂的URL难以维护 String url "http://user-service/user/" order.getUserId(); User user restTemplate.getForObject(url, User.cla…

相对定位、绝对定位、固定定位、绝对定位堆叠顺序

相对定位&#xff1a;相对自己本身进行偏移 CSS语法&#xff1a; position: relative;/*相对自己进行定位*/ top: 10px;/*距离上边*/ left: 10px;/*距离左边*/ 演示图&#xff1a; 绝对定位&#xff1a;默认以浏览器进行定位。如果想依照父盒子定位&#xff0c;需要在父盒子…