Files
file-online-preview/server/src/main/resources/static/ofd/js/cnofd-view.js
高雄 e33db39494 update server/src/main/resources/static/ofd/js/cnofd-view.js.
修复OFD解析失败问题

Signed-off-by: 高雄 <admin@cxcp.com>
2023-03-25 01:00:33 +00:00

466 lines
15 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
$("#openFile").click(function() {
openFile();
});
$("#file").change(function() {
fileChanged();
});
$("#zoomIn").click(function() {
zoomIn();
});
$("#zoomOut").click(function() {
zoomOut();
});
$("#zoomValue").change(function() {
zoomChange();
});
$("#firstPage").click(function() {
firstPage();
});
$("#prePage").click(function() {
prePage();
});
$("#nextPage").click(function() {
nextPage();
});
$("#lastPage").click(function() {
lastPage();
});
$("#print").click(function() {
print();
});
$("#main").scroll(function() {
scrool();
});
window.onresize = function() {
return function() {
var contentDiv = document.getElementById("content");
var nowleft = 0;
if (contentDiv.childNodes[0]) nowleft = contentDiv.childNodes[0].offsetLeft;
} ();
};
// 手机端,隐藏缩放比例选择框,打开文件和打印按钮
if (this.isMobile()) {
if (document.getElementById("zoomSelect")) document.getElementById("zoomSelect").style.display = "none";
if (document.getElementById("openFile")) document.getElementById("openFile").style.display = "none";
if (document.getElementById("print")) document.getElementById("print").style.display = "none";
if (document.getElementById("separator1")) document.getElementById("separator1").style.display = "none";
if (document.getElementById("separator2")) document.getElementById("separator2").style.display = "none";
}
// 判断手机端还是PC端
function isMobile() {
var flag = navigator.userAgent.match(/(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i);
return flag;
}
// 判断是否IE浏览器
function isIE() {
var navigator = window.navigator.userAgent;
if (navigator.indexOf("MSIE") > 0 || navigator.indexOf("Trident") > 0) {
return true;
}
return false;
}
this.screenWidth = document.body.clientWidth;
// cnofd提供浏览器端和服务端两种OFD版式文件的解析渲染模式。
// 服务器渲染模式;浏览器端渲染时,请注释以下两行代码
//Object(cnofd["setRenderMode"])("Server");
//Object(cnofd["setServerUrl"])("http://localhost:8080/api/ofdrender/");
data: function data() {
return {
leftMenuWidth: 0,
ofdBase64: null,
pageIndex: 1,
pageCount: 0,
title: null,
value: null,
ofdDoc: null,
screenWidth: document.body.clientWidth,
ofdDiv: null,
isFont: false
};
}
this.pageZoomScale = "1.0";
cnofd["setScaleValue"](this.pageZoomScale);
var scale = this.getQueryVariable("scale");
if (scale && (scale == "width" || Number(scale))) {
this.pageZoomScale = scale;
cnofd["setScaleValue"](scale);
}
var file = this.getQueryVariable("file");
file = decodeURIComponent(file);
if (file) this.loadOfdFile(file);
if (scale && (scale == "width" || Number(scale))) {
var selectZoom = document.getElementById("zoomValue");
selectZoom.selectedIndex = -1;
if (this.pageZoomScale == "width") {
selectZoom.selectedIndex = 0;
} else {
for (var i = 1; i < selectZoom.length; i++) {
if (Math.abs(this.pageZoomScale - selectZoom.options[i].value) < 0.01) {
selectZoom.selectedIndex = i;
break;
}
}
}
}
function getQueryVariable(variable) {
var query = window.location.search.substring(1);
var vars = query.split("&");
for (var i = 0; i < vars.length; i++) {
var pair = vars[i].split("=");
if (pair[0] == variable) {
return pair[1];
}
}
return false;
}
function loadOfdFile(ofdFile) {
var that = this;
JSZipUtils.getBinaryContent(ofdFile,
function(err, data) {
if (err) {
console.log(err);
} else {
var base64String = btoa(String.fromCharCode.apply(null, new Uint8Array(data)));
that.ofdBase64 = base64String;
}
});
this.getOfdDocument(ofdFile, this.screenWidth, this.pageZoomScale);
setPageInfo();
}
function openFile() {
this.isFont = false;
this.file = null;
$("#file")[0].click();
}
function fileChanged() {
this.file = $("#file")[0].files[0];
if (this.file == null)
return;
var ext = this.file.name.replace(/.+\./, "");
if (["ofd"].indexOf(ext) === -1) {
this.$alert("error", "仅支持ofd文件类型", {
confirmButtonText: "确定",
callback: function callback(action) {
this.$message({
type: "info",
message: "action: ".concat(action)
});
}
});
return;
}
if (this.file.size > 10 * 1024 * 1024) {
this.$alert("error", "文件大小超过10MB", {
confirmButtonText: "确定",
callback: function callback(action) {
this.$message({
type: "info",
message: "action: ".concat(action)
});
}
});
return;
}
// 新打开OFD文件时还原成页面实际尺寸显示
//Object(cnofd["setScaleValue"])(1.0);
Object(cnofd["setScaleValue"])(this.pageZoomScale);
var selectZoom = document.getElementById("zoomValue");
if (selectZoom)
selectZoom.value = this.pageZoomScale;
var that = this;
var reader = new FileReader();
reader.readAsDataURL(this.file);
reader.onload = function(e) {
that.ofdBase64 = e.target.result.split(",")[1];
};
this.getOfdDocument(this.file, this.screenWidth, this.pageZoomScale);
//$("#file")[0].value = null;
}
function getOfdDocument(file, screenWidth, pageZoomScale) {
var that = this;
$("#loading").show();
var contentDiv = document.getElementById("content");
contentDiv.innerHTML = "";
Object(cnofd["ofdParse"])({
ofd: file,
success: function success(res) {
that.ofdDoc = res;
that.pageIndex = 1;
that.pageCount = res.pageCount;
if (pageZoomScale == "width") {
var divs = Object(cnofd["ofdRender"])(res, screenWidth);
that.displayOfdDiv(divs);
} else {
var divs = Object(cnofd["ofdRenderByScale"])(res, screenWidth, pageZoomScale);
that.displayOfdDiv(divs);
}
$("#loading").hide();
},
fail: function fail(error) {
$("#loading").hide();
alert("OFD打开失败", error, {
confirmButtonText: "确定",
callback: function callback(action) {
this.$message({
type: "info",
message: "action: ".concat(action)
});
}
});
}
});
}
function displayOfdDiv(divs) {
var contentDiv = document.getElementById("content");
contentDiv.innerHTML = "";
var _iterator3 = _createForOfIteratorHelper(divs),
_step3;
try {
for (_iterator3.s(); ! (_step3 = _iterator3.n()).done;) {
var div = _step3.value;
contentDiv.appendChild(div);
}
} catch(err) {
_iterator3.e(err);
} finally {
_iterator3.f();
}
setPageInfo();
}
function zoomIn() {
var selectZoom = document.getElementById("zoomValue");
if (selectZoom.selectedIndex > 1) {
selectZoom.selectedIndex = selectZoom.selectedIndex - 1;
Object(cnofd["setScaleValue"])(selectZoom.options[selectZoom.selectedIndex].value);
var divs = Object(cnofd["ofdRenderByScale"])(this.ofdDoc);
if (divs) {
this.displayOfdDiv(divs);
} else {
this.getOfdDocument(this.file, this.screenWidth);
}
}
}
function zoomOut() {
var selectZoom = document.getElementById("zoomValue");
if (selectZoom.selectedIndex < selectZoom.length-1) {
selectZoom.selectedIndex = selectZoom.selectedIndex + 1;
if (selectZoom.selectedIndex == 0) selectZoom.selectedIndex = 1;
Object(cnofd["setScaleValue"])(selectZoom.options[selectZoom.selectedIndex].value);
var divs = Object(cnofd["ofdRenderByScale"])(this.ofdDoc);
if (divs) {
this.displayOfdDiv(divs);
} else {
this.getOfdDocument(this.file, this.screenWidth);
}
}
}
function zoomChange() {
var selectZoom = document.getElementById("zoomValue");
if (selectZoom.options[selectZoom.selectedIndex].value == "width") {
Object(cnofd["setScaleValue"])(selectZoom.options[selectZoom.selectedIndex].value);
var divs = Object(cnofd["ofdRender"])(this.ofdDoc, this.screenWidth);
if (divs) {
this.displayOfdDiv(divs);
} else {
this.getOfdDocument(this.file, this.screenWidth);
}
} else {
Object(cnofd["setScaleValue"])(selectZoom.options[selectZoom.selectedIndex].value);
var divs = Object(cnofd["ofdRenderByScale"])(this.ofdDoc);
if (divs) {
this.displayOfdDiv(divs);
} else {
this.getOfdDocument(this.file, this.screenWidth);
}
}
}
function scrool() {
var contentDiv = document.getElementById("content");
var contentDiv1 = contentDiv.firstElementChild;
var scrolled = (contentDiv1 === null || contentDiv1 === void 0 ? void 0 : contentDiv1.getBoundingClientRect() === null || contentDiv1.getBoundingClientRect() === void 0 ? void 0 : contentDiv1.getBoundingClientRect().top) - 60;
var top = 0;
var index = 0;
for (var i = 0; i < contentDiv.childElementCount; i++) {
var contentDiv2 = contentDiv.children.item(i);
top += Math.abs(contentDiv2 === null || contentDiv2 === void 0 ? void 0 : contentDiv2.style.height.replace("px", "")) + Math.abs(contentDiv2 === null || contentDiv2 === void 0 ? void 0 : contentDiv2.style.marginBottom.replace("px", ""));
if (Math.abs(scrolled) < top) {
index = i;
break;
}
}
this.pageIndex = index + 1;
setPageInfo();
}
function setPageInfo() {
if (! (this.pageCount == null) && this.pageCount > 0) {
$("#pageInfo")[0].innerText = this.pageIndex + "/" + this.pageCount;
}
}
function prePage() {
var contentDiv = document.getElementById("content");
var ele = contentDiv.children.item(this.pageIndex - 2);
ele === null || ele === void 0 ? void 0 : ele.scrollIntoView(true);
ele ? this.pageIndex = this.pageIndex - 1 : "";
setPageInfo();
}
function firstPage() {
var contentDiv = document.getElementById("content");
var ele = contentDiv.firstElementChild;
ele === null || ele === void 0 ? void 0 : ele.scrollIntoView(true);
ele ? this.pageIndex = 1 : "";
setPageInfo();
}
function nextPage() {
var contentDiv = document.getElementById("content");
var ele = contentDiv.children.item(this.pageIndex);
ele === null || ele === void 0 ? void 0 : ele.scrollIntoView(true);
ele ? ++this.pageIndex: "";
setPageInfo();
}
function lastPage() {
var contentDiv = document.getElementById("content");
var ele = contentDiv.children.item(contentDiv.childElementCount - 1);
ele === null || ele === void 0 ? void 0 : ele.scrollIntoView(true);
ele ? this.pageIndex = contentDiv.childElementCount : "";
setPageInfo();
}
function print() {
var contentDiv = document.getElementById("content");
var contentDivChilds = contentDiv.children;
var list = [];
for (var i = 0; i < contentDivChilds.length; i++) {
var ele = contentDivChilds.item(i);
list.push(ele.cloneNode(true));
this.percentage = i / contentDivChilds.length;
}
if (list.length > 0) {
if (!isIE()) {
var mywindow = window.open("打印窗口", "_blank");
mywindow.document.write('<!DOCTYPE html><html><head>'
+'<style media="print">.page-break { page-break-inside: avoid; page-break-after: always; }</style>'
+'</head><body></body</html>');
var documentBody = mywindow.document.body;
var _iterator2 = _createForOfIteratorHelper(list),
_step2;
try {
for (_iterator2.s(); ! (_step2 = _iterator2.n()).done;) {
var canvas = _step2.value;
canvas.style.margin = "";
canvas.style.boxShadow = "";
documentBody.appendChild(canvas);
}
} catch(err) {
_iterator2.e(err);
} finally {
_iterator2.f();
}
mywindow.focus();
mywindow.print();
mywindow.close();
} else {
var printhtml = "";
for (var i=0; i < list.length; i++) {
var canvas = list[i];
canvas.style.margin = "";
canvas.style.boxShadow = "";
printhtml = printhtml + canvas.outerHTML;
}
printIE(printhtml);
}
}
}
// IE浏览器在iframe里调用打印
function printIE(printhtml) {
//新建一个iframe
var iframe = document.createElement("iframe");
iframe.id = "printf";
iframe.style.width = "0";
iframe.style.display = "none"
iframe.style.height = "0";
iframe.style.border = "none";
//将iframe插入到printBody里
document.body.appendChild(iframe);
setTimeout(function () {
iframe.contentDocument.write(" <script type='text/javascript'> window.onload = function() { document.execCommand('print'); } </script> " + printhtml);
iframe.contentDocument.close();
},
100)
}