pdf.html 5.43 KB
<!DOCTYPE html>
<html lang="en">

	<head>
		<meta charset="UTF-8">
		<meta name="viewport" content="width=device-width, initial-scale=1.0">
		<title>在线预览</title>
		<link rel="stylesheet" href="./js/pdfh5.css">
		<!--<link rel="stylesheet" href="./css/style.css">-->
		<style>
			#pdf {
				width: 100%;
				height: 100vh;
			}

			.btn {
				display: flex;
				justify-content: center;
				align-items: center;
				width: 160px;
				height: 40px;
				background-color: #007BFF;
				/* 蓝色背景 */
				color: white;
				/* 白色文字 */
				border-radius: 25px;
				/* 圆角 */
				font-size: 16px;
				font-weight: bold;
				cursor: pointer;
				/* 鼠标指针样式 */
				transition: background-color 0.3s ease;
				/* 平滑的背景色过渡 */
			}

			.btn:hover {
				background-color: #0056b3;
				/* 鼠标悬停时的蓝色 */
			}

			.footer {
				width: 96%;
				position: fixed;
				bottom: 10px;
				display: flex;
				align-items: center;
				justify-content: space-evenly;
			}
		</style>
	</head>

	<body>
		<div id="app">
			<div id="pdf" style="padding-top: 50px;"></div>

			<div class="footer">
				<div class="btn" style="background-color:#d0d0d0;color:#1b1c1a" @click="back">返回</div>
				<!-- <div class="btn" @click="submit">预览文件</div> -->
			</div>
		</div>
		<script src="./js/pdf.js"></script>
		<script src="./js/pdf.worker.js"></script>
		<script src="./js/jquery-3.6.0.min.js"></script>
		<script src="./js/pdfh5.js"></script>
		<!--<script src="https://res.wx.qq.com/open/js/jweixin-1.3.2.js"></script>-->
		<script type="text/javascript" src="https://res.wx.qq.com/open/js/jweixin-1.4.0.js"></script>
		<script src="./js/vue@2.js"></script>
		<script type="text/javascript" src="./js/uni.webview.1.5.6.js"></script>
		<script>
			var app = new Vue({
				el: '#app',
				data: {},
				methods: {
					// submit() {
					//     console.log('wx.miniProgram',wx.miniProgram)   
					//     uni.miniProgram.navigateBack()  
					//     wx.miniProgram.postMessage({ data: 'done' })
					// },
					back() {
						uni.postMessage({
							data: {
								name:"back"
							}
						});
					}
				},

				mounted() {
					let searchURL = window.location.search;
					console.log('searchURL', searchURL);
					searchURL = searchURL.substring(1, searchURL.length);
					let pdfurl = searchURL.split("&")[0].split("=")[1];
					// 对URL进行解码
					if (pdfurl) {
						pdfurl = decodeURIComponent(pdfurl);
					}
					console.log('pdfurl', pdfurl);
					
					const pdfContainer = document.getElementById('pdf');
					if (!pdfurl) {
						if (pdfContainer) {
							pdfContainer.innerHTML = '<div style="text-align:center;padding:50px;color:#999;">PDF地址不存在</div>';
						}
						return;
					}
					
					// 检查是否是 blob URL
					if (pdfurl.startsWith('blob:')) {
						// blob URL 需要转换为可以直接访问的格式
						// 方法1: 尝试直接使用 iframe(某些浏览器支持)
						// 方法2: 使用 fetch 获取 blob,然后转换为 data URL 或使用 pdf.js 加载
						console.log('处理 blob URL:', pdfurl);
						
						// 尝试使用 fetch 获取 blob 数据,然后使用 pdf.js 加载
						fetch(pdfurl)
							.then(response => {
								if (!response.ok) {
									throw new Error('无法获取 PDF 文件');
								}
								return response.blob();
							})
							.then(blob => {
								// 将 blob 转换为 URL,供 pdf.js 使用
								const blobUrl = URL.createObjectURL(blob);
								console.log('转换后的 blob URL:', blobUrl);
								
								// 使用 pdfh5 加载 blob URL
								const pdfh5 = new Pdfh5('#pdf', {
									pdfurl: blobUrl,
								}, {
									lazy: true
								});

								pdfh5.on("complete", (status) => {
									if (status === 'error') {
										console.error('PDF加载失败');
										if (pdfContainer) {
											pdfContainer.innerHTML = '<div style="text-align:center;padding:50px;color:#999;">PDF加载失败,请检查文件是否存在</div>';
										}
										// 清理 blob URL
										URL.revokeObjectURL(blobUrl);
										return;
									}
									console.log('PDF加载成功');
								});
							})
							.catch(error => {
								console.error('处理 blob URL 失败:', error);
								// 如果 fetch 失败,尝试直接使用 iframe
								if (pdfContainer) {
									pdfContainer.innerHTML = '<iframe src="' + pdfurl + '" style="width:100%;height:100vh;border:none;"></iframe>';
								}
							});
						return;
					}
					
					// 检查是否是 file:// 协议(通常浏览器不允许直接访问)
					if (pdfurl.startsWith('file://')) {
						if (pdfContainer) {
							pdfContainer.innerHTML = '<div style="text-align:center;padding:50px;color:#999;">浏览器安全限制,无法直接访问本地文件。请使用网络地址。</div>';
						}
						return;
					}
					
					// 网络URL,使用 pdfh5 加载
					console.log('加载网络 PDF:', pdfurl);
					const pdfh5 = new Pdfh5('#pdf', {
						pdfurl,
					}, {
						lazy: true
					});

					pdfh5.on("complete", (status) => {
						if (status === 'error') {
							console.error('PDF加载失败');
							if (pdfContainer) {
								pdfContainer.innerHTML = '<div style="text-align:center;padding:50px;color:#999;">PDF加载失败,请检查文件是否存在或网络连接</div>';
							}
							return;
						}
						console.log('PDF加载成功');
					});
				},

				unmounted() {
					this.timer && clearInterval(this.timer)
				},
			})
		</script>
	</body>

</html>