|
|
@@ -10,6 +10,8 @@ var spinner;
|
|
|
|
|
|
// 能打印的最大页数(页数超过,需要先下载pdf,再打印)
|
|
|
var PRINT_MAX_PAGE_SIZE = 500;
|
|
|
+var ALERT_FILE_TOO_LARGE = "pdf超过" + PRINT_MAX_PAGE_SIZE
|
|
|
+ + "页,建议先下载到本地,再进行查看或打印";
|
|
|
var pdfDoc;
|
|
|
// 页码
|
|
|
var pageIndex;
|
|
|
@@ -21,23 +23,18 @@ var scale;
|
|
|
var winHeight;
|
|
|
// 浏览器窗口宽度
|
|
|
var winWidth;
|
|
|
-// hiddenFrame是否加载成功
|
|
|
-var hiddenFrameLoaded = false;
|
|
|
// 将要打印的总的pdf(整个文档,而不是某一页的pdf)相对路径
|
|
|
var wholePdfPath;
|
|
|
// 某一页pdf文件的路径
|
|
|
var pagedPdfPath;
|
|
|
// 参数打印类型,可能为PRINT、PREVIEW
|
|
|
var printType = getParameter("printType");
|
|
|
+// 首次加载页面()
|
|
|
+var firstRequest = true;
|
|
|
|
|
|
getWindowWidth();
|
|
|
loadData(1);
|
|
|
|
|
|
-// 是否立即打印
|
|
|
-if (printType == 'PRINT') {
|
|
|
- printPdf();
|
|
|
-}
|
|
|
-
|
|
|
// 缩小,最小不小于原大小的0.2/1.2倍
|
|
|
$("#zoomOut").click(function() {
|
|
|
if (scale >= 0.2) {
|
|
|
@@ -82,6 +79,11 @@ $("#pageIndex").keypress(function(event) {
|
|
|
if (value == pageIndex) {
|
|
|
return;
|
|
|
}
|
|
|
+ if (pageSize > PRINT_MAX_PAGE_SIZE) {
|
|
|
+ alert(ALERT_FILE_TOO_LARGE);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ firstRequest = false;
|
|
|
pageIndex = value;
|
|
|
loadData(pageIndex);
|
|
|
} else {
|
|
|
@@ -99,12 +101,28 @@ $("#print").click(function() {
|
|
|
});
|
|
|
|
|
|
// 下载pdf
|
|
|
-$("#downloadPdf").click(function() {
|
|
|
- if (!pdfDoc) {
|
|
|
- return;
|
|
|
- }
|
|
|
+$("#downloadPdf").click(
|
|
|
+ function() {
|
|
|
+ if (!pdfDoc) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ console.log(new Date().format()
|
|
|
+ + " ---- subscribed wholePdfGeneratedSignal");
|
|
|
+ $.subscribe("wholePdfGeneratedSignal", downloadPdf);
|
|
|
+ waitWholePdfGenerated();
|
|
|
+ });
|
|
|
+
|
|
|
+/**
|
|
|
+ * 下载文件
|
|
|
+ */
|
|
|
+function downloadPdf() {
|
|
|
+ hideLoading();
|
|
|
+ console.log(new Date().format()
|
|
|
+ + " ---- received and unsubscribe wholePdfGeneratedSignal");
|
|
|
+ $.unsubscribe("wholePdfGeneratedSignal", downloadPdf);
|
|
|
+ console.log(new Date().format() + " ---- start download...");
|
|
|
window.location = downloadUrl("pdf");
|
|
|
-});
|
|
|
+}
|
|
|
|
|
|
// 下载纯数据excel
|
|
|
$("#downloadExcelWithOnlyData").click(function() {
|
|
|
@@ -153,8 +171,9 @@ function getWindowWidth() {
|
|
|
* 打印
|
|
|
*/
|
|
|
function printPdf() {
|
|
|
+ hideLoading();
|
|
|
if (pageSize > PRINT_MAX_PAGE_SIZE) {
|
|
|
- alert("文件过大,建议先下载到本地,再进行打印");
|
|
|
+ alert(ALERT_FILE_TOO_LARGE);
|
|
|
return;
|
|
|
}
|
|
|
console.log(new Date().format() + " ---- start print...");
|
|
|
@@ -171,23 +190,34 @@ function printPdf() {
|
|
|
*/
|
|
|
function loadPagedPdf(pagedPdfPath, ifPreloadWholePdf) {
|
|
|
// var dfd = $.Deferred();
|
|
|
- PDFJS.getDocument(pagedPdfPath).then(
|
|
|
- function(pdfDoc_) {
|
|
|
- // 更新页码
|
|
|
- document.getElementById('pageIndex').value = pageIndex;
|
|
|
- pdfDoc = pdfDoc_;
|
|
|
- // 第一页文档渲染完成后,再加载整个文档
|
|
|
- if (ifPreloadWholePdf) {
|
|
|
- console.log(new Date().format()
|
|
|
- + " ---- subscribed renderTaskFinishedSignal");
|
|
|
- $.subscribe("renderTaskFinishedSignal", loadWholePdf);
|
|
|
- }
|
|
|
- // Initial/first page rendering
|
|
|
- renderPage();
|
|
|
- // $.when(rend("getDocument promised");
|
|
|
- // dfd.resolve();
|
|
|
- // });
|
|
|
- });
|
|
|
+ PDFJS
|
|
|
+ .getDocument(pagedPdfPath)
|
|
|
+ .then(
|
|
|
+ function(pdfDoc_) {
|
|
|
+ // 更新页码
|
|
|
+ document.getElementById('pageIndex').value = pageIndex;
|
|
|
+ pdfDoc = pdfDoc_;
|
|
|
+ // 第一页文档渲染完成后,再加载整个文档
|
|
|
+ if (ifPreloadWholePdf) {
|
|
|
+ if (printType == 'PRINT'
|
|
|
+ && pageSize > PRINT_MAX_PAGE_SIZE) {
|
|
|
+ alert(ALERT_FILE_TOO_LARGE);
|
|
|
+ hideLoading();
|
|
|
+ } else {
|
|
|
+ console
|
|
|
+ .log(new Date().format()
|
|
|
+ + " ---- subscribed wholePdfGeneratedSignal");
|
|
|
+ $.subscribe("wholePdfGeneratedSignal",
|
|
|
+ loadWholePdf);
|
|
|
+ waitWholePdfGenerated();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // Initial/first page rendering
|
|
|
+ renderPage();
|
|
|
+ // $.when(rend("getDocument promised");
|
|
|
+ // dfd.resolve();
|
|
|
+ // });
|
|
|
+ });
|
|
|
// return dfd.promise;
|
|
|
}
|
|
|
|
|
|
@@ -210,12 +240,13 @@ function loadData(page) {
|
|
|
// 第pageIndex页的pdf文件路径
|
|
|
pagedPdfPath = wholePdfPath.replace(".pdf", "_" + pageIndex
|
|
|
+ ".pdf");
|
|
|
- if (pageIndex == 1) {
|
|
|
+ if (firstRequest) {
|
|
|
pageSize = data.pageSize;
|
|
|
document.getElementById('pageSize').textContent = pageSize;
|
|
|
document.title = getParameter("reportName");
|
|
|
// 加载第一页文档,并且预加载整个文档
|
|
|
loadPagedPdf(pagedPdfPath, true);
|
|
|
+ showLoading();
|
|
|
// $.when(getDocument()).done(loadWholePdf);
|
|
|
// console.log(renderTask._internalRenderTask.running);
|
|
|
} else {
|
|
|
@@ -247,29 +278,62 @@ function loadData(page) {
|
|
|
*/
|
|
|
function loadWholePdf() {
|
|
|
console.log(new Date().format()
|
|
|
- + " ---- received and unsubscribe renderTaskFinishedSignal");
|
|
|
- $.unsubscribe("renderTaskFinishedSignal", loadWholePdf);
|
|
|
- // 之前已经加载,不再加载
|
|
|
- if (hiddenFrameLoaded) {
|
|
|
- return;
|
|
|
- }
|
|
|
- // 渲染完成后延迟一小段时间预加载整个文档
|
|
|
- sleep(500);
|
|
|
- if (pageSize > PRINT_MAX_PAGE_SIZE) {
|
|
|
- console.log(new Date().format() + " ---- 文件过大,建议先下载到本地,再进行打印");
|
|
|
- hiddenFrameLoaded = true;
|
|
|
- return;
|
|
|
- }
|
|
|
+ + " ---- received and unsubscribe wholePdfGeneratedSignal");
|
|
|
+ $.unsubscribe("wholePdfGeneratedSignal", loadWholePdf);
|
|
|
// 开始加载
|
|
|
console.log(new Date().format() + " ---- hiddenFrame loading...");
|
|
|
hiddenFrame.src = wholePdfPath;
|
|
|
+ setTimeout("printPdf()", 1000);
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * 每隔一定时间查询文件状态,直到文件有效
|
|
|
+ */
|
|
|
+function waitWholePdfGenerated() {
|
|
|
+ showLoading();
|
|
|
+ var valid = getGeneratedPdfOrXlsInformation("pdf").valid;
|
|
|
+ if (!valid) {
|
|
|
+ console.log(new Date().format() + " ---- 文件还未生成");
|
|
|
+ console.log(new Date().format() + " ---- wait 1000ms")
|
|
|
+ setTimeout("waitWholePdfGenerated()", 1000);
|
|
|
+ } else {
|
|
|
+ console.log(new Date().format() + " ---- 文件已生成");
|
|
|
+ console.log(new Date().format()
|
|
|
+ + " ---- published wholePdfGeneratedSignal");
|
|
|
+ $.publish("wholePdfGeneratedSignal", waitWholePdfGenerated);
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * 获取生成的pdf或者xls的信息
|
|
|
+ *
|
|
|
+ * @param pdfOrXls
|
|
|
+ * pdf或者xls
|
|
|
+ */
|
|
|
+function getGeneratedPdfOrXlsInformation(pdfOrXls) {
|
|
|
+ var data;
|
|
|
+ $.ajax({
|
|
|
+ type : "get",
|
|
|
+ async : false,
|
|
|
+ url : "print/getGeneratedPdfOrXlsInformation" + window.location.search
|
|
|
+ + "&pdfOrXls=" + pdfOrXls,
|
|
|
+ success : function(result) {
|
|
|
+ console
|
|
|
+ .log(new Date().format() + " ---- "
|
|
|
+ + JSON.stringify(result));
|
|
|
+ data = result;
|
|
|
+ }
|
|
|
+ });
|
|
|
+ return data;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* Get page info from document, resize canvas accordingly, and render page
|
|
|
*/
|
|
|
function renderPage() {
|
|
|
- hideLoading();
|
|
|
+ if (!firstRequest) {
|
|
|
+ hideLoading();
|
|
|
+ }
|
|
|
if (!pdfDoc) {
|
|
|
return;
|
|
|
}
|
|
|
@@ -351,6 +415,11 @@ function nextPage() {
|
|
|
if (!pdfDoc || pageIndex >= pageSize) {
|
|
|
return;
|
|
|
}
|
|
|
+ if (pageSize > PRINT_MAX_PAGE_SIZE) {
|
|
|
+ alert(ALERT_FILE_TOO_LARGE);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ firstRequest = false;
|
|
|
pageIndex++;
|
|
|
loadData(pageIndex);
|
|
|
}
|