java用pdf.js在线预览pdf文件(jeecg框架)

最近在jeecg框架的后台要做一个pdf在线预览的页面功能,可是每次点预览都是下载,所以就要解决这个问题,现在解决了,记录一下,防止后面踩坑。

先放代码:

下面是点“预览”按钮的点击事件,代码放到vue2的methods里面,代码如下:

      handleLook(record) {let token = Vue.ls.get(ACCESS_TOKEN);let token2 = Vue.ls.get(ACCESS_TOKEN);if (record && record.pdfbg) {let fileUrl= process.env.VUE_APP_API_BASE_URL+"/sb/dj/getPdf?url="+ record.jybg+"&token="+token2;let url='/pdfjs/web/viewer.html?token='+token+'&file='+encodeURIComponent(fileUrl);//方式一:在浏览器打开一个新页面,显示pdf//window.open(url, '_blank');//方式二:子页面弹出,显示pdfthis.$refs.pdfViewForm.pdfUrl =url;this.$refs.pdfViewForm.visible = true;}},

上面代码,其中:

1、process.env.VUE_APP_API_BASE_URL:是服务器上的访问地址(https://....);

2、如果想要读取你本地文件或者服务器文件 就 通过流的方式输出,预览 PDF 文件:

/sb/Sydj/getPdf?url="+ pdfPath+"&token="+token:调用后台方法,通过拿到pdf文件地址,通过流的方式输出到移动端页面显示。

下面是后台方法:

// 通过文件流的方式预览 PDF 文件@RequestMapping(value = "/getPdf", method = { RequestMethod.GET, RequestMethod.POST })public void pdfStreamHandeler(HttpServletRequest request, HttpServletResponse response, HttpSession session) {// 获取路径String filePath = request.getParameter("url");File file = new File(upLoadPath+ File.separator+ filePath);byte[] data = null;try {// 编辑请求头部信息// 解决请求头跨域问题(IE兼容性 也可使用该方法)response.setHeader("Access-Control-Allow-Origin", "*");response.setContentType("application/pdf");FileInputStream input = new FileInputStream(file);data = new byte[input.available()];input.read(data);response.getOutputStream().write(data);input.close();} catch (Exception e) {String aaa="";}}

3、如果是想让浏览器打开一个新窗口显示pdf,就选用方式一:

window.open(url, '_blank'); 比较简单;

如果是方式二,在当前窗口弹出显示pdf,就需要iframe嵌套一下:

<iframe id="pdfPreviewIframe" :src="pdfUrl" scrolling="auto"></iframe>

下面是遇到的坑:

官方网址:PDF.js - Home

在这里,大家一般都直接点下载,那就是最新版本,这个插件最新版本里包含.mjs文件,如下图所示

记得把pdf.js插件放到public下面

本地没有问题,能正常预览pdf,但线上服务器不可以,报如下这个错,.mjs文件的不被识别为Content-Type:application/javascript;

原因:

所以果断放弃pdf.js的最新版,下载了包含.js的旧pdf.js,解决了问题。

打包的代码,都在这里了。

参考文章:使用pdf.js在线预览 PDF (本地文件,服务器文件)

                 一篇文章教你使用 PDF.JS 在线预览 PDF (本地文件,服务器文件)

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

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

相关文章

【Mac】iTerm for mac(终端工具)软件介绍及安装教程

软件介绍 iTerm 是 macOS 上一个非常受欢迎的终端仿真器&#xff0c;提供了比默认的 Terminal 应用更多的功能和定制选项。它是一款开源软件&#xff0c;主要用于命令行界面的操作和开发者工具。 主要特点和功能&#xff1a; 分页和标签&#xff1a; iTerm 允许用户在单个窗…

师出名门,全靠师兄师姐罩着

前言 2024年的高考刚结束,考生又到了做选择的时候了。选择大于努力,方向错了&#xff0c;白费劲。 耳熟能详的名校 名校意味着? 卓越的教育资源&#xff1a;包括顶尖的师资队伍&#xff0c;他们在学术研究和教学方面经验丰富、造诣深厚。同时&#xff0c;拥有先进的教学设施、…

英国牛津大学博士后职位—统计学

牛津大学&#xff08;University of Oxford&#xff09;&#xff0c;简称“牛津”&#xff08;Oxford&#xff09;&#xff0c;位于英国牛津&#xff0c;是一所公立研究型大学&#xff0c;采用传统学院制。是罗素大学集团成员&#xff0c;被誉为“金三角名校”、“G5超级精英大…

【电控笔记5.12】滑膜估测器SMO-无感控制

滑模控制(Sliding Mode Control, SMC)是一种用于控制非线性系统的鲁棒控制方法。它通过设计一个滑模面,使系统状态沿着滑模面运动,从而达到期望的控制目标。滑模控制器具有对系统参数变化和外界干扰的鲁棒性,因而在许多工业控制系统中得到了广泛应用。 滑模控制的基本原理…

Python实现IPv4地址和16进制互相转换

Python实现IPv4地址和16进制互相转换 import socketdef ip_to_hex16(ipaddr):# 使用 socket 库中的方法将IP地址转换为网络字节序的二进制表示hex_bytes socket.inet_aton(ipaddr)# 将二进制数据转换为整数, 其中byteorderbig 表示使用大端字节序&#xff08;从高位到低位&…

Leetcode刷题笔记 | 二叉树基本性质 | 一天的题量 | 5道题目 | 深度优先搜索 | 广度优先搜索 | 递归 | 遍历

&#x1f64b;大家好&#xff01;我是毛毛张! &#x1f308;个人首页&#xff1a; 神马都会亿点点的毛毛张 &#x1f4cc;本期毛毛张分享的是LeetCode关于二叉树&#x1f332;的性质的一些基础题&#xff0c;做这些题目的本质还是遍历二叉树&#x1f3c3;‍➡️的过程&#…

秋招Java后端开发冲刺——非关系型数据库篇(Elasticsearch)

Elasticsearch 本文对非关系型数据库Elasticsearch的基础知识及常见面试问题进行介绍。 &#xff08;一&#xff09;基础知识 1. Elasticsearch 是一个基于 Apache Lucene 的分布式、高扩展、高实时的搜索与数据分析引擎适用于各种数据类型&#xff0c;包括文本、数值、日期…

使用Jenkins进行持续集成与部署

在现代软件开发中&#xff0c;持续集成&#xff08;CI&#xff09;和持续部署&#xff08;CD&#xff09;是确保代码质量和加速交付流程的关键实践。Jenkins&#xff0c;作为一个开源的自动化服务器&#xff0c;提供了强大的工具来支持这些实践。本文将详细介绍如何使用Jenkins…

Windows 中的 Hosts 文件是什么?如何找到并修改它?

什么是 Hosts 文件 Hosts 文件是一个纯文本文件&#xff0c;存在于几乎所有的操作系统中&#xff0c;用于将主机名映射到 IP 地址。在域名系统&#xff08;DNS&#xff09;尚未普及之前&#xff0c;Hosts 文件是计算机网络中唯一用于主机名解析的方式。随着网络规模的扩大和 D…

show-overflow-tooltip 解决elementui el-table标签自动换行的问题

elementui中 el-table中某一行的高度不想因为宽度不够而撑开换行展示的解决方法。可通过show-overflow-tooltip属性解决&#xff0c;如下 代码是这样的 <el-table-column width"80" prop"id" label"ID"></el-table-column> <el…

wsl2收缩虚拟磁盘,减少空间占用

一、说明 由于WSL2使用的是虚拟磁盘&#xff0c;当虚拟磁盘的空间变大时&#xff0c;仅仅删除WSL2文件系统中没有用到的大文件&#xff0c;磁盘空间是无法自动收缩回收的。本文介绍了一种回收WSL2虚拟磁盘空间的方法。 二、停止WSL2 在收缩 WSL2 虚拟磁盘之前&#xff0c;需…

Linux服务器如何测试存储盘性能是否正常?FIO磁盘压测工具的使用详解

针对磁盘的压力性能测试工具有很多&#xff0c;简单的测试可以通过dd命令实现&#xff0c;而比较专业和强大的磁盘IO测试工具&#xff0c;当然首推FIO了。本文将和你们分享FIO工具安装和用法&#xff0c;希望可以帮助到你们~想要了解FIO工具首先你得知道顺序读写和随机读写这两…

编程开发不得不懂的世界协调时UTC的由来

在各种时间标准出现之前&#xff0c;各地都是根据太阳来进行计时的。把太阳连续2次经过地球同一位置所经历的时间间隔称为真太阳日&#xff0c;然后再把这个太阳日划分为更小的时间单位&#xff0c;例如中国古代使用日晷记录时间&#xff0c;把一个太阳日分为12个时辰。因为地球…

机器学习之元学习Reptile

元学习(Meta-learning)是一种机器学习方法,其目的是训练模型能够快速适应新任务。Reptile 是一种简单而有效的元学习算法,由 OpenAI 提出。它属于一种梯度下降方法,旨在通过多次微调模型参数来提高模型在新任务上的表现。 Reptile算法概述 Reptile 算法的核心思想是通过…

MySQL之可扩展性和高可用性(一)

可扩展性 负载均衡 一主多备间的负载均衡 最常见的复制拓扑结构就是一个主库加多个备库。我们很难绕开这个架构&#xff0c;许多应用都假设只有一个目标机器用于所有的写操作&#xff0c;或者所有的数据都可以从单个服务器上获得。尽管这个架构不太具有很好的可扩展性&#…

开启 k8s 命令补全功能

1. 查看 kubectl 帮助信息 [rootk8s231 /etc/kubernetes]# kubectl --helpSettings Commands:label Update the labels on a resourceannotate Update the annotations on a resourcecompletion Output shell completion code for the specified shell (bash,…

FFmpeg教程-三-播放pcm文件-1

目录 一&#xff0c;下载SDL 二&#xff0c;在Qt中测试 1&#xff0c;在pro文件中加入路径 2&#xff0c;在.cpp文件中加入头文件 3&#xff0c;进行测试 4&#xff0c;显示结果 一&#xff0c;下载SDL 通过编程的方式播放音视频&#xff0c;也是需要用到这2个库: FFmpeg…

CICD之Git版本管理及基本应用

CICD:持续集成,持续交付--让对应的资料,对应的项目流程更加规范--提高效率 CICD 有很多的工具 GIT就是其中之一 1.版本控制概念与环境搭建 GIT的概念: Git是一款分布式源代码管理工具(版本控制工具) ,一个协同的工具。 Git得其数据更像是一系列微型文件系统的快照。使用Git&am…

一年前 LLM AGI 碎片化思考与回顾系列⑧ · 穿越SystemⅡ未知之境

阅读提示&#xff1a; 本篇系列内容的是建立于自己过去一年在以LLM为代表的AIGC快速发展浪潮中结合学术界与产业界创新与进展的一些碎片化思考并记录最终沉淀完成&#xff0c;在内容上&#xff0c;与不久前刚刚完稿的那篇10万字文章 「融合RL与LLM思想&#xff0c;探寻世界模型…

智慧校园-教材管理系统总体概述

智慧校园教材管理系统&#xff0c;作为教育信息化进程的又一实践成果&#xff0c;正逐步改变着传统教材管理的模式。该系统通过集成先进的信息技术&#xff0c;对教材从采购、分配、使用到回收的全过程进行了全面的数字化改造&#xff0c;旨在构建一个高效、透明、节约的教材管…