vue显示PDF文件

2023-11-10

小编最近接手的项目中,有个需求,前端显示后端返回的PDF格式的文件,经过小编两天的调研和试验,终于找到了一个比较好的插件方法,直接贴代码。
1、安装

npm i vue-pdf-signature --save-dev

2、pdfShow.vue

<template>
    <div class="pdf-content">
        <!-- 显示所有页 -->
        <div class="all-pdf" v-if="isShowAll">
            <pdf v-for="i in pageTotalNum" :key="i" :src="pdfUrl" :page="i"/>
        </div>

        <!-- 只显示第一页,进行翻页查看 -->
        <div class="change-page-pdf" v-else>
            <pdf ref="pdf"
            :src="pdfUrl"
            :page="currentPage"
            @progress="loadedRatio=$event"
            @page-loaded="pageLoaded($event)"
            @num-pages="pageTotalNum=$event"
            @link-clicked="page=$event"
            />
            {{currentPage}}/{{pageTotalNum}}
            <div class="btn-box">
                <span class="prev-btn" @click.stop="changePdfPage('prev')">上一页</span>
                <span class="next-btn" @click.stop="changePdfPage('next')">下一页</span>
        </div>
    </div>
</template>
<script>
import pdf from "vue-pdf-signature";
import CMapReaderFactory from "vue-pdf-signature/src/CMapReaderFactory";
export default {
  props: {
    //是否显示所有页
    isShowAll: {
      type: Boolean,
      default: true,
    },
  },
  components: {
    pdf,
  },
  data() {
    return {
      pdfUrl: "/static/test/pdf", //pdf文件路径
      currentPage: 1, //当前页码
      pageTotalNum: 1, //总页数
      loadedRatio: 0, //pdf是否已加载完成 0:未完成  1:完成
    };
  },
  mounted() {
    this.pdfTask(this.pdfUrl);
  },
  methods: {
    /**
     * pdf初始化
     * @param {pdfUrl} string pdf路径 - 若为静态文件,需放在static文件夹下
     */
    pdfTask(pdfUrl) {
      const that = this;
      //该方法可以显示合同类型pdf中的印章、签名等,但字体较小的文案则无法显示
      var loadingTask = pdf.createLoadingTask(pdfUrl);

      //该方法可以完整显示文案,但无法显示合同类型pdf中的印章、签名
      var loadingTask = pdf.createLoadingTask({
        url: pdfUrl,
        CmapPacked: true,
        CMapReaderFactory,
      });

      loadingTask.promise
        .then((pdf) => {
          that.pdfUrl = loadingTask;
          that.pageTotalNum = pdf.numPages;
        })
        .catch((err) => {
          console.log("加载失败", err);
        });
    },
    /**
     * pdf加载
     */
    pageLoaded(e) {
      this.currentPage = e;
    },
    /**
     * 翻页
     * @param {pageOperation} 翻页类型 prev:上一页  next:下一页
     */
    changePdfPage(pageOperation) {
      let page = this.currentPage;
      if (pageOperation == "prev") {
        if (page == 1) return false;
        page--;
      }
      if (pageOperation == "next") {
        if (page == this.pageTotalNum) return false;
        page++;
      }
      this.currentPage = page;
    },
  },
};
</script>
<style lang="scss" scoped>
.pdf-content {
  width: 100%;
  .btn-box {
    width: 100%;
    display: flex;
    justify-content: space-between;
    span {
      display: block;
      width: 50%;
      height: 44px;
      text-align: center;
      line-height: 44px;
      color: #333;
      background: #fff;
    }
    .next-btn {
      color: #fff;
      background: #fa5050;
    }
  }
}
</style>

注意:该插件实际是使用canvas进行绘制,若同一个页面使用PDF显示的同时又使用canvas进行绘制,自制的canvas绘制会存在无法绘制的情况,小编还未有方案解决。

综上所述,由于小编的项目中PDF格式文件中的内容必会出现印章和签名,且询问了很多大佬都无解,所以该插件方法也被pass掉了,最后决定还是由后端将PDF文件格式转换成图片来实现。虽然该插件方案存在问题,如果PDF文件中无印章、签名等元素,纯文案的话,该插件文案还是给力的,中文也可以显示正常哦,所以小编还是在此将方案代码分享一下,希望对需要的童鞋有帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

vue显示PDF文件 的相关文章

