office文件 vue 预览_vue实现pdf文档在线预览功能

office文件 vue 预览_vue实现pdf文档在线预览功能针对android系统不支持pdf文档在线预览,可通过引入pdf.js插件实现,其具体实现步骤如下一、引入插件方式一:npminstall–savepdfjs-dist,安装完成后在vue项目的node_modules出现如下依赖方式二:只引入pdf.js的核心文件pdf.js和pdf.work.js,其他无关的文件全部删除,如图方式三:将插件直接放在static文件夹下,如图二、前端页面…

大家好,又见面了,我是你们的朋友全栈君。

针对android系统不支持pdf文档在线预览,可通过引入pdf.js插件实现,其具体实现步骤如下

一、引入插件

方式一:npm install –save pdfjs-dist,安装完成后在vue项目的node_modules出现如下依赖

office文件 vue 预览_vue实现pdf文档在线预览功能

方式二:只引入pdf.js的核心文件pdf.js和pdf.work.js,其他无关的文件全部删除,如图

office文件 vue 预览_vue实现pdf文档在线预览功能

方式三:将插件直接放在static文件夹下,如图

office文件 vue 预览_vue实现pdf文档在线预览功能

二、前端页面代码

方式一和方式二:特点精简

// 方式一

import PDFJS from ‘pdfjs-dist’

// 方式二

import * as PDFJS from ‘../../../static/pdf/build/pdf’

export default {

// 返回数据

data () {

return {

pdfDoc: null,

pages: 0

}

},

created () {

},

mounted () {

this.showPdf()

},

methods: {

showPdf: function () {

// 请求本地文件

let url = ‘/static/pdf/web/compressed.tracemonkey-pldi-09.pdf’

// 跨域请求文件,需要走后台代理,后台需要将文件流返回前端才可在页面显示

// let url = ‘/pdf/showPdf?pdfUrl=http://test.hccb.cc/corporBankWXTest/static/123.pdf’

this.loadFile(url)

},

renderPage: function (num) {

let _this = this

this.pdfDoc.getPage(num).then(function (page) {

let canvas = document.getElementById(‘the-canvas’ + num)

let ctx = canvas.getContext(‘2d’)

let dpr = window.devicePixelRatio || 1.0

let bsr = ctx.webkitBackingStorePixelRatio ||

ctx.mozBackingStorePixelRatio ||

ctx.msBackingStorePixelRatio ||

ctx.oBackingStorePixelRatio ||

ctx.backingStorePixelRatio || 1.0

let ratio = dpr / bsr

let viewport = page.getViewport(window.screen.availWidth / page.getViewport(1).width)

canvas.width = viewport.width * ratio

canvas.height = viewport.height * ratio

canvas.style.width = viewport.width + ‘px’

canvas.style.height = viewport.height + ‘px’

ctx.setTransform(ratio, 0, 0, ratio, 0, 0)

var renderContext = {

canvasContext: ctx,

viewport: viewport

}

page.render(renderContext)

if (_this.pages > num) {

_this.renderPage(num + 1)

}

})

},

loadFile: function (url) {

let _this = this

PDFJS.getDocument(url).then(function (pdf) {

_this.pdfDoc = pdf

_this.pages = _this.pdfDoc.numPages

_this.$nextTick(() => {

_this.renderPage(1)

})

})

}

}

}

canvas {

display: block;

border-bottom: 1px solid black;

}

方式三:功能强大,但是引入过多无用文件,此种方式的filePath如为本地文件不进行编码也可发送请求,如为跨域文件不进行编码无法发送请求,因此建议统一进行编码。

export default {

// 返回数据

data () {

return {

url: ”

}

},

// 模块创建时执行

created () {

},

// 模块渲染时执行

mounted () {

// 本地请求文件

let filePath = encodeURIComponent(‘/static/pdf/web/compressed.tracemonkey-pldi-09.pdf’)

// 跨域请求文件,需走后台代理

// let filePath2 = encodeURIComponent(‘/pdf/showPdf?pdfUrl=http://test.hccb.cc/corporBankWXTest/static/123.pdf’)

// pdf文档展示的页面

this.url = ‘/static/pdf/web/viewer.html?file=’ + filePath

},

// 定义模块测试方法

methods: {

// 此方法用于动态确定元素iframe的高度,使展示的pdf文档占满整个屏幕

sureHeight: function () {

let element = document.getElementById(‘iframe’)

element.style.height = window.screen.height + ‘px’

}

}

}

三、后台代码实现

后台通过http请求将获取的文档流返回给前端

@Controller

