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

news2024/9/26 3:31:14

文章目录

  • 📋前言
  • 🎯使用 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 path
      PDFObject.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.coloradmin.cn/o/1236333.html

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

相关文章

Gitlab安装与操作

GitLab 是一个用于仓库管理系统的开源项目&#xff0c;使用Git作为代码管理工具&#xff0c;并在此基础上搭建起来的Web服务。 可通过Web界面进行访问公开的或者私人项目。它拥有与Github类似的功能&#xff0c;能够浏览源代码&#xff0c;管理缺陷和注释。可以管理团队对仓库的…

c++|引用

目录 一、引用概念 二、引用特性 三、常引用 &#xff08;具有常属性的引用变量&#xff09; 四、使用场景 一、引用概念 引用不是新定义一个变量&#xff0c;而是给已存在变量取了一个别名&#xff0c;编译器不会为引用变量开辟内存空间&#xff0c;他和他引用的变量共用同…

C++ 使用c++类模板实现动态数组-可实现自定义数据类型存储

.hpp文件 #include <iostream> #include <cstdlib> #include <cstring> using namespace std; template <class T> class arraylist { private:T* data ;//数组地址int size;//长度int count;//容量public:arraylist();~arraylist();void add(T t);T&…

革新突破!智能指标平台引领时代,国产大模型与企业级部署的完美结合

11月21日&#xff0c;跬智信息&#xff08;Kyligence&#xff09;圆满召开了线上数智论坛暨产品发布会&#xff0c;升级智能一站式指标平台 Kyligence Zen 及 AI 数智助理 Kyligence Copilot 的一系列企业级能力&#xff0c;包括正式支持智谱 AI、百川智能等在内的多款国产大模…

什么是数字化工厂?企业数字化转型有什么好处?

科技在发展&#xff0c;时代在进步&#xff0c;全球信息化、数字化的步伐越来越快&#xff0c;数字化转型是否成功也成为企业在未来发展中能否做大做强的关键因素。而数字化工厂就是制造业数字化发展的一个重要发展方向&#xff0c;那么究竟什么是数字化工厂呢&#xff1f;它和…

IDEA如何将本地项目推送到GitHub上?

大家好&#xff0c;我是G探险者。 IntelliJ IDEA 是一个强大的集成开发环境&#xff08;IDE&#xff09;&#xff0c;它支持多种编程语言和工具。它也内置了对Git和GitHub的支持&#xff0c;让开发者可以轻松地将本地项目推送到GitHub上。以下是一个操作手册&#xff0c;描述了…

JSP:Tag文件的使用

需求&#xff1a;多个JSP页面可能需要使用一些相同的信息 例如:导航栏、标题等。 目标&#xff1a;提高这些相同信息的代码的复用性。 方法&#xff1a;将这些相同的元素形成一种特殊的文件&#xff0c;以便所有页面都可以使用&#xff0c;即&#xff1a;Tag文件 1、Tag对…

关于lenra你需要了解的

monorepo&#xff1a;项目代码管理方式&#xff0c;单个仓库中管理多个项目是一种设计思想 lenra&#xff1a;是一种工具&#xff0c;对于使用npm和git管理多软件包代码仓库的工作流程进行优化 使用这些工具的优点&#xff1a; 公共依赖只要安装一次&#xff0c;Monorepo 中…

阿里云ECS服务器如何搭建并连接FTP,完整步骤

怎么用终端连接服务器就不多说了&#xff0c;直接开始搭建FTP。 我是用root账号执行的命令&#xff0c;如果不使用root账号&#xff0c;注意在命令前面加sudo。 一、安装FTP 我这里安装的是vsftpd。 1、检查是否已安装vsftpd&#xff1a; vsftpd -v如果出现了版本信息&…

JAVAEE---多线程

内核 内核时操作系统的核心 操作系统有内核态和用户态&#xff0c;像我们平时所用到的qq音乐&#xff0c;微信等都属于用户态执行的程序。那么qq音乐播放音乐需要用到扬声器&#xff0c;扬声器的操作就是在内核空间进行操作&#xff0c;用户态不能对其进行操作。 操作系统 …

QT专栏2 -Qt for Android

