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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 字符串匹配算法综述论文_多字符串匹配

    字符串匹配算法综述论文_多字符串匹配字符串匹配算法综述字符串匹配算法综述:BF、RK、KMP、BM、Sunday字符串匹配算法,是在实际工程中经常遇到的问题,也是各大公司笔试面试的常考题目。此算法通常输入为原字符串(string)和子串(pattern),要求返回子串在原字符串中首次出现的位置。比如原字符串为“ABCDEFG”,子串为“DEF”,则算法返回3。常见的算法包括:BF(BruteForce,暴力检索)、RK(R…

    2022年8月21日
    5
  • python之pandas数据筛选和csv操作

    本博主要总结DaraFrame数据筛选方法(loc,iloc,ix,at,iat),并以操作csv文件为例进行说明1.数据筛选(1)单条件筛选(2)多条件筛选可以使用&(并)与|(

    2021年12月29日
    32
  • 数据建模方法及步骤图_comsol建模步骤教程

    数据建模方法及步骤图_comsol建模步骤教程何为建模?数据几乎总是用于两种目的:操作型记录的保存和分析型决策的制定。简单来说,操作型系统保存数据,分型型系统使用数据。前者一般仅反映数据的最新状态,按单条记录事务性来处理;其优化的核心是更快地处理事务。后者往往是反映数据一段时间的状态变化,按大批量方式处理数据;其核心是高性能、多维度处理数据。通常我们将操作型系统简称为OLTP(On-LineTransactionProcessing)…

    2022年9月16日
    7
  • mysql手机号段地区库_最新全国手机号段归属地数据库下载(mysql+xlsx+txt格式)46万条…「建议收藏」

    mysql手机号段地区库_最新全国手机号段归属地数据库下载(mysql+xlsx+txt格式)46万条…「建议收藏」在做网站程序时,经常用到校验用户输入的手机号归属地或所属移动,电信,联通等服务商,本手机号码段归属地数据库包括支持可查省份城市运营商邮编区号。而且提供.mysql,excel,txt三种数据格式数据库,2020年11月份最新的包括46万条记录集,可方便为实现手机号码段归属地查询提供强大后台数据库支持。三大运营商最新号段移动号段:134135136137138139147148…

    2022年7月22日
    16
  • UVA – 12130 Summits

    UVA – 12130 Summits

    2022年1月2日
    46
  • acwing-181. 回转游戏(IDA*+迭代加深)[通俗易懂]

    acwing-181. 回转游戏(IDA*+迭代加深)[通俗易懂]如下图所示,有一个 # 形的棋盘,上面有 1,2,3 三种数字各 8 个。给定 8 种操作,分别为图中的 A∼H。这些操作会按照图中字母和箭头所指明的方向,把一条长为 7 的序列循环移动 1 个单位。例如下图最左边的 # 形棋盘执行操作 A 后,会变为下图中间的 # 形棋盘,再执行操作 C 后会变成下图最右边的 # 形棋盘。给定一个初始状态,请使用最少的操作次数,使 # 形棋盘最中间的 8 个格子里的数字相同。输入格式输入包含多组测试用例。每个测试用例占一行,包含 24 个数字,表示将初始棋

    2022年8月9日
    3

发表回复

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

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