public class ShowPdfController {

@RequestMapping(name = “/showPdf”)

public String showPdf(HttpServletRequest request, HttpServletResponse response, String pdfUrl) {

try {

pdfUrl = pdfUrl.trim();

URL url = new URL(pdfUrl);

HttpURLConnection conn = (HttpURLConnection) url.openConnection();

conn.setConnectTimeout(5*1000);

InputStream inputStream = conn.getInputStream();

response.setHeader(“Content-Disposition”, “attachment;fileName=show.pdf”);

response.setContentType(“multipart/form-data”);

OutputStream outputStream = response.getOutputStream();

IOUtils.write(IOUtils.toByteArray(inputStream), outputStream);

} catch (Exception e) {

e.printStackTrace();

}

return null;

}

}

具体采用哪种方式实现pdf文档的在线预览,可根据项目实际情况选择,如业务简单建议使用方式一和方式二(精简),如业务复杂建议使用方式三(功能强大)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/144761.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • java activiti 教程_最近学习工作流 推荐一个activiti 的教程文档「建议收藏」

    java activiti 教程_最近学习工作流 推荐一个activiti 的教程文档「建议收藏」异步操作activiti通过事务方式执行流程,可以根据你的需求定制。现在开始看一下activiti通常是如何处理事务的。如果触发了activiti的操作(比如,开始流程,完成任务,触发流程继续执行),activiti会推进流程,直到每个分支都进入等待状态。更抽象的说,它会流程图执行深度优先搜索,如果每个分支都遇到等待状态,就会返回。等待状态是”稍后”需要执行任务,就是说activiti会把…

    2022年7月21日
    27
  • 黑盒测试c语言用例,黑盒测试用例设计技术包括_测试用例包括什么_常用黑盒测试用例设计(4)…

    黑盒测试c语言用例,黑盒测试用例设计技术包括_测试用例包括什么_常用黑盒测试用例设计(4)…因此,可以把全部输入数据合理地划分为若干等价类,在每一个等价类中取一个数据作为测试的输入条件,这样就可以用少量的代表性测试数据,来取得较好的测试结果。黑盒测试用例设计技术包括*是指对于程序的规格说明来说,是合理的有意义的输入数据构成的集合。利用它可以检验程序是否实现预先规定的功能和性能。在具体问题中,有效等价类可以是一个,也可以是多个。有效等价类*是指对于程序的规格说明…

    2022年6月13日
    34
  • 弱电机房空调设计规范要求_弱电机房施工规范国家标准

    弱电机房空调设计规范要求_弱电机房施工规范国家标准原标题:弱电机房设计内容规范大全云计算和虚拟化等新技术的出现,使得数据中心演变成一个迥然不同的环境。数据中心机房的地位也是越来越高,那么我们应该如何对弱电机房进行设计呢?这其中有许多的规范需要我们来遵守,下面为大家详细的进行罗列。GB50174—2017《数据中心设计规范》GB/T2887—2000《电子计算机场地通用规范》GB9361—88《计算机站场地安全要求》GB50057—94《建筑物防雷…

    2022年9月27日
    4
  • 【图像处理】计算Haar特征个数

    【图像处理】计算Haar特征个数最早的Haar特征由PapageorgiouC.等提出(《Ageneralframeworkforobjectdetection》),后来PaulViola和MichalJones提出利用积分图像法快速计算Haar特征的方法(《Rapidobjectdetectionusingaboostedcascadeofsimplefeatures》)。之后,Raine

    2022年6月26日
    23
  • Longest Common Prefix_LeetCode

    Longest Common Prefix_LeetCode1.思路:求strs数组的长度,当len==0,len==1分开考虑;i从1-min_len,以strs[0][i]作为对照,一旦出现strs[j][i]!=strs[0][i],结束循环,则输出之前判断好了的字符串。 classSolution:deflongestCommonPrefix(self,strs):""":typestrs…

    2022年5月6日
    43
  • c# mysql executenonquery_C#与数据库访问技术总结(八)之ExecuteNonQuery方法

    c# mysql executenonquery_C#与数据库访问技术总结(八)之ExecuteNonQuery方法ExecuteNonQuery方法ExecuteNonQuery方法主要用来更新数据。通常使用它来执行Update、Insert和Delete语句。该方法返回值意义如下:对于Update、Insert和Delete语句,返回值为该命令所影响的行数。对于所有其他类型的语句,返回值为-1。Command对象通过ExecuteNonQuery方法更新数据库的过程非常简单,需要进行的步骤如下:(1)创建数…

    2022年9月11日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号