|
|
@@ -9,31 +9,28 @@ var hiddenFrame = document.getElementById("hiddenFrame");
|
|
|
// pdf文件的路径
|
|
|
var url;
|
|
|
var pdfDoc;
|
|
|
-//页码
|
|
|
+// 页码
|
|
|
var pageIndex;
|
|
|
-//总页数
|
|
|
+// 总页数
|
|
|
var pageSize;
|
|
|
-//预览的pdf的缩放级别(为pdf原大小的倍数)
|
|
|
+// 预览的pdf的缩放级别(为pdf原大小的倍数)
|
|
|
var scale;
|
|
|
-//浏览器窗口高度
|
|
|
+// 浏览器窗口高度
|
|
|
var winHeight;
|
|
|
-//浏览器窗口宽度
|
|
|
+// 浏览器窗口宽度
|
|
|
var winWidth;
|
|
|
-//参数打印类型,可能为PRINT、PREVIEW
|
|
|
-var printType = getParameter("printType");
|
|
|
-//hiddenFrame是否加载成功
|
|
|
+// hiddenFrame是否加载成功
|
|
|
var hiddenFrameLoaded = false;
|
|
|
+// 将要打印的总的pdf相对路径
|
|
|
+var pdfPath;
|
|
|
+// 参数打印类型,可能为PRINT、PREVIEW
|
|
|
+var printType = getParameter("printType");
|
|
|
|
|
|
getWindowWidth();
|
|
|
-loadPdfData();
|
|
|
+loadData();
|
|
|
|
|
|
// 是否立即打印
|
|
|
-if (printType && printType == 'PRINT') {
|
|
|
- // hiddenFrame.onload = function() {
|
|
|
- // }
|
|
|
-// hiddenFrame.contentWindow.print();
|
|
|
-// if (hiddenFrameLoaded) {
|
|
|
-// }
|
|
|
+if (printType == 'PRINT') {
|
|
|
printPdf();
|
|
|
}
|
|
|
|
|
|
@@ -96,12 +93,12 @@ $("#print").click(function() {
|
|
|
return;
|
|
|
}
|
|
|
printPdf();
|
|
|
-// console.log("1--loaded.." + hiddenFrameLoaded);
|
|
|
-// if (hiddenFrameLoaded) {
|
|
|
-// hiddenFrame.contentWindow.print();
|
|
|
-// } else {
|
|
|
-// console.log("2--loaded.." + hiddenFrameLoaded);
|
|
|
-// }
|
|
|
+ // console.log("1--loaded.." + hiddenFrameLoaded);
|
|
|
+ // if (hiddenFrameLoaded) {
|
|
|
+ // hiddenFrame.contentWindow.print();
|
|
|
+ // } else {
|
|
|
+ // console.log("2--loaded.." + hiddenFrameLoaded);
|
|
|
+ // }
|
|
|
});
|
|
|
|
|
|
// 下载pdf
|
|
|
@@ -109,6 +106,12 @@ $("#downloadPdf").click(function() {
|
|
|
if (!pdfDoc) {
|
|
|
return;
|
|
|
}
|
|
|
+ // 检查文件状态,直到其可用
|
|
|
+ var valid;
|
|
|
+ while (!valid) {
|
|
|
+ valid = getGeneratedPdfOrXlsInformation("pdf")
|
|
|
+ sleep(1000);
|
|
|
+ }
|
|
|
window.location = downloadUrl("pdf");
|
|
|
});
|
|
|
|
|
|
@@ -117,6 +120,11 @@ $("#downloadExcelWithOnlyData").click(function() {
|
|
|
if (!pdfDoc) {
|
|
|
return;
|
|
|
}
|
|
|
+ var valid;
|
|
|
+ while (!valid) {
|
|
|
+ valid = getGeneratedPdfOrXlsInformation("xls")
|
|
|
+ sleep(1000);
|
|
|
+ }
|
|
|
window.location = downloadUrl("xls_with_only_data");
|
|
|
});
|
|
|
|
|
|
@@ -158,30 +166,47 @@ function getWindowWidth() {
|
|
|
/**
|
|
|
* 打印
|
|
|
*/
|
|
|
-//TODO delete 为hiddenFrame绑定事件,一旦pdf加载成功,修改hiddenFrameLoaded值
|
|
|
+// TODO delete 为hiddenFrame绑定事件,一旦pdf加载成功,修改hiddenFrameLoaded值
|
|
|
function printPdf() {
|
|
|
- console.log(hiddenFrameLoaded);
|
|
|
- if(hiddenFrameLoaded){
|
|
|
- return hiddenFrame.contentWindow.print();
|
|
|
+ if (pageSize > 1000) {
|
|
|
+ alert("文件过大,建议先下载到本地,再进行打印");
|
|
|
+ return;
|
|
|
}
|
|
|
- //IE的onload事件
|
|
|
- if (hiddenFrame.attachEvent) {
|
|
|
- hiddenFrame.attachEvent("onload", function() {
|
|
|
- hiddenFrameLoaded = true;
|
|
|
- hiddenFrame.contentWindow.print();
|
|
|
- })
|
|
|
- } else {
|
|
|
- hiddenFrame.onload = function() {
|
|
|
- hiddenFrameLoaded = true;
|
|
|
- hiddenFrame.contentWindow.print();
|
|
|
- };
|
|
|
+ var valid;
|
|
|
+ while (!valid) {
|
|
|
+ valid = getGeneratedPdfOrXlsInformation("pdf")
|
|
|
+ sleep(1000);
|
|
|
}
|
|
|
+ while (!hiddenFrameLoaded) {
|
|
|
+ console.log(Date.now() + " not loaded yet");
|
|
|
+ sleep(1000);
|
|
|
+ }
|
|
|
+ console.log(Date.now() + " loaded");
|
|
|
+ hiddenFrame.contentWindow.print();
|
|
|
+ // console.log("1----" + hiddenFrameLoaded);
|
|
|
+ // if (!hiddenFrameLoaded) {
|
|
|
+ // hiddenFrame.src = pdfPath;
|
|
|
+ // // IE的onload事件
|
|
|
+ // if (hiddenFrame.attachEvent) {
|
|
|
+ // hiddenFrame.attachEvent("onload", function() {
|
|
|
+ // hiddenFrameLoaded = true;
|
|
|
+ // hiddenFrame.contentWindow.print();
|
|
|
+ // })
|
|
|
+ // } else {
|
|
|
+ // hiddenFrame.onload = function() {
|
|
|
+ // hiddenFrameLoaded = true;
|
|
|
+ // hiddenFrame.contentWindow.print();
|
|
|
+ // };
|
|
|
+ // }
|
|
|
+ // } else {
|
|
|
+ // hiddenFrame.contentWindow.print();
|
|
|
+ // }
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 发送请求,服务器端进行填充报表、生成pdf文件等操作
|
|
|
*/
|
|
|
-function loadPdfData() {
|
|
|
+function loadData() {
|
|
|
var loadPdfDataUrl = "print/loadPdfData" + window.location.search;
|
|
|
if (printType == "PREVIEW") {
|
|
|
loadPdfDataUrl = loadPdfDataUrl + "&pageIndex=" + 1;
|
|
|
@@ -192,17 +217,19 @@ function loadPdfData() {
|
|
|
url : loadPdfDataUrl,
|
|
|
success : function(data) {
|
|
|
// 返回的pdf文件路径
|
|
|
- var pdfPath = data.pdfPath;
|
|
|
- hiddenFrame.src = pdfPath;
|
|
|
+ pdfPath = data.pdfPath;
|
|
|
if (!pageIndex) {
|
|
|
pageIndex = 1;
|
|
|
}
|
|
|
- // 获取所对应的分页的pdf文件路径
|
|
|
+ // 第一页的pdf文件路径
|
|
|
url = pdfPath.replace(".pdf", "_" + pageIndex + ".pdf");
|
|
|
pageSize = data.pageSize;
|
|
|
document.getElementById('pageSize').textContent = pageSize;
|
|
|
document.title = getParameter("reportName");
|
|
|
+ // 加载第一页文档
|
|
|
getDocument();
|
|
|
+ // 预加载整个文档
|
|
|
+ preloadWholePdf();
|
|
|
},
|
|
|
error : function(XMLHttpRequest) {
|
|
|
var viewerContainer = document.getElementById("viewerContainer");
|
|
|
@@ -219,7 +246,7 @@ function loadPdfData() {
|
|
|
};
|
|
|
|
|
|
/**
|
|
|
- * 下载pdf文件
|
|
|
+ * 获取预览的pdf文档数据
|
|
|
*/
|
|
|
function getDocument() {
|
|
|
PDFJS.getDocument(url).then(function(pdfDoc_) {
|
|
|
@@ -231,6 +258,27 @@ function getDocument() {
|
|
|
});
|
|
|
}
|
|
|
|
|
|
+/**
|
|
|
+ * 预加载整个pdf(大于1000页,不加载)文件,以提高后续打印速度
|
|
|
+ */
|
|
|
+function preloadWholePdf() {
|
|
|
+ if (pageSize > 1000) {
|
|
|
+ console.log("文件过大,建议先下载到本地,再进行打印");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ hiddenFrame.src = pdfPath;
|
|
|
+ hiddenFrame.onload = function() {
|
|
|
+ // 加载失败(pdf文件不存在,404错误),title不为null
|
|
|
+ if (hiddenFrame.contentDocument.title) {
|
|
|
+ console.log(Date.now() + " " + hiddenFrame.contentDocument.title);
|
|
|
+ hiddenFrame.src = pdfPath;
|
|
|
+ sleep(2000);
|
|
|
+ } else {
|
|
|
+ hiddenFrameLoaded = true;
|
|
|
+ }
|
|
|
+ };
|
|
|
+}
|
|
|
+
|
|
|
/**
|
|
|
* Get page info from document, resize canvas accordingly, and render page
|
|
|
*/
|
|
|
@@ -261,12 +309,13 @@ function renderPage() {
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 调整pdf显示的宽度为窗口宽度的multipleOfWindowWidth倍
|
|
|
+ * 获取缩放级别(将pdf显示的宽度调整为窗口宽度的multipleOfWindowWidth倍,获取该情况下pdf宽度为原宽度的倍数)
|
|
|
*
|
|
|
* @param page
|
|
|
* pdf数据
|
|
|
* @param multipleOfWindowWidth
|
|
|
* 窗口宽度的倍数
|
|
|
+ * @returns {Number} 缩放级别(pdf原宽度的倍数)
|
|
|
*/
|
|
|
function getScale(page, multipleOfWindowWidth) {
|
|
|
// 首先获取pdf原始宽度
|
|
|
@@ -307,4 +356,36 @@ function changeTextOfSelectScale() {
|
|
|
hiddenOption.text = (scale * 100).toFixed() + "%";
|
|
|
hiddenOption.selected = true;
|
|
|
hiddenOption.hidden = true;
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * 获取生成的pdf或者xls的信息
|
|
|
+ *
|
|
|
+ * @param pdfOrXls
|
|
|
+ * pdf或者xls
|
|
|
+ */
|
|
|
+function getGeneratedPdfOrXlsInformation(pdfOrXls) {
|
|
|
+ var valid;
|
|
|
+ $.ajax({
|
|
|
+ type : "get",
|
|
|
+ async : false,
|
|
|
+ url : "print/getGeneratedPdfOrXlsInformation" + window.location.search
|
|
|
+ + "&pdfOrXls=" + pdfOrXls,
|
|
|
+ success : function(data) {
|
|
|
+ console.log(data);
|
|
|
+ valid = data.valid;
|
|
|
+ }
|
|
|
+ });
|
|
|
+ return valid;
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * 休眠一段时间
|
|
|
+ *
|
|
|
+ * @param millsecond
|
|
|
+ * 休眠时长(毫秒)
|
|
|
+ */
|
|
|
+function sleep(millsecond) {
|
|
|
+ for (var d = Date.now(); Date.now() - d <= millsecond;)
|
|
|
+ ;
|
|
|
}
|