使用pdfh5在线预览pdf并且加上文字水印

一、使用插件pdfh5预览pdf

参考文档:pdfh5 - npm 

使用pdfh5在线预览pdf并且加上文字水印

①安装插件:npm install pdfh5

②使用pdfh5插件预览pdf

<template>
	<div class="m-pdf">
		<div class="pdfImg"></div>
	</div>
</template>
<script>
import pdfjs from 'pdfh5/js/pdf';
import pdfWorker from 'pdfh5/js/pdf.worker';

pdfjs.GlobalWorkerOptions.workerSrc = pdfWorker;

export default {
	name: 'Pdfh5',
	data() {
		return {
			pdfh5: null,
			fileUrl: '' // 如果引入本地pdf文件,需要将pdf放在public文件夹下,引用时使用绝对路径(/:表示public文件夹)
		};
	},
	mounted() {
		this.fileUrl = decodeURIComponent(this.$route.query.fileUrl);
		this.pdfInit(this.fileUrl);
		/* // pdfh5实例化时传两个参数:selector选择器,options配置项参数,会返回一个pdfh5实例对象,可以用来操作pdf,监听相关事件
		this.pdfh5 = new Pdfh5('#pdf', {
			pdfurl: this.fileUrl, // pdf 地址,请求的地址需要为线上的地址,测试的本地的地址是不可以的
			withCredentials: true,
			renderType: 'canvas',
			maxZoom: 3, //手势缩放最大倍数 默认3
			scrollEnable: true, //是否允许pdf滚动
			zoomEnable: true //是否允许pdf手势缩放
		});
		// 监听pdf准备开始渲染,此时可以拿到pdf总页数
		this.pdfh5.on('ready', function () {});
		// 监听pdf加载完成事件,加载失败、渲染成功都会触发
		this.pdfh5.on('complete', (status, msg, time) => {
			console.log('状态:' + status + ',信息:' + msg + ',耗时:' + time + '毫秒');
		}); */
	},
	methods: {
		async pdfInit(pdfUrl) {
			try {
				const pdfDoc = await pdfjs.getDocument(pdfUrl).promise;
				const totalPage = pdfDoc.numPages;
				for (let i = 1; i <= totalPage; i++) {
					const page = await pdfDoc.getPage(i);
					let scaledViewport = page.getViewport({ scale: 1.5 });
					let canvas = document.createElement('canvas');

					canvas.height = scaledViewport.height;
					canvas.width = scaledViewport.width;
					const listIndex = +document.querySelector('.pdfImg').childNodes.length;
					canvas.className = 'img-item';
					canvas.setAttribute('data-pdf-index', listIndex);
					canvas.style.width = '100%';
					let context = canvas.getContext('2d');

					let renderContext = {
						canvasContext: context,
						viewport: scaledViewport
					};
					await page.render(renderContext);
					// 这个方法是加水印的
					const canvasFillStyle = context.createPattern(this.initWatermark(), 'repeat');
					context.rect(0, 0, scaledViewport.width, scaledViewport.height);
					context.fillStyle = canvasFillStyle;
					context.fill();
					canvas.remove();

					document.querySelector('.pdfImg').appendChild(canvas);
				}
				return [];
			} catch (error) {
				return error;
			}
		},
		initWatermark() {
			let canvas = document.createElement('canvas');
			canvas.width = 460;
			canvas.height = 240;
			let ctx = canvas.getContext('2d');
			ctx.font = '36px Vedana';
			ctx.fillStyle = 'rgba(200, 200, 200, 0.4)';
			ctx.textAlign = 'left';
			ctx.textBaseline = 'middle';
			ctx.rotate((-18 * Math.PI) / 80);
			ctx.fillText('水印水印水印水印水印', 0, 260);
			return canvas;
		}
	}
};
</script>

