vue3 实现预览pdf的几种方式(vue3-pdf, iframe流展示,vue-office/pdf)

这篇具有很好参考价值的文章主要介绍了vue3 实现预览pdf的几种方式(vue3-pdf, iframe流展示,vue-office/pdf)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

功能描述:

要实现菜单(二级)绑定文件,并进行预览(点击菜单即触发),支持文件上传下载(绑定菜单),文件以byte[]形式保存到数据库(至于为什么不用文件存储系统,因为这是领导定的 =,= 而且这个功能比较小,数据也不多,成本有限),同时,要解析pdf文件里的内容(固定模板),抓取部门段落信息单独保存;页面展示的时候还是目录之后展示(目前是暴力从目录的后一页开始展示),需求明确,开发!

技术栈

后端: java + springboot + mysql
前端: vue3 + ts

后端实现思路: 因为需要完全开源,所以首选了pdfBox,后端很简单的处理

  1. multipartFile 直接转成byte[],保存到数据库配合菜单信息(业务不多做阐述)
  2. 解析pdf文件,根据模板里的固定标题进行字符串切割,然后在判断包含下一个标题的字符串,定位到需要保存的字符串内容,以字符串的形式保存到刚才文件的同一条数据中,搞定!

曾尝试过后端pdf流转html和图片的方式去给前端传值,都一一否定了

转html有xss风险,转图片,不如直接交给前端处理,后端处理容易丢失像素,而且尝试了好多方法也没解决

前端实现思路:

1.最开始是直接以iframe形式 直接接收后端返回的流

ts:

const iframeUrl:any = ref("");

axios({
	url:xxx,
	method:"get",
	responseType:"blob"
}).then((res) =>{
	const blob = new Blob([res.data],{type: 'application/pdf'});
	iframeUrl.value = window.URL.createObjectURL(blob);
	}
)

vue:

<iframe :src="iframeUrl" style="position:absolute;">

可以预览,但是带了大框,页面分割感特别强,而且不同浏览器应该展示也不一样(i guess)

跟产品给我画的宏伟蓝图差了不少,所以pass;

2.采用vue3-pdf 或者 vue-office/pdf

需要借助外力了,就安装一下:

npm install vue3-pdf
或者
npm install @vue-office/pdf

安装完,如果下面报找不到对应module(不报错,跳过这步)

import pdf from 'vue3-pdf'

找到你自己项目里面的xx.d.ts,加入如下声明:

declare module 'vue3-pdf'

然后就是具体的代码处理了

vue3-pdf(因为是要作展示用,而且文档不是很多页,因此不考虑加入上下翻页,全展示)

但是vue3-pdf通病,默认只展示第一页,所以需要获取页数,来通过v-for来把所有页都展示出来(如果页数多,再考虑做翻页操

作)

<div v-for="(item,index) in numPages" :key= "item">
	<pdf v-if="index>2" :src="iframeUrl" :page="item" style="wideth:90%;margin:-8px">
</div>

<!-- 因为我不是要全展示,前面三页是目录封皮,就跳过了   numPages通过一个方法获取-->
const iframeUrl:any = ref("");
const numPages = ref<any>();

getNumPages方法需要再转iframeUrl之后调用,然后将numPages传递给vue
    
const getNumPages = (iframeUrl:any) => {
	if(iframeUrl){
		let loadingTask = pdf.createLoadingTask(iframeUrl.value)
		loadingTask.promise.then((pdf:{numPages:Ref<String>;}) =>{
		numPages.value = pdf.numPages
		}).catch((err:any) =>{
			console.error('pdf 加载失败',err)
		}
		)
	}
}


vue-office/pdf文章来源地址https://www.toymoban.com/news/detail-601851.html

<template>
  <vue-office-pdf :src="iframeUrl" class="docx-calss" />
</template>

<script setup lang='ts'>
import { ref } from 'vue'
//引入VueOfficePdf组件
import VueOfficePddf from '@vue-office/pdf'
//引入相关样式
import '@vue-office/pdf/lib/index.css'
const props = defineProps({
  excel: {
    type: ArrayBuffer,
    default: null
  }
})
</script>
<style scoped lang='scss'>
.docx-calss {
  height: calc(100vh - 60px);
}
</style>