随机推荐

  • java javaw 命令区别_java 和javaw 的区别

    javaw exe用法和java exe 相同 javaw的程序不在java console 上面显示任何东西 如果在开发程序 就用java 这样可以看到错误提示 如果是运行完成了的程序 就用javaw 可以提高一点速度 两个应用程序都能运
  • I2C总线的通讯距离

    关于I2C总线 I2C总线不适合远距离通信 尤其是使用线缆与接口器件进行通信时一般不选择 I2C 使用I2C总线都是在用一个开发板上或者距离比较近 如果是远距离通信 比如说超过2米 这个时候对硬件就有特殊的要求了 通信线缆小于0 2米 一般
  • STM32学习之以太网介绍

    以太网简介 以太网 Ethernet 是互联网技术的一种 由于它是在组网技术中占的比例最高 很多人直接把以太网理解为互联网 以太网是指遵守IEEE802 3标准组成的局域网 由IEEE 802 3标准规定的主要是位于参考模型的物理层 PHY
  • uboot命令使用学习(4)

    学习目标 uboot命令使用学习 4 EMMC和SD卡操作命令 学习内容 学习使用了正点原子的I MX6ULL教程及开发平台 1 mmc info命令 2 mmc rescan命令 3 mmc list命令 4 mmc dev命令 5 mm
  • 手撕RPC第一天

    前言 众所周知 RPC 远程服务调用 成为现代架构中不可或缺的一部分 那么 熟悉RPC的原理就显得相当重要了 在这个前提下 我开始了学习RPC之路 常见的rpc框架有轻量级的thrift 国内开源的使用众多的dubbo go实现的gRPC
  • linux cannot connect to wifi

    If you cannot connect to wifi while previously you can You may switch to a different kernel if you have an alternative o
  • Android xml属性大全

    第一类 属性值为true或false android layout centerHrizontal 水平居中 android layout centerVertical 垂直居中 android layout centerInparent
  • php:一次完整的HTTP请求过程笔记

    HTTP 事务执行过程 1 客户端 浏览器 做出请求操作 输入网址 点击链接 提交表单 2 客户端检测缓存 1 有缓存且较新 客户端直接读取本地缓存进行资源展示 2 有缓存但是不新 准备http请求包 发送至服务端进行缓存校验 3 客户端对
  • vue3 使用element plus 打包时 报错

    vue3 vite ts elementPlus中运行正常打包出错 能正常运行 但是打包出错 解决打包时出现导入element plus相关的爆红 导致无法打包的问题 如若出现类似于 Module element plus has no e
  • jenkins+ant&findbugs&fireline

    火线在jenkins上的安装 http magic 360 cn zh user html Jenkins jenkins插件离线下载的好地方 http updates jenkins ci org download plugins 在je
  • C语言运算符——自增与自减

    自增与自减 一个整数类型的变量自身加 1 可以这样写 a a 1 或者a 1 不过 C语言还支持另外一种更加简洁的写法 就是 a 或者 a 这种写法叫做自加或自增 意思很明确 就是每次自身加 1 相应的 也有a 和 a 它们叫做自减 表示自
  • 功能测试数据测试之数据测试关注点

    数据类型 常见数据类型 整型 浮点型 字符型 布尔型等 可用等价类方法对输入数据类型设计测试用例 数据长度 数据长度可能是固定长度或者是在某个范围内的长度 可用等价类和边界值方法对数据长度设计测试用例 数据一致性 组织数据测试该交易 在交易
  • Fatal Python error: init_sys_streams: can‘t initialize sys standard streamsPython runtime state: 问题

    哈喽 大家好 我是 奇点 江湖人称 singularity 刚工作几年 想和大家一同进步 一位上进心十足的 Java ToB端大厂领域博主 喜欢java和python 平时比较懒 能用程序解决的坚决不手动解决 如果有对 java 感兴趣的
  • canvas绘制火柴人

  • 每日面试题day02

    1 int 和 Integer 有什么区别 int 是基本数据类型 Integer 是其包装类 注意是一个类 在 java 中包装类 用途比较多的是用在于各种数据类型的转化中 2 重载和重写的区别 overload 重载 参数类型 个数 顺
  • vue3如何进行数据监听watch/watchEffect

    我们都知道监听器的作用是在每次响应式状态发生变化时触发 在组合式 API 中 我们可以使用 watch 函数和watchEffect 函数 当你更改了响应式状态 它可能会同时触发 Vue 组件更新和侦听器回调 默认情况下 用户创建的侦听器回
  • IntelliJ IDEA Plugins加载太慢_IntelliJ IDEA Plugins搜不出来【已解决】

    问题 IntelliJ IDEA Plugins加载太慢或者IntelliJ IDEA Plugins搜不出来 解决方案
  • html form 表单

    定义 form 表单在网页中主要负责数据采集功能 属于一个容器标记 表单组成 一个表单由 form元素 表单控件 和 表单按钮 组成 1 form元素 form元素用来创建表单 语法格式如下
  • SQL中根据经纬度计算两点之间的直线距离

    最近接到一个需求获取当前用户的经纬度 然后计算与目标地的的距离 我自己也是看别人的博客学习 自己也做个记录吧 直接放出计算的公式 不想浪费时间的 直接看公式套进去就成 依次是纬度 纬度 经度 round 6378 138 2 ASIN SQ
  • vue显示PDF文件

    小编最近接手的项目中 有个需求 前端显示后端返回的PDF格式的文件 经过小编两天的调研和试验 终于找到了一个比较好的插件方法 直接贴代码 1 安装 npm i vue pdf signature save dev 2 pdfShow vue