<style lang="less" scoped>
.m-pdf {
	// 保证pdf区域铺满整个屏幕
	// 方法1:使用vw和vh视窗单位,1vw=视窗宽度的1%;1vh=视窗高度的1%
	// width: 100vw;
	// height: 100vh;
	// 方法2:使用fixed定位

	position: fixed;
	top: 0;
	bottom: 0;
	right: 0;
	left: 0;

	.header-bg {
		background: #fff;

		.title {
			margin: auto;
			padding: 10px 0px 0px 0px;
			font-weight: 600;
			font-size: 40rpx;
			font-family: PingFangHK-Semibold, PingFangHK;
			font-weight: 600;
			color: #333333;
			line-height: 56rpx;
		}
	}
}
</style>
### 回答1: UniApp是一款跨平台开发框架,可以用于开发具有原生应用体验的应用程序。而PDFH5是一种基于H5技术开发的显示PDF文档的工具。 UniApp可以集成PDFH5插件,使开发者可以在UniApp应用中轻松地显示和处理PDF文档。通过使用PDFH5插件,我们可以在UniApp中打开PDF文件,并进行缩放、翻页、搜索等操作。 使用UniApp和PDFH5插件可以为用户提供更好的浏览PDF文档的体验。无论是在iOS、Android还是Web平台上,都可以通过UniApp开发出功能丰富的PDF浏览器应用。基于UniApp的跨平台特性,开发者只需要编写一套代码,就可以同时发布到多个平台,节省了开发成本和时间。 同时,UniApp支持多种插件扩展,开发者还可以利用其他插件,如文件管理、图片处理等,为PDFH5提供更多功能和灵活性。通过组合使用不同的插件,我们可以开发出更加强大和定制化的PDF浏览应用。 总的来说,通过UniApp和PDFH5插件的使用,我们可以方便地开发出跨平台的PDF浏览器应用,提供更好的PDF文档显示和处理功能,为用户提供出色的使用体验。 ### 回答2: Uniapp是一款跨平台的开发框架,可以同时开发iOS、Android等多个平台的应用。而PDFH5是基于HTML5技术的一种轻量级的PDF阅读器。 在Uniapp中集成PDFH5可以实现在移动应用中打开和阅读PDF文件的功能。通过引入PDFH5的相关插件和组件,可以将PDF文件以H5的形式展示在移动端应用中,用户可以通过手势操作进行缩放、翻页等操作,实现对PDF文件的浏览。 Uniapp为开发者提供了丰富的插件和组件,开发者可以根据自己的需求选择合适的插件使用。对于PDFH5的集成,可以选择uni.pdf组件或者引入第三方的pdf.js库等方式。其中uni.pdf组件是Uniapp官方提供的组件,使用简单且功能完善,通过指定PDF文件的路径即可在应用中展示。 当然,开发者也可以选择自己编写相关的代码来实现PDF文件的阅读,通过使用uni.request进行网络请求获取PDF文件的数据流,然后通过Canvas进行渲染显示。这种方式相对复杂一些,但是可以实现更多自定义的功能。 综上所述,通过Uniapp集成PDFH5可以在移动应用中实现PDF文件的阅读和展示功能,开发者可以根据具体需求选择合适的插件或者自行编写代码来实现。这样可以方便用户在移动端进行PDF文件的浏览,提升应用的用户体验。 ### 回答3: UniApp是一种跨平台开发框架,可以实现一次编写多端运行的效果。而PDFH5是一种基于HTML5技术实现的在线展示PDF文档的工具。 UniApp在跨平台开发方面具有很多优势。它可以通过一套代码同时适配iOS和Android平台,甚至还能适配到Web、小程序等多个平台。开发者可以使用Vue.js语法编写界面,同时还可以调用原生API和插件扩展功能。这样一次编写,多端运行的特性很大程度上提升了开发效率,同时减少了工作量。 而PDFH5则是基于HTML5技术开发的一种在线展示PDF文档的工具。它通过将PDF文档转换成HTML5格式,实现在Web端无需安装插件就可以直接查看和操作PDF文档的功能。用户可以在浏览器中打开PDFH5,直接预览、搜索和选择文本,甚至还可以添加批注和标签等功能。这种在线展示PDF的方式非常方便和灵活,大大提升了用户的使用体验。 将UniApp与PDFH5结合使用,可以在UniApp框架下进行跨平台的开发,并且通过引入PDFH5工具,可以方便地在UniApp应用中展示PDF文档。通过集成PDFH5,用户可以在UniApp的多个平台上实现无缝的PDF文档查看与操作。这为开发者提供了一种便捷的方式,同时也给用户带来了更好的体验。 总而言之,UniApp和PDFH5都是为提升开发效率和用户体验而设计的工具。它们在不同方面发挥着重要作用,将它们结合使用能够实现更好的跨平台开发和在线展示PDF文档的效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值