|
@@ -1059,10 +1059,14 @@ function writeDrawings(pageData, signKeyArr, signPathArr, isSinglePage, signShee
|
|
|
const rst = [];
|
|
|
// console.log('isSinglePage: ' + isSinglePage);
|
|
|
if (isSinglePage) {
|
|
|
+ // console.log('singlePage! ');
|
|
|
rst.push(writeDrawing(pageData, null, signKeyArr[0]));
|
|
|
} else {
|
|
|
+ // console.log('pageData! ');
|
|
|
for (let i = 0; i < pageData.items.length; i++) {
|
|
|
if (signSheetIdxArr[i]) {
|
|
|
+ // console.log('signKeyArr[' + i + ']');
|
|
|
+ // console.log(signKeyArr[i]);
|
|
|
rst.push(writeDrawing(pageData, pageData.items[i], signKeyArr[i]));
|
|
|
}
|
|
|
}
|
|
@@ -1165,7 +1169,10 @@ function writeDrawing(pageData, sheetData, subSignKeyArr) {
|
|
|
preAnalyzePos(pageData, sheetData, xPos, yPos, yMultiPos);
|
|
|
rst.push('<?xml version="1.0" encoding="UTF-8" standalone="yes"?>');
|
|
|
rst.push('<xdr:wsDr xmlns:xdr="http://schemas.openxmlformats.org/drawingml/2006/spreadsheetDrawing" xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main">');
|
|
|
+ // console.log('subSignKeyArr');
|
|
|
+ // console.log(subSignKeyArr);
|
|
|
if (sheetData) {
|
|
|
+ // console.log('sheetData');
|
|
|
let startPicIdx = 2;
|
|
|
for (const sCell of sheetData[JV.PROP_SIGNATURE_CELLS]) {
|
|
|
if (subSignKeyArr.indexOf(sCell.signature_name) >= 0) {
|
|
@@ -1180,6 +1187,8 @@ function writeDrawing(pageData, sheetData, subSignKeyArr) {
|
|
|
}
|
|
|
}
|
|
|
} else {
|
|
|
+ // console.log('pageData.items[0][JV.PROP_SIGNATURE_CELLS]');
|
|
|
+ // console.log(pageData.items[1][JV.PROP_SIGNATURE_CELLS]);
|
|
|
// total data in one sheet
|
|
|
let rowOffset = 0;
|
|
|
for (let i = 0; i < pageData.items.length; i++) {
|
|
@@ -1190,6 +1199,11 @@ function writeDrawing(pageData, sheetData, subSignKeyArr) {
|
|
|
if (subSignKeyArr.indexOf(sCell.signature_name) >= 0) {
|
|
|
private_setSheetDrawingCellData(sCell, tmpPos, startPicIdx, rowOffset);
|
|
|
startPicIdx++;
|
|
|
+ // } else {
|
|
|
+ // console.log('index < 0 subSignKeyArr: ');
|
|
|
+ // console.log(subSignKeyArr);
|
|
|
+ // console.log('sCell.signature_name');
|
|
|
+ // console.log(sCell.signature_name);
|
|
|
}
|
|
|
}
|
|
|
for (const sCell of shtItemData[JV.PROP_WATERMARK_CELLS]) {
|
|
@@ -1283,7 +1297,7 @@ function createDummySignatureCell(pageData) {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-function _checkAndSetSignatureCache(pageData, signKeyArr, signPathArr, roleRel, signSheetIdxArr) {
|
|
|
+function _checkAndSetSignatureCache(pageData, signKeyArr, signPathArr, roleRel, signSheetIdxArr, isSinglePage) {
|
|
|
// 备注:电子签名是以图形的方式处理,一页可以有多个签名,多页的签名基本是引用同样的图片,在这里先处理一下,后期统一引用。
|
|
|
// 另:以后的图片(在电子签名(signature_cells)以外的图片)会单独处理(如计算草图、水印等)
|
|
|
let rst = false;
|
|
@@ -1298,8 +1312,16 @@ function _checkAndSetSignatureCache(pageData, signKeyArr, signPathArr, roleRel,
|
|
|
// for (const page of pageData.items) {
|
|
|
for (let pageIdx = 0; pageIdx < pageData.items.length; pageIdx++) {
|
|
|
const page = pageData.items[pageIdx];
|
|
|
- signKeyArr.push([]);
|
|
|
- signPathArr.push([]);
|
|
|
+ if (isSinglePage) {
|
|
|
+ if (pageIdx === 0) {
|
|
|
+ signKeyArr.push([]);
|
|
|
+ signPathArr.push([]);
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ signKeyArr.push([]);
|
|
|
+ signPathArr.push([]);
|
|
|
+ }
|
|
|
+ const curSignIdx = signKeyArr.length - 1;
|
|
|
signSheetIdxArr[pageIdx] = false;
|
|
|
// console.log('page index: ' + pageIdx);
|
|
|
// console.log(page[JV.PROP_SIGNATURE_CELLS]);
|
|
@@ -1313,12 +1335,12 @@ function _checkAndSetSignatureCache(pageData, signKeyArr, signPathArr, roleRel,
|
|
|
// rst = true;
|
|
|
// signSheetIdxArr[pageIdx] = true;
|
|
|
// }
|
|
|
- if (signKeyArr[pageIdx].indexOf(signature.signature_name) < 0) {
|
|
|
+ if (signKeyArr[curSignIdx].indexOf(signature.signature_name) < 0) {
|
|
|
if (signature.pic) {
|
|
|
const signPath = { path: null, pic: null };
|
|
|
- signPathArr[pageIdx].push(signPath);
|
|
|
+ signPathArr[curSignIdx].push(signPath);
|
|
|
signPath.pic = signature.pic; // 历史报表
|
|
|
- signKeyArr[pageIdx].push(signature.signature_name);
|
|
|
+ signKeyArr[curSignIdx].push(signature.signature_name);
|
|
|
rst = true;
|
|
|
signSheetIdxArr[pageIdx] = true;
|
|
|
} else {
|
|
@@ -1327,16 +1349,16 @@ function _checkAndSetSignatureCache(pageData, signKeyArr, signPathArr, roleRel,
|
|
|
// console.log('signature.signature_name: ' + signature.signature_name);
|
|
|
if (role.sign_pic) {
|
|
|
const signPath = { path: null, pic: null };
|
|
|
- signPathArr[pageIdx].push(signPath);
|
|
|
+ signPathArr[curSignIdx].push(signPath);
|
|
|
signPath.pic = role.sign_pic;
|
|
|
- signKeyArr[pageIdx].push(signature.signature_name);
|
|
|
+ signKeyArr[curSignIdx].push(signature.signature_name);
|
|
|
rst = true;
|
|
|
signSheetIdxArr[pageIdx] = true;
|
|
|
} else if (role.sign_path) {
|
|
|
const signPath = { path: null, pic: null };
|
|
|
- signPathArr[pageIdx].push(signPath);
|
|
|
+ signPathArr[curSignIdx].push(signPath);
|
|
|
signPath.path = role.sign_path;
|
|
|
- signKeyArr[pageIdx].push(signature.signature_name);
|
|
|
+ signKeyArr[curSignIdx].push(signature.signature_name);
|
|
|
rst = true;
|
|
|
signSheetIdxArr[pageIdx] = true;
|
|
|
}
|
|
@@ -1350,15 +1372,17 @@ function _checkAndSetSignatureCache(pageData, signKeyArr, signPathArr, roleRel,
|
|
|
if (page[JV.PROP_WATERMARK_CELLS] && page[JV.PROP_WATERMARK_CELLS].length > 0) {
|
|
|
// 水印,单独处理
|
|
|
const waterMarkCell = page[JV.PROP_WATERMARK_CELLS][0];
|
|
|
- // console.log('waterMarkCell');
|
|
|
- // console.log(waterMarkCell);
|
|
|
- const signPath = { path: null, pic: null };
|
|
|
- signPathArr[pageIdx].push(signPath);
|
|
|
- signPath.pic = waterMarkCell.pic;
|
|
|
- signPath.path = waterMarkCell.path;
|
|
|
- signKeyArr[pageIdx].push(waterMarkCell.signature_name);
|
|
|
- rst = true;
|
|
|
- signSheetIdxArr[pageIdx] = true;
|
|
|
+ if (signKeyArr[curSignIdx].indexOf(waterMarkCell.signature_name) < 0) {
|
|
|
+ // console.log('waterMarkCell');
|
|
|
+ // console.log(waterMarkCell);
|
|
|
+ const signPath = { path: null, pic: null };
|
|
|
+ signPathArr[curSignIdx].push(signPath);
|
|
|
+ signPath.pic = waterMarkCell.pic;
|
|
|
+ signPath.path = waterMarkCell.path;
|
|
|
+ signKeyArr[curSignIdx].push(waterMarkCell.signature_name);
|
|
|
+ rst = true;
|
|
|
+ signSheetIdxArr[pageIdx] = true;
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
return rst;
|
|
@@ -1393,7 +1417,7 @@ module.exports = {
|
|
|
// console.log(thisRoleRel);
|
|
|
|
|
|
// const hasSignature = false; // 暂时不支持电子签名、草图导出excel
|
|
|
- const hasSignature = _checkAndSetSignatureCache(pageData, signKeyArr, signPathArr, thisRoleRel, signSheetIdxArr); // 因草图的关系,thisRoleRel是否为null就不是充要的条件
|
|
|
+ const hasSignature = _checkAndSetSignatureCache(pageData, signKeyArr, signPathArr, thisRoleRel, signSheetIdxArr, isSinglePage); // 因草图的关系,thisRoleRel是否为null就不是充要的条件
|
|
|
// console.log('signKeyArr');
|
|
|
// console.log(signKeyArr);
|
|
|
// console.log('signPathArr');
|
|
@@ -1473,6 +1497,7 @@ module.exports = {
|
|
|
// 5.2
|
|
|
const zip_drawings = zip_xl.folder('drawings');
|
|
|
data = writeDrawings(pageData, signKeyArr, signPathArr, isSinglePage, signSheetIdxArr);
|
|
|
+ // data = writeDrawings(pageData, signKeyArr, signPathArr, false, signSheetIdxArr); // 备注:这里根本不需要考虑是否single page
|
|
|
// console.log('isSinglePage: ' + isSinglePage);
|
|
|
// console.log(data);
|
|
|
for (let psIdx = 0; psIdx < data.length; psIdx++) {
|
|
@@ -1603,9 +1628,25 @@ module.exports = {
|
|
|
// 加分页符(分页符要在外部处理好)-------------------
|
|
|
_setupPgBrks(pageDataArray[i]);
|
|
|
// 加分页符结束-------------------
|
|
|
+ let maxY = 0;
|
|
|
+ let minY = 100000;
|
|
|
+ const checkAndResetCellYPos = function(cells) {
|
|
|
+ if (cells && cells.length > 0) {
|
|
|
+ for (const cell of cells) {
|
|
|
+ if (maxY < cell[JV.PROP_AREA][JV.PROP_BOTTOM]) {
|
|
|
+ maxY = cell[JV.PROP_AREA][JV.PROP_BOTTOM];
|
|
|
+ }
|
|
|
+ if (minY > cell[JV.PROP_AREA][JV.PROP_TOP]) {
|
|
|
+ minY = cell[JV.PROP_AREA][JV.PROP_TOP];
|
|
|
+ }
|
|
|
+ cell[JV.PROP_AREA][JV.PROP_BOTTOM] += offsetY;
|
|
|
+ cell[JV.PROP_AREA][JV.PROP_TOP] += offsetY;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ };
|
|
|
for (let j = 0; j < pageDataArray[i].items.length; j++) {
|
|
|
- let maxY = 0;
|
|
|
- let minY = 100000;
|
|
|
+ maxY = 0;
|
|
|
+ minY = 100000;
|
|
|
if (pageDataArray[i].items[j][JV.PAGE_SPECIAL_MERGE_POS]) {
|
|
|
let pos = pageDataArray[i].items[j][JV.PAGE_SPECIAL_MERGE_POS][JV.PROP_TOP][0] + offsetY;
|
|
|
mergeBand[JV.PROP_TOP].push(pos);
|
|
@@ -1621,43 +1662,16 @@ module.exports = {
|
|
|
mergeBand[JV.PROP_BOTTOM].push(pageDataArray[i][JV.BAND_PROP_MERGE_BAND][JV.PROP_BOTTOM] + offsetY);
|
|
|
}
|
|
|
// 1.2.1 重新设置普通cells的Top Bottom坐标
|
|
|
- for (const cell of pageDataArray[i].items[j][JV.PROP_CELLS]) {
|
|
|
- // for (let k = 0; k < pageDataArray[i].items[j][JV.PROP_CELLS].length; k++) {
|
|
|
- if (maxY < cell[JV.PROP_AREA][JV.PROP_BOTTOM]) {
|
|
|
- maxY = cell[JV.PROP_AREA][JV.PROP_BOTTOM];
|
|
|
- }
|
|
|
- if (minY > cell[JV.PROP_AREA][JV.PROP_TOP]) {
|
|
|
- minY = cell[JV.PROP_AREA][JV.PROP_TOP];
|
|
|
- }
|
|
|
- cell[JV.PROP_AREA][JV.PROP_BOTTOM] += offsetY;
|
|
|
- cell[JV.PROP_AREA][JV.PROP_TOP] += offsetY;
|
|
|
- }
|
|
|
+ checkAndResetCellYPos(pageDataArray[i].items[j][JV.PROP_CELLS]);
|
|
|
// 1.2.2 重新设置电子签名cells的Top Bottom坐标
|
|
|
- for (const cell of pageDataArray[i].items[j][JV.PROP_SIGNATURE_CELLS]) {
|
|
|
- if (maxY < cell[JV.PROP_AREA][JV.PROP_BOTTOM]) {
|
|
|
- maxY = cell[JV.PROP_AREA][JV.PROP_BOTTOM];
|
|
|
- }
|
|
|
- if (minY > cell[JV.PROP_AREA][JV.PROP_TOP]) {
|
|
|
- minY = cell[JV.PROP_AREA][JV.PROP_TOP];
|
|
|
- }
|
|
|
- // console.log('before');
|
|
|
- // console.log(cell);
|
|
|
- cell[JV.PROP_AREA][JV.PROP_BOTTOM] += offsetY;
|
|
|
- cell[JV.PROP_AREA][JV.PROP_TOP] += offsetY;
|
|
|
- // console.log('after');
|
|
|
- // console.log(cell);
|
|
|
- }
|
|
|
+ checkAndResetCellYPos(pageDataArray[i].items[j][JV.PROP_SIGNATURE_CELLS]);
|
|
|
// 1.2.3 重新设置电子签名日期cells的Top Bottom坐标
|
|
|
- for (const cell of pageDataArray[i].items[j][JV.PROP_SIGNATURE_DATE_CELLS]) {
|
|
|
- if (maxY < cell[JV.PROP_AREA][JV.PROP_BOTTOM]) {
|
|
|
- maxY = cell[JV.PROP_AREA][JV.PROP_BOTTOM];
|
|
|
- }
|
|
|
- if (minY > cell[JV.PROP_AREA][JV.PROP_TOP]) {
|
|
|
- minY = cell[JV.PROP_AREA][JV.PROP_TOP];
|
|
|
- }
|
|
|
- cell[JV.PROP_AREA][JV.PROP_BOTTOM] += offsetY;
|
|
|
- cell[JV.PROP_AREA][JV.PROP_TOP] += offsetY;
|
|
|
- }
|
|
|
+ checkAndResetCellYPos(pageDataArray[i].items[j][JV.PROP_SIGNATURE_DATE_CELLS]);
|
|
|
+ // 1.2.4 重置电子签名审核意见cells的Top Bottom坐标
|
|
|
+ checkAndResetCellYPos(pageDataArray[i].items[j][JV.PROP_SIGNATURE_AUDIT_CELLS]);
|
|
|
+ // 1.2.5 重置水印的Top Bottom坐标
|
|
|
+ checkAndResetCellYPos(pageDataArray[i].items[j][JV.PROP_WATERMARK_CELLS]);
|
|
|
+
|
|
|
const bottomGap = Math.round((pageDataArray[i][JV.NODE_PAGE_INFO][JV.NODE_PAGE_SIZE][1] - parseFloat(pageDataArray[i][JV.NODE_PAGE_INFO][JV.NODE_MARGINS][JV.PROP_BOTTOM]) / 2.54) * DPI) - maxY;
|
|
|
offsetY += (maxY - minY);
|
|
|
if (bottomGap > 10) {
|