Browse Source

预览页面下载pdf时异步查询文件的状态,直到其可用

sunyj 9 years ago
parent
commit
646fe4abe7
1 changed files with 56 additions and 19 deletions
  1. 56 19
      src/main/webapp/resources/js/preview2/app.js

+ 56 - 19
src/main/webapp/resources/js/preview2/app.js

@@ -100,23 +100,60 @@ $("#print").click(function() {
 });
 
 // 下载pdf
-$("#downloadPdf")
-		.click(
-				function() {
-					if (!pdfDoc) {
-						return;
-					}
-					// 检查文件状态,直到其可用
-					var valid;
-					if (!valid) {
-						setTimeout(
-								"valid = getGeneratedPdfOrXlsInformation('pdf').valid;console.log(valid)",
-								1000);
-						// valid = getGeneratedPdfOrXlsInformation("pdf").valid;
-						// sleep(1000);
-					}
-					window.location = downloadUrl("pdf");
-				});
+$("#downloadPdf").click(
+		function() {
+			if (!pdfDoc) {
+				return;
+			}
+			// 检查文件状态,直到其可用
+			var valid = getGeneratedPdfOrXlsInformation('pdf').valid;
+			// 文件除了要保证有效(存在并且未过有效期),还要确保hiddenFrameLoaded不能为真
+			// 1.hiddenFrameLoaded不为真,即此时刚进入页面,文档尚未生成,需要等待其生成;
+			// 2.hiddenFrameLoaded为真,页面加载成功后并未关闭,闲置了一段时间,再次点击打印,
+			// 此时文件可能已经过期,需要立即请求下载(后台此时会重新生成),不能处于等待状态;
+			if (!valid && !hiddenFrameLoaded) {
+				console.log(new Date().format() + " ---- 文件正在生成,请等待");
+				console.log(new Date().format()
+						+ " ---- subscribed wholePdfGenerated");
+				$.subscribe("wholePdfGenerated", downloadPdf);
+				waitWholePdfGenerated();
+				// setTimeout(
+				// "valid =
+				// getGeneratedPdfOrXlsInformation('pdf').valid;console.log(valid)",
+				// 1000);
+				// valid = getGeneratedPdfOrXlsInformation("pdf").valid;
+				// sleep(1000);
+			} else {
+				window.location = downloadUrl("pdf");
+			}
+		});
+
+/**
+ * 下载文件
+ */
+function downloadPdf() {
+	console.log(new Date().format()
+			+ " ---- received and unsubscribe wholePdfGenerated");
+	$.unsubscribe("wholePdfGenerated", downloadPdf);
+	console.log(new Date().format() + " ---- start print");
+	window.location = downloadUrl("pdf");
+}
+
+/**
+ * 每隔一定时间查询文件状态,直到文件有效
+ */
+function waitWholePdfGenerated() {
+	var valid = getGeneratedPdfOrXlsInformation("pdf").valid;
+	if (!valid) {
+		console.log(new Date().format() + " ---- 文件还未生成");
+		console.log(new Date().format() + " ---- wait 3000ms")
+		setTimeout("waitWholePdfGenerated()", 3000);
+	} else {
+		console.log(new Date().format() + " ---- 文件已生成");
+		console.log(new Date().format() + " ---- published wholePdfGenerated");
+		$.publish("wholePdfGenerated", waitWholePdfGenerated);
+	}
+}
 
 // 下载纯数据excel
 $("#downloadExcelWithOnlyData").click(function() {
@@ -219,14 +256,14 @@ function loadPagedPdf(pagedPdfPath, ifPreloadWholePdf) {
 				// 更新页码
 				document.getElementById('pageIndex').value = pageIndex;
 				pdfDoc = pdfDoc_;
-				// Initial/first page rendering
-				renderPage();
 				// 第一页文档渲染完成后,再加载整个文档
 				if (ifPreloadWholePdf) {
 					console.log(new Date().format()
 							+ " ---- subscribed renderTaskFinished");
 					$.subscribe("renderTaskFinished", loadWholePdf);
 				}
+				// Initial/first page rendering
+				renderPage();
 				// $.when(rend("getDocument promised");
 				// dfd.resolve();
 				// });