当前位置: 首页 > news >正文

钉钉中预览打印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>

相关文章:

  • 国产Apple Find My「查找」认证芯片-伦茨科技ST17H6x芯片
  • 聊聊long类型装箱和拆箱性能问题
  • TCP/IP 四层体系结构
  • 如何通过TortoiseGit可视化工具查看Git管理的版本树和信息(工作树变更)内容
  • 不同的葡萄酒瓶盖会影响葡萄酒饮用的体验
  • 【程序】STM32 读取光栅_编码器_光栅传感器_7针OLED
  • 基于ASF-YOLO融合空间特征和尺度特征的新型注意力尺度序列融合模型开发构建医学场景下细胞分割检测识别系统,以【BCC、DSB2018数据集为基准】
  • wpf TelerikUI使用DragDropManager
  • Kotlin ArrayList类型toTypedArray转换Array
  • RHEL8_Linux使用podman管理容器
  • 贝蒂详解<string.h>哦~(用法与实现)
  • KubeKey 离线部署 KubeSphere v3.4.1 和 K8s v1.26 实战指南
  • JVM 调优
  • 大华 DSS 数字监控系统 itcBulletin SQL 注入漏洞复现
  • 软件测试计划文档
  • 《Java8实战》-第四章读书笔记(引入流Stream)
  • 【node学习】协程
  • 【翻译】Mashape是如何管理15000个API和微服务的(三)
  • 【腾讯Bugly干货分享】从0到1打造直播 App
  • 5分钟即可掌握的前端高效利器:JavaScript 策略模式
  • fetch 从初识到应用
  • JavaScript工作原理(五):深入了解WebSockets,HTTP/2和SSE,以及如何选择
  • Js基础知识(一) - 变量
  • Linux编程学习笔记 | Linux IO学习[1] - 文件IO
  • MD5加密原理解析及OC版原理实现
  • nginx(二):进阶配置介绍--rewrite用法,压缩,https虚拟主机等
  • node学习系列之简单文件上传
  • Promise初体验
  • SpriteKit 技巧之添加背景图片
  • 对话:中国为什么有前途/ 写给中国的经济学
  • 机器学习学习笔记一
  • 警报:线上事故之CountDownLatch的威力
  • 蓝海存储开关机注意事项总结
  • 面试总结JavaScript篇
  • 前端相关框架总和
  • 使用iElevator.js模拟segmentfault的文章标题导航
  • mysql面试题分组并合并列
  • ​ ​Redis(五)主从复制:主从模式介绍、配置、拓扑(一主一从结构、一主多从结构、树形主从结构)、原理(复制过程、​​​​​​​数据同步psync)、总结
  • #{}和${}的区别是什么 -- java面试
  • #include<初见C语言之指针(5)>
  • #中国IT界的第一本漂流日记 传递IT正能量# 【分享得“IT漂友”勋章】
  • (04)Hive的相关概念——order by 、sort by、distribute by 、cluster by
  • (附源码)python房屋租赁管理系统 毕业设计 745613
  • (附源码)python旅游推荐系统 毕业设计 250623
  • (附源码)计算机毕业设计ssm基于Internet快递柜管理系统
  • (转) 深度模型优化性能 调参
  • (转)C#调用WebService 基础
  • (转)Scala的“=”符号简介
  • (轉貼) 寄發紅帖基本原則(教育部禮儀司頒布) (雜項)
  • *p=a是把a的值赋给p,p=a是把a的地址赋给p。
  • .Mobi域名介绍
  • .net framework 4.0中如何 输出 form 的name属性。
  • .NET国产化改造探索(三)、银河麒麟安装.NET 8环境
  • .NET面试题(二)
  • .net中调用windows performance记录性能信息