钉钉中预览打印PDF问题(无法使用blob地址)

使用pdfjs-dist预览文件

依赖

npm install pdfjs-dist@2.14.305

组件

<template>
  <div id="pageContainer">
    <div id="viewer"></div>
  </div>
</template>

<script>
import 'pdfjs-dist/web/pdf_viewer.css';
import * as pdfjsLib from 'pdfjs-dist';
import * as pdfjsViewer from 'pdfjs-dist/web/pdf_viewer';
import 'pdfjs-dist/build/pdf.worker.entry';
import * as pdfjsSandbox from 'pdfjs-dist/build/pdf.sandbox.js';

pdfjsLib.GlobalWorkerOptions.workerSrc = window.pdfjsWorker;

export default {
     
  name: 'PdfViewer',
  props: {
     
    pdfBlob: {
     
      type: Blob,
      required: true
    }
  },
  components: {
     },
  methods: {
     
    blobToArrayBuffer(blob) {
     
      return new Promise((resolve, reject) => {
     
        const reader = new FileReader();
        reader.onload = () => resolve(reader.result);
        reader.onerror = reject;
        reader.readAsArrayBuffer(blob);
      });
    }
  },
  async mounted() {
     
    if (!pdfjsLib.getDocument || !pdfjsViewer.PDFViewer) {
     
      alert(
        'Please build the pdfjs-dist library using\n  `gulp dist-install`'
      );
    }
    const CMAP_URL = './cmaps/';
    const CMAP_PACKED = true;
    const ENABLE_XFA = true;
    const SEARCH_FOR = '';
    const SANDBOX_BUNDLE_SRC = pdfjsSandbox;
    const container = document.getElementById('pageContainer');
    const eventBus = new pdfjsViewer.EventBus();
    const pdfLinkService = new pdfjsViewer.PDFLinkService({
     
      eventBus
    });
    const pdfFindController = new pdfjsViewer.PDFFindController({
     
      eventBus,
      linkService: pdfLinkService
    });
    const pdfScriptingManager = new pdfjsViewer.PDFScriptingManager({
     
      eventBus,
      sandboxBundleSrc: SANDBOX_BUNDLE_SRC
    });
    const pdfViewer = new pdfjsViewer.PDFViewer({
     
      container,
      eventBus,
      linkService: pdfLinkService,
      findController: pdfFindController,
      scriptingManager: pdfScriptingManager,
      enableScripting: true
    });
    pdfLinkService.setViewer(pdfViewer);
    pdfScriptingManager.setViewer(pdfViewer);

    eventBus.on('pagesinit', function() {
     
      pdfViewer.currentScaleValue = '1.5';
      if (SEARCH_FOR) {
     
        eventBus.dispatch('find', {
      type: '', query: SEARCH_FOR });
      }
    });

    const arrayBuffer = await this.blobToArrayBuffer(this.pdfBlob);
    const loadingTask = pdfjsLib.getDocument({
     
      data: arrayBuffer,
      cMapUrl: CMAP_URL,
      cMapPacked: CMAP_PACKED,
      enableXfa: ENABLE_XFA
    });
    const pdfDocument = await loadingTask.promise;
    pdfViewer.setDocument(pdfDocument);
    pdfLinkService.setDocument(pdfDocument, null);
  }
};
</script>

<style>
#pageContainer {
     
  position: absolute;
  overflow: hidden;
  width: 100%;
  text-align: center;
}
#pageContainer .page {
     
  display: inline-block;
  position: relative;
  overflow: hidden;
  box-sizing: border-box;
  margin-bottom: 2px;
}
#pageContainer #viewer .page {
     
  width: auto !important;
}
#pageContainer #viewer .page .canvasWrapper {
     
  width: auto !important;
}
#pageContainer #viewer .page .textLayer {
     
  width: auto !important;
}
#pageContainer #viewer .page .annotationLayer {
     
  width: auto !important;
}
</style>

打印

npm install vue-print-nb@1.7.5
<template>
	<div id="printDiv">
	  <div v-if="fileType === 'application/pdf'">
	    <PdfViewer :pdfBlob="previewUrl"/>
	  </div>
	  <div style="text-align: center;" v-else >
	    <img :src="previewUrl" />
	  </div>
	</div>
	<a-button type="primary" v-print="printMe">打印</a-button>
</template>

<script>
import PdfViewer from './PdfViewer.vue';
import Print from 'vue-print-nb';
import * as dd from 'dingtalk-jsapi';

export default {
     
  name: 'Preview', // 预览
  components: {
      PdfViewer },
  directives: {
      Print },
  data() {
     
    return {
     
      previewUrl: '',
      printMe: {
     
        // 打印区域
        id: 'printDiv',
        // 是否有打印预览
        preview: false
      },
      fileType: ''
    };
  }
}
</script>

相关推荐

  1. 打印PDF问题无法使用blob地址

    2023-12-16 15:52:04       96 阅读
  2. uniapp Vue2h5开发pdf无法问题

    2023-12-16 15:52:04       29 阅读
  3. 使用pdf.js实现pdf打印

    2023-12-16 15:52:04       33 阅读
  4. uniapp PDF文件/打开

    2023-12-16 15:52:04       55 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-16 15:52:04       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-16 15:52:04       101 阅读
  3. 在Django里面运行非项目文件

    2023-12-16 15:52:04       82 阅读
  4. Python语言-面向对象

    2023-12-16 15:52:04       91 阅读

热门阅读

  1. Nginx安装及基础指令

    2023-12-16 15:52:04       63 阅读
  2. ElasticSearch指南 - Mapping - Metadata fields

    2023-12-16 15:52:04       53 阅读
  3. 比whatsapp效果好---Google Messages RCS协议消息推送

    2023-12-16 15:52:04       64 阅读
  4. 假如董宇辉是个AI

    2023-12-16 15:52:04       59 阅读
  5. Linux学习教程(第十二章 Linux系统管理)二

    2023-12-16 15:52:04       36 阅读
  6. python 如何快速注释几行代码

    2023-12-16 15:52:04       61 阅读
  7. (洛谷)P8835 [传智杯 #3 决赛] 子串

    2023-12-16 15:52:04       54 阅读
  8. HAProxy 根据报文解析来定义不同的acl

    2023-12-16 15:52:04       50 阅读
  9. 【LeetCode】15. 三数之和(Set用法)

    2023-12-16 15:52:04       64 阅读
  10. C语言编程题-单身狗

    2023-12-16 15:52:04       55 阅读
  11. 小程序人脸识别—检测人脸图片获取图片

    2023-12-16 15:52:04       38 阅读
  12. 贪心算法总结

    2023-12-16 15:52:04       59 阅读
  13. SpringCloud 和 Linux 八股文第二期五问五答

    2023-12-16 15:52:04       68 阅读