#2023年11月18日 # Qt version 6.6 JDK17 JDK 安装 Java Downloads | Oracle 设置环境变量 鼠标右键我的电脑&#xff0c;出现如下界面 Qt配置 改用JDK18&#xff0c;没有乱码&#xff0c;由于不影响APK产生。 做了好多尝试&#xff0c;更换JDK版本(11,18,19,21)&…

Python+OpenCV裂缝面积识别系统(部署教程&源码)

1.研究背景与意义 随着科技的不断发展&#xff0c;计算机视觉技术在各个领域中得到了广泛的应用。其中&#xff0c;图像处理是计算机视觉中的一个重要分支&#xff0c;它通过对图像进行数字化处理&#xff0c;提取出其中的有用信息&#xff0c;为后续的分析和应用提供支持。而…

Git——感谢尚硅谷官方文档

Git——尚硅谷学习笔记 第1章 Git 概述1.1 何为版本控制1.2 为什么需要版本控制1.3 版本控制工具1.4 Git 简史1.5 Git 工作机制1.6 Git 和代码托管中心 第2章 Git 安装第 3 章 Git 常用命令3.1 设置用户签名3.2 初始化本地库3.3 查看本地库状态3.4 添加暂存区3.4.1 将工作区的文…

大数据平台红蓝对抗 - 磨利刃,淬精兵! | 京东云技术团队

一、背景 目前大促备战常见备战工作&#xff1a;专项压测&#xff08;全链路压测、内部压测&#xff09;、灾备演练、降级演练、限流、巡检&#xff08;监控、应用健康度&#xff09;、混沌演练&#xff08;红蓝对抗&#xff09;&#xff0c;如下图所示。随着平台业务越来越复…

限时开发、码力全开、2w奖金!AGI Hackathon等你挑战!

AGI时代&#xff0c;我们已不再满足于简单的产品开发&#xff0c;与大模型结合的无限想象力&#xff0c;成为开发者们新的追求。 你有能力将想法转化为现实吗&#xff1f;你有勇气接受挑战&#xff0c;创造全新的AI应用吗&#xff1f; 如果你有热情&#xff0c;有信心&#xff…

深度学习之生成唐诗案例(Pytorch版)

主要思路&#xff1a; 对于唐诗生成来说&#xff0c;我们定义一个"S" 和 "E"作为开始和结束。 示例的唐诗大概有40000多首&#xff0c; 首先数据预处理&#xff0c;将唐诗加载到内存&#xff0c;生成对应的word2idx、idx2word、以及唐诗按顺序的字序列。…

注册中心CAP架构剖析

Nacos 支持 AP 或 CP AP Nacos 通过临时节点实现 AP 架构&#xff0c;将服务列表放在内存中&#xff1b; CP Nacos 通过持久化节点实现 CP 架构&#xff0c;将服务列表放在文件中&#xff0c;并同步到内存&#xff0c;通过 Raft 协议算法实现&#xff1b; 通过配置 epheme…

中科创达:所有产品都可以用生成式AI重做一遍

对于制造企业的数字化转型来说&#xff0c;生成式AI究竟具备怎样的意义和价值&#xff1f; 在与亚马逊云科技的合作中&#xff0c;中科创达对此有着深刻的领会和感悟。 生成式AI助力制造业数字化转型 “科技是第一生产力”&#xff0c;对于这句脍炙人口的名言&#xff0c;制造企…

x shell 用作串口调试助手

x shell 用作串口调试助手 Xshell 介绍 是一个强大的安全终端模拟软件&#xff0c;它支持SSH1, SSH2, 以及Microsoft Windows 平台的TELNET 协议。Xshell 通过互联网到远程主机的安全连接以及它创新性的设计和特色帮助用户在复杂的网络环境中享受他们的工作。 Xshell可以在Wi…

PDF文件无密码,如何解密?

PDF文件有两种密码&#xff0c;一个打开密码、一个限制编辑密码&#xff0c;因为PDF文件设置了密码&#xff0c;那么打开、编辑PDF文件就会受到限制。想要解密&#xff0c;我们需要输入正确的密码&#xff0c;但是有时候我们可能会出现忘记密码的情况&#xff0c;或者网上下载P…