在uniapp中使用pdfjs在线预览pdf

博客提供了pdfjs的下载地址,可下载es5版本,链接为http://mozilla.github.io/pdf.js/getting_started/#download 。同时文末还分享了demo代码,其百度网盘链接为https://pan.baidu.com/s/1jKvlxWAR5HY4k-cEMqrScw ,提取码是abcd,另有相关博客链接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

pdfjs下载地址(下载es5版本)
http://mozilla.github.io/pdf.js/getting_started/#download
文末有我的demo代码,大家有兴趣的话可以下载来看看

<template>
	<view>
		<web-view :src="url"></web-view>
	</view>
</template>

<script>
	export default {
		data() {
			return {
				// pdf.js的viewer.html所在路径
				// 注意:静态的html文件需要放在根路径下的 hybrid/html 文件夹中
				base_url : '/hybrid/html/web/viewer.html',
				// 要访问的pdf的路径 file_url
				/*
				访问的时候会遇到跨域问题
				解决方法一、
					1. /hybrid/html/web/viewer.js 中注释掉这3行代码  
					 if (origin !== viewerOrigin && protocol !== "blob:") {
					   throw new Error("file origin does not match viewer's");
					   
					 }
					2. 你存放pdf文件的这个服务器 需要做好跨域配置
						例如: 我现在访问的是 8.129.221.250 这个服务器 8.129.221.250 这个服务器是 nginx 服务器
						那么 我需要在 nginx 的配置文件中做如下操作
						location / {
						  add_header Access-Control-Allow-Origin '*';
						  add_header Access-Control-Allow-Methods 'GET, POST, PUT, OPTIONS';
						  add_header Access-Control-Expose-Headers 'Accept-Ranges, Content-Encoding, Content-Length, Content-Range';
						}
				解决方法二、后端获取文件流的方式  请各位自行百度吧
				*/
			   
				file_url: 'http://8.129.221.250/img/1.pdf',// 这个pdf文件比较大,而且我的服务器带宽又小 所以加载pdf的时候会有点慢
				// 最终显示在web-view中的路径
				url: ''
			}
		},
		onLoad() {
			// h5 和 安卓
			this.url = `${this.base_url}?file=${encodeURIComponent(this.file_url)}`;
			console.log(this.url)
			// ios,直接访问pdf所在路径
			// this.url = encodeURIComponent(this.file_url);
			// 小程序平台 我没有测试过  也不知道可不可行
		},
		methods: {
			
		}
	}
</script>

<style>

</style>

这里有我的demo代码
链接:https://pan.baidu.com/s/1jKvlxWAR5HY4k-cEMqrScw
提取码:abcd
https://www.xiejiahe.com/blog/detail/5be97f71df53a14006035e2a

### 实现 UniApp 微信小程序中 PDF 文件预览UniApp 开发的微信小程序环境中,直接集成 `PDF.js` 库来实现在应用内浏览 PDF 文档的功能并非最简便的方式。通常情况下,对于微信小程序而言,更推荐利用内置 API 来处理文件下载与打开操作[^1]。 然而,如果确实有需求通过 `PDF.js` 进行自定义渲染,则需要注意以下几点: #### 准备工作 首先需确认所使用的 `PDF.js` 版本兼容于微信小程序环境,并且考虑到小程序对 Web Worker 的支持有限制,可能需要调整默认配置以适应此平台特性。 #### 加载 PDF.js 资源 由于微信小程序不完全遵循标准浏览器行为模式,因此加载外部 JavaScript 和 CSS 可能会遇到权限问题。建议将必要的 `PDF.js` 文件(如 pdf.worker.min.js)放置到项目的 static 或 assets 目录下并本地引入。 ```html <script type="module"> import { createWorker } from '@/static/pdfjs/build/pdf'; </script> ``` #### 初始化 PDF.js 工作线程 创建一个新的 worker 对象用于执行后台任务而不阻塞主线程。注意这里要指定正确的路径指向之前提到的工作脚本位置。 ```javascript let loadingTask; const url = 'your-pdf-url'; // 替换成实际的PDF链接 // 创建worker实例 async function initPdfJs() { const workerSrc = '/static/pdfjs/build/pdf.worker.min.js'; await importScripts(workerSrc); } initPdfJs(); ``` #### 渲染页面内容 获取文档对象后可以调用相应接口读取每一页的内容并绘制至 canvas 上显示给用户查看。 ```javascript loadingTask = pdf.createLoadingTask(url); loadingTask.promise.then(pdf => { console.log('Total pages: ' + pdf.numPages); renderPage(1); // 默认从第一页开始 }).catch(reason => { console.error(reason); }); function renderPage(num) { loadingTask.promise.then(pdf => { pdf.getPage(num).then(page => { let scale = 1.5; let viewport = page.getViewport({scale}); // Prepare canvas using PDF page dimensions. let canvas = document.getElementById('the-canvas'); let context = canvas.getContext('2d'); canvas.height = viewport.height; canvas.width = viewport.width; // Render PDF page into canvas context. let renderContext = { canvasContext: context, viewport: viewport }; page.render(renderContext); }); }) } ``` 以上代码片段展示了如何基于 `PDF.js` 在 UniApp 构建的小程序里解析和呈现 PDF 页面。不过值得注意的是这种方法增加了项目复杂度以及潜在性能开销,除非特别必要一般还是优先考虑官方提供的简易方案即使用 `uni.downloadFile()` 结合 `uni.openDocument()` 完成相同目标。
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值