Vue3PDF预览(vue3-pdf-app)

news2024/11/15 14:02:28

vue3-pdf-app 插件

可自定义设置以下属性:

  • pdf地址(src),类型:string,必传,默认 ''

  • 预览容器宽度(width),类型:number | string,默认 '100%'

  • 预览容器高度(height),类型:number | string,默认 '100vh'

  • 预览主题(theme),类型:string,默认 'dark',可选 dark | light

  • 覆盖pdf文件名(fileName),类型:string,默认 ''

插件 dark 和 light 主题均支持自定义覆盖各个部分颜色变量,从而定制主题!

效果如下图:

theme: dark

theme: light

①安装插件:yarn add vue3-pdf-app

②创建PDF预览组件PDFViewer.vue:

<script setup lang="ts">
import { computed } from 'vue'
import PdfApp from 'vue3-pdf-app'
import 'vue3-pdf-app/dist/icons/main.css'
interface Props {
  src: string // pdf地址
  width?: string|number // 预览容器宽度
  height?: string|number // 预览容器高度
  theme?: string // 预览主题 可选 dark | light
  fileName?: string // 覆盖pdf文件名
}
const props = withDefaults(defineProps<Props>(), {
  src: '',
  width: '100%',
  height: '100vh',
  theme: 'dark',
  fileName: ''
})
const viewerWidth = computed(() => {
  if (typeof props.width === 'number') {
    return props.width + 'px'
  } else {
    return props.width
  }
})
const viewerHeight = computed(() => {
  if (typeof props.height === 'number') {
    return props.height + 'px'
  } else {
    return props.height
  }
})
</script>
<template>
  <link rel="resource" type="application/l10n" href="../assets/files/viewer.properties">
  <PdfApp
    :theme="theme"
    :style="`width: ${viewerWidth}; height: ${viewerHeight};`"
    :pdf="src"
    :fileName="fileName"
    v-bind="$attrs"></PdfApp>
</template>
<style lang="less" scoped>
// 定制化主题色
.pdf-app.dark {
  --pdf-app-background-color: rgb(83, 86, 89);
  --pdf-sidebar-content-color: rgb(51, 54, 57);
  --pdf-toolbar-sidebar-color: #24364e;
  --pdf-toolbar-color: rgb(50, 54, 57);
  --pdf-loading-bar-color: #606c88;
  --pdf-loading-bar-secondary-color: @themeColor;
  --pdf-find-results-count-color: #d9d9d9;
  --pdf-find-results-count-font-color: #525252;
  --pdf-find-message-font-color: #a6b7d0;
  --pdf-not-found-color: #f66;
  --pdf-split-toolbar-button-separator-color: #fff;
  --pdf-toolbar-font-color: #d9d9d9;
  --pdf-button-hover-font-color: @themeColor;
  --pdf-button-toggled-color: #606c88;
  --pdf-horizontal-toolbar-separator-color: #fff;
  --pdf-input-color: #606c88;
  --pdf-input-font-color: #d9d9d9;
  --pdf-find-input-placeholder-font-color: @themeColor;
  --pdf-thumbnail-selection-ring-color: hsla(0,0%,100%,.15);
  --pdf-thumbnail-selection-ring-selected-color: rgb(147, 179, 242);
  --pdf-error-wrapper-color: #f55;
  --pdf-error-more-info-color: #d9d9d9;
  --pdf-error-more-info-font-color: #000;
  --pdf-overlay-container-color: rgba(0,0,0,.2);
  --pdf-overlay-container-dialog-color: #24364e;
  --pdf-overlay-container-dialog-font-color: #d9d9d9;
  --pdf-overlay-container-dialog-separator-color: #fff;
  --pdf-dialog-button-font-color: #d9d9d9;
  --pdf-dialog-button-color: #606c88;
}
/* for light theme */
.pdf-app.light {
  --pdf-app-background-color: hsla(208,7%,46%,.3);
  --pdf-sidebar-content-color: hsla(208,7%,46%,.4);
  --pdf-toolbar-sidebar-color: hsla(208,7%,46%,.7);
  --pdf-toolbar-color: #6c757d;
  --pdf-loading-bar-color: #3f4b5b;
  --pdf-loading-bar-secondary-color: #666;
  --pdf-find-results-count-color: #3f4b5b;
  --pdf-find-results-count-font-color: hsla(0,0%,100%,.87);
  --pdf-find-message-font-color: hsla(0,0%,100%,.87);
  --pdf-not-found-color: brown;
  --pdf-split-toolbar-button-separator-color: #000;
  --pdf-toolbar-font-color: hsla(0,0%,100%,.87);
  --pdf-button-hover-font-color: #666;
  --pdf-button-toggled-color: #3f4b5b;
  --pdf-horizontal-toolbar-separator-color: #000;
  --pdf-input-color: #3f4b5b;
  --pdf-input-font-color: #d9d9d9;
  --pdf-find-input-placeholder-font-color: #666;
  --pdf-thumbnail-selection-ring-color: hsla(208,7%,46%,.7);
  --pdf-thumbnail-selection-ring-selected-color: #3f4b5b;
  --pdf-error-wrapper-color: #f55;
  --pdf-error-more-info-color: #d9d9d9;
  --pdf-error-more-info-font-color: #000;
  --pdf-overlay-container-color: hsla(208,7%,46%,.7);
  --pdf-overlay-container-dialog-color: #6c757d;
  --pdf-overlay-container-dialog-font-color: #d9d9d9;
  --pdf-overlay-container-dialog-separator-color: #000;
  --pdf-dialog-button-font-color: #d9d9d9;
  --pdf-dialog-button-color: #3f4b5b;
}
</style>

