123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328 |
- const PUB_STAMP_SIZE_WIDTH = 5 * 96 / 2.54; // 公章大小:宽度(5 CM)
- const PUB_STAMP_SIZE_HEIGHT = 5 * 96 / 2.54; // 公章大小:高度(5 CM)
- function getScreenDPI() {
- if (SCREEN_DPI.length === 0) {
- if (window.screen.deviceXDPI != undefined) {
- SCREEN_DPI.push(window.screen.deviceXDPI);
- SCREEN_DPI.push(window.screen.deviceYDPI);
- } else {
- let tmpNode = document.createElement("DIV");
- tmpNode.style.cssText = "width:1in;height:1in;position:absolute;left:0px;top:0px;z-index:99;visibility:hidden";
- document.body.appendChild(tmpNode);
- SCREEN_DPI.push(parseInt(tmpNode.offsetWidth));
- SCREEN_DPI.push(parseInt(tmpNode.offsetHeight));
- tmpNode.parentNode.removeChild(tmpNode);
- }
- }
- return SCREEN_DPI;
- }
- function setupDateFormat() {
- Date.prototype.Format = function (fmt) {
- let o = {
- "M+": this.getMonth() + 1, //月份
- "d+": this.getDate(), //日
- "h+": this.getHours(), //小时
- "m+": this.getMinutes(), //分
- "s+": this.getSeconds(), //秒
- "q+": Math.floor((this.getMonth() + 3) / 3), //季度
- "S": this.getMilliseconds() //毫秒
- };
- if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
- for (let k in o)
- if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
- return fmt;
- };
- }
- function dynamicLoadJs(url, type, callback) {
- let head = document.getElementsByTagName('head')[0];
- let script = document.createElement('script');
- script.type = 'text/javascript';
- script.src = url;
- if(callback) {
- script.onload = script.onreadystatechange = function (event) {
- callback(type);
- script.onload = script.onreadystatechange = null;
- };
- }
- head.appendChild(script);
- }
- /**
- * 获取 blob
- * @param {String} url 目标文件地址
- * @return {Promise}
- */
- function getBlobPublic(url) {
- return new Promise(resolve => {
- const xhr = new XMLHttpRequest();
- xhr.open('GET', url, true);
- xhr.responseType = 'blob';
- xhr.onload = () => {
- if (xhr.status === 200) {
- resolve(xhr.response);
- } else {
- resolve('not found!');
- }
- };
- xhr.send();
- });
- }
- function getProperSignatureArea(cell, control, offsetX, offsetY, JV = null) {
- // 约定默认长宽比例是2:1,图片分辨率是600*300
- const rst = [0, 0, 0, 0]; // left, top, right, bottom
- if (JV) {
- if (cell && cell[JV.PROP_AREA]) {
- if (cell.hasOwnProperty('isOrgShow') && cell.isOrgShow) {
- rst[JV.IDX_LEFT] = cell[JV.PROP_AREA][JV.PROP_LEFT];
- rst[JV.IDX_TOP] = cell[JV.PROP_AREA][JV.PROP_TOP];
- rst[JV.IDX_RIGHT] = cell[JV.PROP_AREA][JV.PROP_RIGHT];
- rst[JV.IDX_BOTTOM] = cell[JV.PROP_AREA][JV.PROP_BOTTOM];
- } else {
- let width = cell[JV.PROP_AREA][JV.PROP_RIGHT] - cell[JV.PROP_AREA][JV.PROP_LEFT],
- height = cell[JV.PROP_AREA][JV.PROP_BOTTOM] - cell[JV.PROP_AREA][JV.PROP_TOP],
- centerPh = (cell[JV.PROP_AREA][JV.PROP_RIGHT] + cell[JV.PROP_AREA][JV.PROP_LEFT]) / 2,
- centerPv = (cell[JV.PROP_AREA][JV.PROP_BOTTOM] + cell[JV.PROP_AREA][JV.PROP_TOP]) / 2
- ;
- if (width > height * 2) {
- width = height * 2;
- } else {
- height = width / 2;
- }
- switch (control[JV.CONTROL_PROPS[JV.CONTROL_PROP_IDX_HORIZON]]) {
- case 'left':
- rst[JV.IDX_LEFT] = cell[JV.PROP_AREA][JV.PROP_LEFT];
- rst[JV.IDX_RIGHT] = rst[0] + width;
- break;
- case 'right':
- rst[JV.IDX_RIGHT] = cell[JV.PROP_AREA][JV.PROP_RIGHT];
- rst[JV.IDX_LEFT] = rst[JV.IDX_RIGHT] - width;
- break;
- default:
- //center
- rst[JV.IDX_LEFT] = centerPh - width / 2;
- rst[JV.IDX_RIGHT] = centerPh + width / 2;
- break;
- }
- switch (control[JV.CONTROL_PROPS[JV.CONTROL_PROP_IDX_VERTICAL]]) {
- case 'top':
- rst[JV.IDX_TOP] = cell[JV.PROP_AREA][JV.PROP_TOP];
- rst[JV.IDX_BOTTOM] = rst[JV.IDX_TOP] + height;
- break;
- case 'bottom':
- rst[JV.IDX_BOTTOM] = cell[JV.PROP_AREA][JV.PROP_BOTTOM];
- rst[JV.IDX_TOP] = rst[JV.IDX_BOTTOM] - height;
- break;
- default:
- //center
- rst[JV.IDX_TOP] = centerPv - height / 2;
- rst[JV.IDX_BOTTOM] = centerPv + height / 2;
- break;
- }
- }
- }
- }
- rst[0] = rst[0] + offsetX;
- rst[2] = rst[2] + offsetX;
- rst[1] = rst[1] + offsetY;
- rst[3] = rst[3] + offsetY;
- return rst;
- }
- function resetStampArea(ctrl, stampCell, JV, stampFeature = 'not found!') {
- let pLeft = stampCell.orgArea.Left,
- pTop = stampCell.orgArea.Top;
- if (stampFeature !== 'not found!') {
- let std_stamp_size_width = PUB_STAMP_SIZE_WIDTH, std_stamp_size_height = PUB_STAMP_SIZE_HEIGHT;
- let widthRate = 1, heightRate = 1;
- if (stampFeature) {
- std_stamp_size_width = parseFloat(stampFeature.ImageWidth.value);
- std_stamp_size_height = parseFloat(stampFeature.ImageHeight.value);
- if (stampFeature.ImageWidth.value !== stampFeature.ImageHeight.value) {
- //设置比例
- if (std_stamp_size_width > std_stamp_size_height) {
- heightRate = std_stamp_size_height / std_stamp_size_width;
- } else {
- widthRate = std_stamp_size_width / std_stamp_size_height;
- }
- }
- if (std_stamp_size_width > PUB_STAMP_SIZE_WIDTH || std_stamp_size_height > PUB_STAMP_SIZE_HEIGHT) {
- if (widthRate === 1) {
- std_stamp_size_width = Math.min(std_stamp_size_width, PUB_STAMP_SIZE_WIDTH);
- std_stamp_size_height = std_stamp_size_width * heightRate;
- } else {
- std_stamp_size_height = Math.min(std_stamp_size_height, PUB_STAMP_SIZE_HEIGHT);
- std_stamp_size_width = std_stamp_size_height * widthRate;
- }
- }
- }
- switch (ctrl[JV.CONTROL_PROPS[JV.CONTROL_PROP_IDX_HORIZON]]) {
- case JV.OUTPUT_ALIGN.H[JV.H_ALIGN_IDX_LEFT]:
- pLeft = stampCell.orgArea.Left;
- break;
- case JV.OUTPUT_ALIGN.H[JV.H_ALIGN_IDX_CENTER]:
- pLeft = (stampCell.orgArea.Left + stampCell.orgArea.Right - std_stamp_size_width) / 2;
- break;
- case JV.OUTPUT_ALIGN.H[JV.H_ALIGN_IDX_RIGHT]:
- pLeft = stampCell.orgArea.Right - std_stamp_size_width;
- break;
- default:break;
- }
- switch (ctrl[JV.CONTROL_PROPS[JV.CONTROL_PROP_IDX_VERTICAL]]) {
- case JV.OUTPUT_ALIGN.H[JV.V_ALIGN_IDX_TOP]:
- pTop = stampCell.orgArea.Top;
- break;
- case JV.OUTPUT_ALIGN.H[JV.V_ALIGN_IDX_CENTER]:
- pTop = (stampCell.orgArea.Top + stampCell.orgArea.Bottom - std_stamp_size_height) / 2;
- break;
- case JV.OUTPUT_ALIGN.H[JV.V_ALIGN_IDX_BOTTOM]:
- pTop = stampCell.orgArea.Bottom - std_stamp_size_height;
- break;
- default:break;
- }
- stampCell.area.Left = pLeft;
- stampCell.area.Top = pTop;
- stampCell.area.Right = pLeft + std_stamp_size_width;
- stampCell.area.Bottom = pTop + std_stamp_size_height;
- // 最后一步,如超过报表范围,则要调整坐标
- if (stampCell.maxRect) {
- const maxRect = stampCell.maxRect;
- if (stampCell.area.Left < maxRect[0]) {
- const width = maxRect[0] - stampCell.area.Left;
- stampCell.area.Left += width;
- stampCell.area.Right += width;
- }
- if (stampCell.area.Top < maxRect[1]) {
- const height = maxRect[1] - stampCell.area.Top;
- stampCell.area.Top += height;
- stampCell.area.Bottom += height;
- }
- if (stampCell.area.Right > maxRect[2]) {
- const width = maxRect[2] - stampCell.area.Right; // 负
- stampCell.area.Left += width;
- stampCell.area.Right += width;
- }
- if (stampCell.area.Bottom > maxRect[3]) {
- const height = maxRect[3] - stampCell.area.Bottom;
- stampCell.area.Top += height;
- stampCell.area.Bottom += height;
- }
- }
- }
- }
- async function getPicFeature(picPath) {
- const rst = await getHttpBlobText(picPath + '?x-oss-process=image/info');
- return rst;
- }
- function getHttpBlobText(url) {
- return new Promise(resolve => {
- const xhr = new XMLHttpRequest();
- // let fullUrl = url + '?x-oss-process=image/info';
- xhr.open('GET', url, true);
- xhr.responseType = 'json';
- xhr.onload = () => {
- if (xhr.status === 200) {
- resolve(xhr.response);
- } else {
- resolve('not found!');
- }
- };
- xhr.send();
- });
- }
- function filterSignCells(pageObj, bkSignCells, bkTxtSignCells, bkPicSignCells, isTextSignature = false, isCloseArchive = false) {
- if (isTextSignature) {
- pageObj.items.forEach((pageItem) => {
- const dtlSignCells = [];
- bkSignCells.push(dtlSignCells);
- for (let sCellIdx = pageItem.signature_cells.length - 1; sCellIdx >= 0; sCellIdx--) {
- let sCell = pageItem.signature_cells[sCellIdx];
- if (sCell.signature_name.indexOf('dummy_pic') < 0) {
- dtlSignCells.push(sCell);
- pageItem.signature_cells.splice(sCellIdx, 1);
- if (isCloseArchive) {
- // 如果还有closeArchiveSignature标记,那么不显示文本文档(只是清除匹配cell的Value,后续需要恢复)
- const cCell = pageItem.cells.find(cell => cell.area.Left === sCell.area.Left && cell.area.Top === sCell.area.Top && cell.Value === sCell.Value);
- if (cCell) {
- bkTxtSignCells.push({bkCell: cCell, bkValue: cCell.Value});
- cCell.Value = '';
- }
- }
- } else if (isCloseArchive) {
- // 这个跟上面的判断属性不同,是orgArea(签章的)
- for (let cIdx = pageItem.cells.length - 1; cIdx >= 0; cIdx--) {
- const cCell = pageItem.cells[cIdx];
- if (cCell.area.Left === sCell.orgArea.Left && cCell.area.Right === sCell.orgArea.Right &&
- cCell.area.Top === sCell.orgArea.Top && cCell.area.Bottom === sCell.orgArea.Bottom &&
- cCell.Value !== '') {
- bkTxtSignCells.push({bkCell: cCell, bkValue: cCell.Value});
- cCell.Value = '';
- break;
- }
- }
- }
- }
- });
- } else if (isCloseArchive) {
- pageObj.items.forEach((pageItem, pageIdx) => {
- const dtlSignCells = [];
- const dtlDummyCells = [];
- bkSignCells.push(dtlSignCells);
- bkPicSignCells.push(dtlDummyCells);
- for (let sCellIdx = pageItem.signature_cells.length - 1; sCellIdx >= 0; sCellIdx--) {
- let sCell = pageItem.signature_cells[sCellIdx];
- if (sCell.signature_name.indexOf('dummy_pic') < 0) {
- // IMPORTANT: 所有不是dummy_pic的签名都处理,不用管用户有没有真实选择签名
- dtlSignCells.push(sCell);
- pageItem.signature_cells.splice(sCellIdx, 1);
- // 还得加一个dummy cell,处理边框用的
- const newCell = {
- font: 'Footer',
- control: sCell.control,
- style: sCell.style,
- Value: '',
- area: { Left: sCell.area.Left, Right: sCell.area.Right, Top: sCell.area.Top, Bottom: sCell.area.Bottom },
- };
- dtlDummyCells.push(newCell);
- pageItem.cells.push(newCell);
- }
- }
- });
- }
- }
- function restoreSignCells(pageObj, bkSignCells, bkTxtSignCells, bkPicSignCells) {
- if (bkSignCells && pageObj.items.length === bkSignCells.length) {
- pageObj.items.forEach((pageItem, pageIdx) => {
- bkSignCells[pageIdx].forEach((srcCell) => {
- pageItem.signature_cells.push(srcCell);
- });
- bkSignCells[pageIdx] = null;
- });
- bkSignCells.splice(0);
- }
- if (bkTxtSignCells && bkTxtSignCells.length) {
- bkTxtSignCells.forEach(txtCellBkObj => {
- txtCellBkObj.bkCell.Value = txtCellBkObj.bkValue;
- });
- bkTxtSignCells.splice(0);
- }
- if (bkPicSignCells && bkPicSignCells.length === pageObj.items.length) {
- pageObj.items.forEach((pageItem, pageIdx) => {
- bkPicSignCells[pageIdx].forEach((dummyCell) => {
- const idx = pageItem.cells.indexOf(dummyCell);
- if (idx >= 0) pageItem.cells.splice(idx, 1);
- });
- bkPicSignCells[pageIdx] = null;
- });
- bkPicSignCells.splice(0);
- }
- }
|