前端实现PDF预览【vue】

这篇具有很好参考价值的文章主要介绍了前端实现PDF预览【vue】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言:项目中提出这样一个需求,在移动端H5页面预览pdf功能。pdf文件由后端返回的一个地址,前端实现展示预览pdf文件

在此仅提供两种方法:

一、使用iframe标签通过src属性直接展示pdf文件

        坑点:兼容比较差,PC端能正常展示,移动端会出现空白的问题

<iframe src="这里是你的文件地址" height="900px;" width="800px"></iframe>

二、使用第三方插件pdfjs,PC端和移动端都能正常展示

1. 安装插件:npm i pdfjs-dist

2. 引入插件:

// 以es5形式引入,解决低端浏览器兼容性问题
// 插件引入两种方式:第一种引入如果出现报错 environment lacks native support… 就改成第二种引入
// 第一种
const PDFJS = require("pdfjs-dist");
// 第二种
const PDFJS = require('pdfjs-dist/es5/build/pdf')

HTML部分:

<div>
	<canvas v-for="page in pdfPages" :key="page" :id="'pdf-canvas' + page" />
</div>

js部分,这里使用的vue2:文章来源地址https://www.toymoban.com/news/detail-795176.html

data() {
    return {
		pdfPages: [], // 页数
		pdfWidth: '', // 宽度
		pdfSrc: '', // 地址
		pdfDoc: '', // 文档内容
		pdfScale: 1, // 放大倍数
		contractUrl: '', // 后端返回的PDF链接
		width: 500,
		height: 300,
  }
},

methods: {
	// 加载PDF文档,url参数是后端返回的pdf文件地址
    loadFile(url) {
	    const loadingTask = PDFJS.getDocument(url)
		loadingTask.promise.then((pdf) => {
			this.pdfDoc = pdf
			this.pdfPages = pdf.numPages
		    this.$nextTick(() => {
			this.renderPage(1)
		     })
		}).catch((err) => {
			console.log(err, '打印错误')
		})
    },

   // 渲染PDF
   renderPage(num) {
        const that = this
		this.pdfDoc.getPage(num).then((page) => {
		const canvas = document.getElementById('pdf-canvas' + num)
		const ctx = canvas.getContext('2d')
		const dpr = window.devicePixelRatio || 1
		const ratio = dpr

		// 屏幕可用宽度,设置viewport为了屏幕适配问题
		const viewport = page.getViewport({scale: screen.availWidth / page.getViewport({ scale: this.pdfScale }).width })

		canvas.width = viewport.width * ratio
		canvas.height = viewport.height * ratio
		canvas.style.width = viewport.width - 30 + 'px'
		canvas.style.height = viewport.height + 'px'
		that.pdfWidth = viewport.width + 'px'
		canvas.style.height = viewport.height + 'px'
		ctx.setTransform(ratio, 0, 0, ratio, 0, 0)
		// 将PDF页面渲染到canvas上下文中
		const renderContext = {
		    canvasContext: ctx,
		    viewport: viewport
		}
		page.render(renderContext)
			if (this.pdfPages > num) {
				this.renderPage(num + 1)
			}
		})
	},
}

到了这里,关于前端实现PDF预览【vue】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • Vue3前端h5移动端页面预览PDF使用pdfjs-dist,添加自定义文本水印

    pnpm i pdfjs-dist@2.5.207

    2024年01月18日
    浏览(77)
  • 【vue2】纯前端实现本地的pdf/word/epub文件预览

    需求是预览本地的pdf/word/epub格式的文件,但是搜索后发现没有可以直接使用的,格式不同,显示的方式和效果也都略有不同。 最后还是 分别实现预览 的功能。 如果只需要预览pdf/word等格式的话,可以使用的方案:vue-office,支持多种文件(docx、excel、pdf)预览的vue组件库,支持

    2024年02月11日
    浏览(76)
  • vue项目预览pdf功能(解决动态文字无法显示的问题)

    最近,因为公司项目需要预览pdf的功能,开始的时候找了市面上的一些pdf插件,都能用,但是,后面因为pdf变成了需要根据内容进行变化的,然后,就出现了需要动态生成的文字不显示了。换了好多好多的插件,都无法显示,直接无语了。 (pdf-vue3,pdf.js,vue3-pdfjs, vue - pdf -

    2024年02月12日
    浏览(48)
  • Vue使用pdf-lib为文件流添加水印并预览

    之前也写过两篇预览pdf的,但是没有加水印,这是链接:Vue使用vue-pdf实现PDF文件预览,使用pdfobject预览pdf。这次项目中又要预览pdf了,要求还要加水印,做的时候又发现了一种预览pdf的方式,这种方式我觉的更好一些,并且还有个要求就是添加水印,当然水印后端也是可以加

    2024年02月02日
    浏览(58)
  • 前端实现pdf预览

    前言:项目中之前pdf预览是客户端andrio实现的,现在需要前端H5自己实现预览功能,项目是基于vue的H5项目,记录一下pdf预览功能实现的过程和问题 一、利用iframe实现pdf预览 1、实现过程 将pdf路径设置给iframe的src属性 2、遇到的问题 电脑上测试正常,但是安卓端会出现空白页

    2024年02月13日
    浏览(34)
  • 前端实现 PDF 预览的常见方案

    由于在搭建个人博客时,想实现在线预览 pdf 格式的个人简历,经过查阅大致有三大类实现方案;本文共涉及以下 5 种实现方案,如下所示: 使用 HTML 标签 iframe 标签 embed 标签 object 标签 使用第三方插件 PDF.js PDFObject PDF 文件转化成图片进行展示 第一类方案: 使用 HTML 标签

    2024年01月20日
    浏览(55)
  • 前端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日
    浏览(75)
  • 基于pdfbox实现的pdf添加文字水印工具

    最近有个需求需要给pdf加文字水印,于是开始搜索大法,但是发现网络上的代码基本都是将字体文件直接放在jar包里面。个人强迫症发作(手动狗头),想要像poi一样直接加载系统字体,于是研究了一下午pdfbox的源代码,发现 FontFileFinder 类可以实现这个功能。废话不多说,直

    2023年04月11日
    浏览(47)
  • 前端实现pdf,图片,word文件预览

    需求:实现一个在线预览pdf、excel、word、图片等文件的功能。 介绍:支持pdf、xlsx、docx、jpg、png、jpeg。 以下使用Vue3代码实现所有功能,建议以下的预览文件标签可以在外层包裹一层弹窗。 iframe标签能够将另一个HTML页面嵌入到当前页面中,我们的图片也能够使用iframe标签来

    2024年02月11日
    浏览(56)
  • 前端实现PDF预览:简单而高效的方法

    PDF是一种常用的文件格式,但在网页中直接预览PDF文件可能会带来一些挑战。本文将介绍一种简单而高效的前端方法,以实现PDF文件的预览。 最简单的方法是使用iframe标签来嵌入PDF文件。代码如下所示: 上述代码通过设置iframe的src属性为PDF文件的路径,将PDF文件嵌入到网页

    2024年02月05日
    浏览(48)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包