|
@@ -1062,6 +1062,7 @@ function writeImage(path, pic, baseDir) {
|
|
|
}
|
|
|
function writeDrawings(pageData, signKeyArr, signPathArr, isSinglePage, signSheetIdxArr) {
|
|
|
const rst = [];
|
|
|
+ /*
|
|
|
// console.log('isSinglePage: ' + isSinglePage);
|
|
|
if (isSinglePage) {
|
|
|
// console.log('singlePage! ');
|
|
@@ -1076,6 +1077,22 @@ function writeDrawings(pageData, signKeyArr, signPathArr, isSinglePage, signShee
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+ /*/
|
|
|
+ // 优化调整,不再每页都设置一个,重复的签名只需要一个即可(极端case: 13xx多页的签名文档,导出有1.3G大)
|
|
|
+ if (isSinglePage) {
|
|
|
+ // console.log('singlePage! ');
|
|
|
+ rst.push(writeDrawing(pageData, null, signKeyArr));
|
|
|
+ } 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));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // */
|
|
|
return rst;
|
|
|
}
|
|
|
function writeDrawing(pageData, sheetData, subSignKeyArr) {
|
|
@@ -1312,20 +1329,31 @@ function _checkAndSetSignatureCache(pageData, signKeyArr, signPathArr, roleRel,
|
|
|
} else {
|
|
|
if (roleRel) chkRoles.push(roleRel);
|
|
|
}
|
|
|
+ const _getDupPicPath = function(path) {
|
|
|
+ let rst = null;
|
|
|
+ for (const sp of signPathArr) {
|
|
|
+ if (sp.path === path) {
|
|
|
+ rst = sp;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return rst;
|
|
|
+ };
|
|
|
// console.log(chkRoles);
|
|
|
// console.log(signKeyArr);
|
|
|
// for (const page of pageData.items) {
|
|
|
for (let pageIdx = 0; pageIdx < pageData.items.length; pageIdx++) {
|
|
|
const page = pageData.items[pageIdx];
|
|
|
- if (isSinglePage) {
|
|
|
- if (pageIdx === 0) {
|
|
|
- signKeyArr.push([]);
|
|
|
- signPathArr.push([]);
|
|
|
- }
|
|
|
- } else {
|
|
|
- signKeyArr.push([]);
|
|
|
- signPathArr.push([]);
|
|
|
- }
|
|
|
+ // if (isSinglePage) {
|
|
|
+ // if (pageIdx === 0) {
|
|
|
+ // signKeyArr.push([]);
|
|
|
+ // signPathArr.push([]);
|
|
|
+ // }
|
|
|
+ // } else {
|
|
|
+ // signKeyArr.push([]);
|
|
|
+ // signPathArr.push([]);
|
|
|
+ // }
|
|
|
+ // 优化调整,不再每页都设置一个,重复的签名只需要一个即可(极端case: 13xx多页的签名文档,导出有1.3G大)
|
|
|
const curSignIdx = signKeyArr.length - 1;
|
|
|
signSheetIdxArr[pageIdx] = false;
|
|
|
// console.log('page index: ' + pageIdx);
|
|
@@ -1340,6 +1368,7 @@ function _checkAndSetSignatureCache(pageData, signKeyArr, signPathArr, roleRel,
|
|
|
// rst = true;
|
|
|
// signSheetIdxArr[pageIdx] = true;
|
|
|
// }
|
|
|
+ /*
|
|
|
if (signKeyArr[curSignIdx].indexOf(signature.signature_name) < 0) {
|
|
|
if (signature.pic) {
|
|
|
const signPath = { path: null, pic: null };
|
|
@@ -1372,11 +1401,64 @@ function _checkAndSetSignatureCache(pageData, signKeyArr, signPathArr, roleRel,
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+ /*/
|
|
|
+ // let tgKey = signature.signature_name;
|
|
|
+ // for (const role of chkRoles) {
|
|
|
+ // if (signature.signature_name === role.signature_name) {
|
|
|
+ // if (role.sign_pic) {
|
|
|
+ // //
|
|
|
+ // } else if (role.sign_path) {
|
|
|
+ // tgKey = role.sign_path;
|
|
|
+ // }
|
|
|
+ // break;
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+ // 这里把图片的路径作为key值判断
|
|
|
+ if (signKeyArr.indexOf(signature.signature_name) < 0) {
|
|
|
+ if (signature.pic) {
|
|
|
+ const signPath = { signature_name: signature.signature_name, path: null, pic: null };
|
|
|
+ signPathArr.push(signPath);
|
|
|
+ signPath.pic = signature.pic; // 历史报表
|
|
|
+ signKeyArr.push(signature.signature_name);
|
|
|
+ rst = true;
|
|
|
+ signSheetIdxArr[pageIdx] = true;
|
|
|
+ } else {
|
|
|
+ for (const role of chkRoles) {
|
|
|
+ if (signature.signature_name === role.signature_name) {
|
|
|
+ // console.log('signature.signature_name: ' + signature.signature_name);
|
|
|
+ if (role.sign_pic) {
|
|
|
+ const signPath = { signature_name: signature.signature_name, path: null, pic: null };
|
|
|
+ signPathArr.push(signPath);
|
|
|
+ signPath.pic = role.sign_pic;
|
|
|
+ signKeyArr.push(signature.signature_name);
|
|
|
+ rst = true;
|
|
|
+ signSheetIdxArr[pageIdx] = true;
|
|
|
+ } else if (role.sign_path) {
|
|
|
+ let sPObj = _getDupPicPath(role.sign_path);
|
|
|
+ if (sPObj !== null) {
|
|
|
+ signature.signature_name = sPObj.signature_name; //重点,如果有相同路径的,修改signature_name!
|
|
|
+ rst = true;
|
|
|
+ } else {
|
|
|
+ const signPath = { signature_name: signature.signature_name, path: null, pic: null };
|
|
|
+ signPathArr.push(signPath);
|
|
|
+ signPath.path = role.sign_path;
|
|
|
+ signKeyArr.push(signature.signature_name);
|
|
|
+ rst = true;
|
|
|
+ signSheetIdxArr[pageIdx] = true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //*/
|
|
|
}
|
|
|
}
|
|
|
if (page[JV.PROP_WATERMARK_CELLS] && page[JV.PROP_WATERMARK_CELLS].length > 0) {
|
|
|
// 水印,单独处理
|
|
|
const waterMarkCell = page[JV.PROP_WATERMARK_CELLS][0];
|
|
|
+ /*
|
|
|
if (signKeyArr[curSignIdx].indexOf(waterMarkCell.signature_name) < 0) {
|
|
|
// console.log('waterMarkCell');
|
|
|
// console.log(waterMarkCell);
|
|
@@ -1388,6 +1470,17 @@ function _checkAndSetSignatureCache(pageData, signKeyArr, signPathArr, roleRel,
|
|
|
rst = true;
|
|
|
signSheetIdxArr[pageIdx] = true;
|
|
|
}
|
|
|
+ /*/
|
|
|
+ if (signKeyArr.indexOf(waterMarkCell.signature_name) < 0) {
|
|
|
+ const signPath = { path: null, pic: null };
|
|
|
+ signPathArr.push(signPath);
|
|
|
+ signPath.pic = waterMarkCell.pic;
|
|
|
+ signPath.path = waterMarkCell.path;
|
|
|
+ signKeyArr.push(waterMarkCell.signature_name);
|
|
|
+ rst = true;
|
|
|
+ signSheetIdxArr[pageIdx] = true;
|
|
|
+ }
|
|
|
+ //*/
|
|
|
}
|
|
|
}
|
|
|
return rst;
|
|
@@ -1489,6 +1582,7 @@ module.exports = {
|
|
|
let picIdx = 0;
|
|
|
// console.log(signKeyArr);
|
|
|
// console.log(signPathArr);
|
|
|
+ /*
|
|
|
for (let signIdx = 0; signIdx < signPathArr.length; signIdx++) {
|
|
|
if (signKeyArr[signIdx].length > 0) {
|
|
|
for (let pathIdx = 0; pathIdx < signPathArr[signIdx].length; pathIdx++) {
|
|
@@ -1499,6 +1593,15 @@ module.exports = {
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+ /*/
|
|
|
+ // 优化调整,不再每页都设置一个,重复的签名只需要一个即可(极端case: 13xx多页的签名文档,导出有1.3G大)
|
|
|
+ for (let pathIdx = 0; pathIdx < signPathArr.length; pathIdx++) {
|
|
|
+ picIdx++;
|
|
|
+ data = writeImage(signPathArr[pathIdx].path, signPathArr[pathIdx].pic, baseDir);
|
|
|
+ file = 'image' + picIdx + '.png';
|
|
|
+ zip_media.file(file, data, { compression: 'DEFLATE' });
|
|
|
+ }
|
|
|
+ //*/
|
|
|
// 5.2
|
|
|
const zip_drawings = zip_xl.folder('drawings');
|
|
|
data = writeDrawings(pageData, signKeyArr, signPathArr, isSinglePage, signSheetIdxArr);
|
|
@@ -1516,6 +1619,7 @@ module.exports = {
|
|
|
let relsIdx = 0;
|
|
|
let relsImgAmt = 0;
|
|
|
for (let ssIdx = 0; ssIdx < signKeyArr.length; ssIdx++) {
|
|
|
+ /*
|
|
|
if (signKeyArr[ssIdx].length > 0) {
|
|
|
data = writeDrawingsRels(signKeyArr[ssIdx].length, relsImgAmt); // 一个drawingX.xml.rels文件与一个drawingX.xml对应
|
|
|
relsIdx++;
|
|
@@ -1525,6 +1629,13 @@ module.exports = {
|
|
|
file = 'drawing' + relsIdx + '.xml.rels';
|
|
|
zip_drawings_rels.file(file, data.join(''), { compression: 'DEFLATE' });
|
|
|
}
|
|
|
+ /*/
|
|
|
+ data = writeDrawingsRels(signKeyArr.length, relsImgAmt); // 一个drawingX.xml.rels文件与一个drawingX.xml对应
|
|
|
+ relsIdx++;
|
|
|
+ relsImgAmt += signKeyArr.length;
|
|
|
+ file = 'drawing' + relsIdx + '.xml.rels';
|
|
|
+ zip_drawings_rels.file(file, data.join(''), { compression: 'DEFLATE' });
|
|
|
+ // */
|
|
|
}
|
|
|
}
|
|
|
// console.log('step 5');
|