到了这里,关于vue3 实现预览pdf的几种方式(vue3-pdf, iframe流展示,vue-office/pdf)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • vue深拷贝的几种实现方式

    1、通过递归方式实现深拷贝 比较全面的深拷贝,缺点是较为繁琐 2、JSON.parse(JSON.stringify(obj)) 满足一般使用场景,但无法实现对象中方法(function)的深拷贝 3、jQuery的extend方法实现深拷贝 4、Object.assign(obj1, obj2) 只有一级属性为深拷贝,二级属性后就是浅拷贝 5、扩展运算符 只有

    2024年02月09日
    浏览(36)
  • Vue3实现PDF文件预览 (低版本浏览器兼容)

    前言:         最近和小伙伴们一起合作完成一个企业级知识库项目,其中一个功能就是后端把所有格式的文件转换为PDF,前端实现渲染PDF文件从而实现预览,干了整整一周(考虑到低版本浏览器的兼容),试用了几种方案(iframe预览已被废弃,不适用本项目,想了解的同学

    2024年01月20日
    浏览(34)
  • Vue3实现组件级基类的几种方法

    Vue3的组件有三种代码组织方式 纯Option API (不含setup) option API + setup 纯 setup (即composition API) 对于这三种形式,设置基类的方法也略有不同。 vue3提供了 mixins和extends,但是尝试之后发现这两种方法只支持纯OptionAPI,设置的data会被识别,但是设置的setup里return 的 reactive,完

    2024年02月01日
    浏览(47)
  • Vue3 实现文件预览 Word Excel pdf 图片 视频等格式 大全!!!!

    先上效果图    插件安装 先说 word 文件是docx-preview插件           excel文件是用 xlsx 插件     介绍后端返回的数据 因为在拦截器处 做了对数据的处理 最后你调接口拿到的数据是 一个对象 里面包含: url :  blob对象转换的用于访问 Blob 数据的临时链接。这个链接可以被用于

    2024年02月07日
    浏览(52)
  • .net生成PDF文件的几种方式

      1、使用Microsoft.Office.Interop.Word.dll将word转换为PDF dll可以单独下载,一般在电脑中有,位置:C:WindowsMicrosoft.NETFrameworkv4.0.30319Temporary ASP.NET Filesvs199bd4f2edef3bc1assemblydl360e9086353bea978_07e9d401Microsoft.Office.Interop.Word.DLL     public bool WordToPdf(object sourcePath, string targetPath)      

    2024年02月16日
    浏览(30)
  • 浏览器中把HTML转为PDF的几种方式

    操作步骤 另存为pdf 优点 简便易用: 浏览器自带的打印功能通常是用户界面友好的,不需要额外的插件或工具,用户只需点击几下即可完成转换。 跨平台支持: 大多数现代浏览器都支持这种方式,而且通常在不同操作系统上表现一致,从而实现跨平台的HTML到PDF的转换。 无

    2024年01月18日
    浏览(45)
  • Vue3PDF预览(vue3-pdf-app)

    vue3-pdf-app 插件 网站预览PDF最佳且最简单的方式: 如果需要自定义网页内预览,可以采用本PDF预览组件(PDFViewer.vue) 本组件基于  vue3-pdf-app@1.0.3  插件进行二次封装,更适合日常使用需要! 插件支持功能包括但不限于:缩放、旋转、全屏预览、打印、下载、内容检索、dar

    2023年04月21日
    浏览(27)
  • 前端vue3实现本地及在线文件预览(含pdf/txt/mp3/mp4/docx/xlsx/pptx)

    (一)微软office免费预览( 推荐 ) 支持doc/docx/xls/xlsx/ppt/pptx等多种office文件格式的免费预览 (二)XDOC文档预览云服务  移动端和PC端无插件预览PDF、OFD、Word、WPS等多种格式文档 本地或内网预览需要借助插件实现,pdf、mp3、mp4等主要靠原生标签或浏览器自带功能,尽量减少

    2024年02月05日
    浏览(57)
  • Vue3预览并打印PDF的两种方法

    项目场景:后台接口请求数据,返回PDF文档的链接(即pdf文件在服务器上的存放路径),在vue3页面可预览和打印该PDF。 在之前的Vue2项目中,预览并打印PDF用的是vue-pdf这个插件,但在vue3中是不支持的,只能换个插件了,于是经过测试,也踩了一些坑,总结了以下两种方法:

    2023年04月18日
    浏览(26)
  • 【Vue】vue2使用pdfjs预览pdf文件,在线预览方式一,pdfjs文件包打开新窗口预览pdf文件

    【Vue】vue2预览显示quill富文本内容,vue-quill-editor回显页面,v-html回显富文本内容 【Vue】vue2项目使用swiper轮播图2023年8月21日实战保姆级教程 【Vue】vue2使用pdfjs预览pdf文件,在线预览方式一,pdfjs文件包打开新窗口预览pdf文件 提示:这里可以添加本文要记录的大概内容: vue

    2024年02月07日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包