使用vue-pdf预览pdf和解决pdf电子签章显示问题

使用vue-pdf预览pdf和解决pdf电子签章显示问题

第一步:npm install vue-pdf

第二步页面使用vue-pdf

<template>
  <div class="pdf1">
    <Pdf v-for="i in numPages" :key="i" :src="src" :page="i" />
  </div>
</template>

<script>
import Pdf from "vue-pdf";

export default {
  components: {
    Pdf
  },
  data() {
    return {
      numPages: undefined,
      src: "",
      fileUrl: `${window.location.origin}/test1.pdf`
    };
  },
  mounted() {},

  created() {
    this.getPdfs();
  },
  mounted() {},
  methods: {
    // 获取pdf
    getPdfs() {
      // 引入pdf.js的字体
      let CMAP_URL = "https://unpkg.com/pdfjs-dist@2.0.943/cmaps/";
      // let CMAP_URL = `${window.location.origin}/cmaps/`;

      this.src = Pdf.createLoadingTask({
        // url: 'http://h1.pdfdo.com/Download/112617223362/112617223362.html', //在线链接pdf
        url: this.fileUrl, //本地pdf
        cMapUrl: CMAP_URL,
        cMapPacked: true
      });
      this.src.promise.then(pdf => {
        this.numPages = pdf.numPages;
      });
    }
  }
};

第三步pdf预览电子签章显示问题-解决办法

步骤一: 在node_modules/pdfjs-dist/build/pdf.worker.js注释掉一行代码

if (data.fieldType === "Sig") {
      data.fieldValue = null;
      // 注释掉底下这行 就可以显示电子签章
      // this.setFlags(_util.AnnotationFlag.HIDDEN);
}

步骤二:在node_modules/pdfjs-dist/es5/build/pdf.worker.js注释掉一行代码

 if (data.fieldType === "Sig") {
    data.fieldValue = null;
      // 注释掉底下这行 就可以显示电子签章
      // _this3.setFlags(_util.AnnotationFlag.HIDDEN);
 }
### Vue 中实现 PDF 预览的功能 在 Vue 项目中实现 PDF 预览功能有多种方式,以下是常见的几种方法及其特点: #### 方法一:使用 `vue-pdf` 插件 `vue-pdf` 是一个基于 `pdf.js` 的轻量级插件,能够方便地集成到 Vue 项目中。通过这个插件可以轻松加载并渲染 PDF 文件。 下面是一个简单的例子来说明如何使用它: ```html <template> <div class="preview-pdf"> <pdf v-for="i in numPages" :key="i" :src="pdfSrc" :page="i"></pdf> </div> </template> <script> import pdf from 'vue-pdf' export default { components: { pdf }, data() { return { pdfSrc: '/path/to/your/file.pdf', numPages: undefined, } }, mounted() { this.loadPdf() }, methods: { loadPdf() { const loadingTask = pdf.createLoadingTask(this.pdfSrc) loadingTask.promise.then(pdf => { this.numPages = pdf.numPages }) } } } </script> ``` 此方法的优点在于其灵活性以及对自定义样式的支持[^2]。 --- #### 方法二:利用 `<iframe>` 嵌入 PDF 文档 如果希望快速嵌入 PDF 并减少开发工作量,则可以直接使用 HTML 的 `<iframe>` 标签。这种方式无需额外引入第三方库即可完成基本的 PDF 显示需求。 示例代码如下所示: ```html <template> <div class="pdf-preview-container"> <iframe :src="pdfUrl" width="100%" height="800px"></iframe> </div> </template> <script> export default { data() { return { pdfUrl: "/path/to/your/file.pdf" }; } }; </script> ``` 需要注意的是,这种方法完全依赖于浏览器内置的支持能力,在某些特殊情况下可能无法满足复杂交互的要求[^3]。 --- #### 方法三:处理电子签名隐藏问题 当遇到 PDF 文件中的电子签名被默认隐藏的情况时,可以通过修改底层 `pdfjs-dist` 库的行为解决这一问题。具体操作是在对应的 worker 脚本文件里找到负责设置标志位的部分并将之禁用掉。 例如,在路径 `node_modules/pdfjs-dist/es5/build/pdf.worker.js` 找到类似这样的逻辑片段: ```javascript if (data.fieldType === 'Sig') { data.fieldValue = null; _this3.setFlags(_util.AnnotationFlag.HIDDEN); } ``` 将其改为注释状态或者调整条件判断语句即可让电子签章正常显现出来[^4]。 --- ### 总结 以上三种方案各有优劣之处,开发者应根据实际应用场景选取最合适的那一种。对于追求高性能且需要高度定制化的场合推荐采用 **方法一**;而对于简单快捷的需求来说则可以选择更为简便直观的 **方法二** 或者针对特定场景优化后的版本如 **方法三**。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

java亮小白1997

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值