③在要使用的页面引入:

<script setup lang="ts">
// import PDFSrc from '@/assets/files/Markdown.pdf'
const PDFSrc = new URL('@/assets/files/Markdown.pdf', import.meta.url).href
</script>
<template>
  <div>
    <h1>vue3-pdf-app 参考文档</h1>
    <ul class="m-list">
      <li>
        <a class="u-file" href="https://www.npmjs.com/package/vue3-pdf-app" target="_blank">vue3-pdf-app</a>
      </li>
    </ul>
    <h2 class="mt30 mb10">PDFViewer 基本使用</h2>
    <PDFViewer
      :width="800"
      :height="800"
      theme="dark"
      :src="PDFSrc" />
  </div>
</template>
<style lang="less" scoped>
</style>

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

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

相关文章

数字化转型框架如何搭建?

根据GetSmarter对来自128个国家/地区的5808名专业人士进行关于数字化转型的调查&#xff0c;揭示了几个重要的发现。 首先是所有行业和工作角色对数字化转型的看法不同。它不仅仅专注于集成和利用新技术&#xff0c;例如机器学习(ML)、人工智能(AI)、大数据和自动化。它是关于…

云原生之在kubernetes集群下部署Mysql应用

云原生之在kubernetes集群下部署mysql应用 一、Mysql介绍二、kubernetes集群介绍1.k8s简介2.k8s架构图 三、本次实践介绍1.本次实践简介2.本次环境规划 三、检查本地k8s集群环境1.检查k8s各节点状态2.检查k8s版本3.检查k8s系统pod状态 四、编辑mysql.yaml文件五、创建mysql应用…

STM32G070 onchip移植FlashDB

一、Onchip Flash 特性 在STM32G070 的片内 Flash写入数据之前必须先对目标地址进行擦除后才能写入数据数据写入&#xff1a;G070 Flash 写入数据必须保证8字节对齐&#xff0c;一次写入双字数据64bit 8Byte数据读取&#xff1a;使用地址直接读取 二、移植FAL 1. 添加以下文…

全面详解Java多线程基础-2:线程的状态

相关阅读&#xff1a; 全面详解Java多线程基础-1&#xff1a;Thread类及其基本用法 操作系统里的进程&#xff0c;自身是有一个状态的。而Java的Thread类是对系统线程的封装&#xff0c;它把这里的“状态”又进一步精细化了。 理解线程状态&#xff0c;意义是能够让我们更好地…

当ChatGPT遇上StableDiffusion ChatGPT指导StableDiffusion绘画

ChatGPT指导StableDiffusion 前言开始使用场景1&#xff1a;繁华的街道场景2&#xff1a;桥上的女生 项目及教程地址&#xff0c;附GPT访问地址安装教程及安装包地址&#xff1a;点我下载开源项目&#xff1a;点我下载GPT访问地址&#xff0c;点我访问 前言 Stable Diffusion …

java下

双列集合的特点 双列集合一次需要存一对数据&#xff0c;分别为键和值键不能重复&#xff0c;值可以重复键和值是一一对应的&#xff0c;每一个键只能找到自己对应的值键&#xff0b;值这个整体我们称之为“键值对”或者“键值对对象”&#xff0c;在Java中叫做“Entry对象” …

git及vs2019代码量统计的方法

git 在工程下打开git bash //替换username&#xff0c;查看个人代码量 git log --author"username" --prettytformat: --numstat | awk { add $1; subs $2; loc $1 - $2 } END { printf "added lines: %s, removed lines: %s, total lines: %s\n", ad…

基于matlab之NR SSB 光束扫描仿真

一、前言 此示例说明如何在 5G NR 系统的发射器 &#xff08;gNB&#xff09; 和接收器 &#xff08;UE&#xff09; 端使用波束扫描。本示例使用同步信号块 &#xff08;SSB&#xff09; 说明了初始访问期间使用的一些波束管理程序。为了完成声束扫描&#xff0c;该示例使用了…

人工智能全球发展趋势、经济影响和未来挑战

人工智能&#xff08;AI&#xff09;作为一种新兴技术&#xff0c;正在引领世界经济和社会的变革。在过去几年中&#xff0c;全球范围内对人工智能的投资和研究持续增长&#xff0c;这使得人工智能成为了各行各业的关注焦点。本文将介绍人工智能的基础知识和应用场景&#xff0…

3个问题!验明GPT-4真身;基于GPT科研加速技巧汇总;Midjourney神仙教程;印象笔记有AI功能啦 | ShowMeAI日报

&#x1f440;日报&周刊合集 | &#x1f3a1;生产力工具与行业应用大全 | &#x1f9e1; 点赞关注评论拜托啦&#xff01; &#x1f916; 『GPT-4 验明真身的三个经典问题』快速区分 GPT-3.5 与 GPT-4&#xff0c;快来对答案 这里收集了几个免费使用 GPT-4 的工具&#xff…

LVDS为汽车应用提供可靠的视频接口

摘要&#xff1a;汽车视频应用中&#xff0c;降低视频干扰的途径是用数字信号替代模拟信号。最有效的视频传输方案是采用低电压差分信号(LVDS)接口&#xff0c;因为它具有较低的信号幅度(0.35V)和差分架构&#xff0c;可大大降低电磁辐射。 新型汽车电子信号格式变化最快的是视…

如何在 iPhone 上恢复永久删除的照片?

iPhone永久删除的照片是否永远消失了&#xff1f; 你想知道永久删除的照片在 iPhone 上放在哪里吗&#xff1f;通常情况&#xff0c;操作系统会将已删除照片的存储空间进行标记为准备好覆盖&#xff08;还未实际删除&#xff09;。iPhone 也是如此。 如果互联网连接良好&a…

从功能到外企测开,工作1年半拿下年薪30万的测开 offer,未来可期

说一下我的大致情况&#xff0c;女&#xff0c;2018年毕业于末流211计算机本科。后来待业两年&#xff0c;完全没有从事互联网方面的工作。去年来到北京&#xff0c;在小公司做了一年多功能测试。今年11月底跳槽到外企&#xff0c;开始了我钱多事少离家近&#xff0c;每周965的…

如何用ChatGPT做品牌项目的二手信息搜集?

该场景对应的关键词库&#xff08;25个&#xff09;&#xff1a; 品牌案例、竞品、信息来源、项目分析、官方渠道、品类、品牌、节日节庆、明星、国家、奖项、代理商、项目名称、项目描述、品牌介绍、竞争情况、运营数据、财务信息、交易信息、法律问题、网络平台、行业人士、品…

线程池?我不懂?

为什么要使用线程池&#xff1f; 降低资源消耗。通过重复利用已创建的线程&#xff0c;降低线程创建和销毁造成的消耗提高响应速度。当任务到达时&#xff0c;任务可以不需要等到线程创建就能立即执行增加线程的可管理型。线程是稀缺资源&#xff0c;使用线程池可以进行统一分…

c++学习之c++对c的扩展1

目录 1.面向过程与面向对象的编程 2.面向对象编程的三大特点 3.c对c的扩展&#xff1a; 1.作用域运算符&#xff1a;&#xff1a; 2.命名空间 1.c命名空间&#xff08;namespace&#xff09; 2.命名空间的使用 1.在不同命名空间内可以创建相同的名称 2.命名空间只能在全…

Java基础——异常+IO流资源释放

异常 &#xff08;1&#xff09;什么是异常&#xff1a; 程序在编译/执行的过程中可能出现的问题注意&#xff1a;语法错误不属于异常 &#xff08;2&#xff09;为什么要学习异常&#xff1a; 异常一旦出现了&#xff0c;如果没有提前处理&#xff0c;程序就会退出JVM虚拟…

java的泛型

1. 泛型是什么 ​ Java泛型是J2 SE1.5中引入的一个新特性&#xff0c;其本质是参数化类型&#xff0c;也就是说所操作的数据类型被指定为一个参数&#xff08;type parameter&#xff09;, 这种参数类型可以用在类、接口和方法的创建中&#xff0c;分别称为泛型类、泛型接口、…

如何开展兼容性测试?兼容性测试有什么作用?

兼容性测试是指测试软件在特定的硬件平台上、不同的应用软件之间、不同的操作系统平台上、不同的网络等环境中是否能够很友好的运行的测试。兼容性测试是软件测试过程中必不可少的一个过程&#xff0c;没有兼容性测试的测试是不完整的测试&#xff0c;下面来分享怎么做兼容测试…

【艾特淘】淘宝卖家如何获取手淘推荐流量?

目前手淘推荐在流量构成中的占比越来越大。平台的推送机制越来越精准&#xff0c;卖家的使用习惯在慢慢改变&#xff0c;因此手淘推荐成了必争之地&#xff0c;尤其是免费的手淘推荐流量&#xff0c;成本很低&#xff01;那么今天就给大家介绍一下手淘推荐的基本操作思路。首先…