|
@@ -11,6 +11,7 @@ const DPI = jpcCmnHelper.getScreenDPI()[0];
|
|
|
const fsUtil = require('../public/fsUtil');
|
|
|
const dftHeadXml = '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>';
|
|
|
const uuidV1 = require('uuid/v1');
|
|
|
+const atob = require('atob');
|
|
|
|
|
|
function writeContentTypes(sheets, isSinglePage, hasSignature) {
|
|
|
const rst = [];
|
|
@@ -330,7 +331,7 @@ function writeSharedString(sharedStrList) {
|
|
|
}
|
|
|
return rst;
|
|
|
}
|
|
|
-function writeSheets(pageData, paperSize, sharedStrList, stylesObj, isSinglePage, custSheetMergeBands, hasSignature) {
|
|
|
+function writeSheets(pageData, paperSize, sharedStrList, stylesObj, isSinglePage, custSheetMergeBands, hasSignature, signSheetIdxArr) {
|
|
|
const rst = [];
|
|
|
const private_pushDftFont = function() {
|
|
|
const font = {};
|
|
@@ -373,14 +374,14 @@ function writeSheets(pageData, paperSize, sharedStrList, stylesObj, isSinglePage
|
|
|
private_buildFirstDftStyle();
|
|
|
let sheetIdx = 0;
|
|
|
if (isSinglePage) {
|
|
|
- rst.push(writeSheet(pageData, null, paperSize, sharedStrList, stylesObj, null, hasSignature, sheetIdx));
|
|
|
+ rst.push(writeSheet(pageData, null, paperSize, sharedStrList, stylesObj, null, hasSignature, sheetIdx, signSheetIdxArr));
|
|
|
} else {
|
|
|
for (let i = 0; i < pageData.items.length; i++) {
|
|
|
let appointedMergeBand = null;
|
|
|
if (custSheetMergeBands && custSheetMergeBands.length > i) {
|
|
|
appointedMergeBand = custSheetMergeBands[i];
|
|
|
}
|
|
|
- rst.push(writeSheet(pageData, pageData.items[i], paperSize, sharedStrList, stylesObj, appointedMergeBand, hasSignature, sheetIdx));
|
|
|
+ rst.push(writeSheet(pageData, pageData.items[i], paperSize, sharedStrList, stylesObj, appointedMergeBand, hasSignature, sheetIdx, signSheetIdxArr));
|
|
|
sheetIdx++;
|
|
|
}
|
|
|
}
|
|
@@ -476,7 +477,7 @@ function preAnalyzePos(pageData, sheetData, xPos, yPos, yMultiPos) {
|
|
|
xPos.push(0);
|
|
|
if (sheetData) {
|
|
|
// current sheet data
|
|
|
- console.log('preAnalyzePos not single');
|
|
|
+ // console.log('preAnalyzePos not single');
|
|
|
yPos.push(0);
|
|
|
self_analyze_sheet_pos(sheetData, xPos, yPos);
|
|
|
xPos.sort(private_array_sort);
|
|
@@ -504,7 +505,7 @@ function preAnalyzePos(pageData, sheetData, xPos, yPos, yMultiPos) {
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
-function writeSheet(pageData, sheetData, paperSize, sharedStrList, stylesObj, appointedMergeBand, hasSignature, sheetIdx) {
|
|
|
+function writeSheet(pageData, sheetData, paperSize, sharedStrList, stylesObj, appointedMergeBand, hasSignature, sheetIdx, signSheetIdxArr) {
|
|
|
const rst = [];
|
|
|
const xPos = [];
|
|
|
const yPos = [];
|
|
@@ -706,7 +707,7 @@ function writeSheet(pageData, sheetData, paperSize, sharedStrList, stylesObj, ap
|
|
|
const private_checkControl = function(cellControl, sheetControl) {
|
|
|
let rst = true;
|
|
|
for (let i = 0; i < JV.CONTROL_PROPS.length; i++) {
|
|
|
- if (cellControl[JV.CONTROL_PROPS[i]] != sheetControl[JV.CONTROL_PROPS[i]]) {
|
|
|
+ if (cellControl[JV.CONTROL_PROPS[i]] !== sheetControl[JV.CONTROL_PROPS[i]]) {
|
|
|
rst = false;
|
|
|
break;
|
|
|
}
|
|
@@ -783,7 +784,7 @@ function writeSheet(pageData, sheetData, paperSize, sharedStrList, stylesObj, ap
|
|
|
cnt++;
|
|
|
}
|
|
|
}
|
|
|
- }
|
|
|
+ };
|
|
|
if (sheetData) {
|
|
|
self_setMergedCells(sheetData, yPos, 0);
|
|
|
} else {
|
|
@@ -924,17 +925,24 @@ function writeSheet(pageData, sheetData, paperSize, sharedStrList, stylesObj, ap
|
|
|
}
|
|
|
rst.push('<pageSetup ' + pStr + ' fitToWidth="0" fitToHeight="0" orientation="' + orientationStr + '" />');
|
|
|
rst.push('<headerFooter alignWithMargins="0"/>');
|
|
|
- if (hasSignature) {
|
|
|
- rst.push('<drawing r:id="rId' + (sheetIdx + 1) + '"/>');
|
|
|
+ if (hasSignature && signSheetIdxArr[sheetIdx]) {
|
|
|
+ // let rIdx = 1;
|
|
|
+ // for (let ssIdx = 0; ssIdx < signSheetIdxArr.length; ssIdx++) {
|
|
|
+ // if (signSheetIdxArr[ssIdx]) {
|
|
|
+ // if (ssIdx < sheetIdx) rIdx++
|
|
|
+ // else break;
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+ rst.push('<drawing r:id="rId1"/>');
|
|
|
}
|
|
|
rst.push('</worksheet>');
|
|
|
return rst;
|
|
|
}
|
|
|
-function writeWorkSheetRels(sheetIdx) {
|
|
|
+function writeWorkSheetRels(signSheetIdx) {
|
|
|
const rst = [];
|
|
|
rst.push('<?xml version="1.0" encoding="UTF-8" standalone="yes"?>');
|
|
|
rst.push('<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">');
|
|
|
- rst.push('<Relationship Id="rId' + (sheetIdx + 1) + '" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/drawing" Target="../drawings/drawing' + (sheetIdx + 1) + '.xml"/>');
|
|
|
+ rst.push('<Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/drawing" Target="../drawings/drawing' + signSheetIdx + '.xml"/>');
|
|
|
rst.push('</Relationships>');
|
|
|
return rst;
|
|
|
}
|
|
@@ -942,26 +950,29 @@ function writeImage(path, pic, baseDir) {
|
|
|
let rst = null;
|
|
|
if (pic) {
|
|
|
// 这里pic的数据就是base64的,不能是其他
|
|
|
- rst = base64ToStream(pic);
|
|
|
+ rst = base64ToBuffer(pic);
|
|
|
+ // fs.createReadStream
|
|
|
} else if (path) {
|
|
|
const filePath = baseDir + '/app' + path;
|
|
|
rst = fs.readFileSync(filePath);
|
|
|
}
|
|
|
return rst;
|
|
|
}
|
|
|
-function writeDrawings(pageData, signKeyArr, signPathArr, isSinglePage) {
|
|
|
+function writeDrawings(pageData, signKeyArr, signPathArr, isSinglePage, signSheetIdxArr) {
|
|
|
const rst = [];
|
|
|
console.log('isSinglePage: ' + isSinglePage);
|
|
|
if (isSinglePage) {
|
|
|
- rst.push(writeDrawing(pageData, null, signKeyArr, signPathArr, 0));
|
|
|
+ rst.push(writeDrawing(pageData, null, signKeyArr[0]));
|
|
|
} else {
|
|
|
for (let i = 0; i < pageData.items.length; i++) {
|
|
|
- rst.push(writeDrawing(pageData, pageData.items[i], signKeyArr, signPathArr, i));
|
|
|
+ if (signSheetIdxArr[i]) {
|
|
|
+ rst.push(writeDrawing(pageData, pageData.items[i], signKeyArr[i]));
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
return rst;
|
|
|
}
|
|
|
-function writeDrawing(pageData, sheetData, signKeyArr, signPathArr, sheetIdx) {
|
|
|
+function writeDrawing(pageData, sheetData, subSignKeyArr) {
|
|
|
const rst = [];
|
|
|
const xPos = [];
|
|
|
const yPos = [];
|
|
@@ -1013,7 +1024,7 @@ function writeDrawing(pageData, sheetData, signKeyArr, signPathArr, sheetIdx) {
|
|
|
// 3.2
|
|
|
rst.push('<xdr:blipFill>');
|
|
|
// 重点!!!
|
|
|
- const picIdx = signKeyArr.indexOf(signCell.signature_name) + 1;
|
|
|
+ const picIdx = subSignKeyArr.indexOf(signCell.signature_name) + 1;
|
|
|
// 3.2.1
|
|
|
rst.push('<a:blip xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" r:embed="rId' + picIdx + '" cstate="print">');
|
|
|
rst.push('<a:extLst>');
|
|
@@ -1036,7 +1047,7 @@ function writeDrawing(pageData, sheetData, signKeyArr, signPathArr, sheetIdx) {
|
|
|
rst.push('<a:ext cx="0" cy="0"/>');
|
|
|
rst.push('</a:xfrm>');
|
|
|
// 3.3.2
|
|
|
- rst.push('<a:prstGeom prst="rect"><a:avLst/></a:prstGeom>')
|
|
|
+ rst.push('<a:prstGeom prst="rect"><a:avLst/></a:prstGeom>');
|
|
|
// 3.3.3
|
|
|
rst.push('<a:noFill/>');
|
|
|
// 3.3.4
|
|
@@ -1053,14 +1064,14 @@ function writeDrawing(pageData, sheetData, signKeyArr, signPathArr, sheetIdx) {
|
|
|
// 4. client Data
|
|
|
rst.push('<xdr:clientData/>');
|
|
|
rst.push('</xdr:twoCellAnchor>');
|
|
|
- }
|
|
|
+ };
|
|
|
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">');
|
|
|
if (sheetData) {
|
|
|
let startPicIdx = 2;
|
|
|
for (const sCell of sheetData[JV.PROP_SIGNATURE_CELLS]) {
|
|
|
- if (signKeyArr.indexOf(sCell.signature_name) >= 0) {
|
|
|
+ if (subSignKeyArr.indexOf(sCell.signature_name) >= 0) {
|
|
|
private_setSheetDrawingCellData(sCell, yPos, startPicIdx, 0);
|
|
|
startPicIdx++;
|
|
|
}
|
|
@@ -1073,7 +1084,7 @@ function writeDrawing(pageData, sheetData, signKeyArr, signPathArr, sheetIdx) {
|
|
|
const tmpPos = yMultiPos[i];
|
|
|
let startPicIdx = 2;
|
|
|
for (const sCell of shtItemData[JV.PROP_SIGNATURE_CELLS]) {
|
|
|
- if (signKeyArr.indexOf(sCell.signature_name) >= 0) {
|
|
|
+ if (subSignKeyArr.indexOf(sCell.signature_name) >= 0) {
|
|
|
private_setSheetDrawingCellData(sCell, tmpPos, startPicIdx, rowOffset);
|
|
|
startPicIdx++;
|
|
|
}
|
|
@@ -1084,12 +1095,12 @@ function writeDrawing(pageData, sheetData, signKeyArr, signPathArr, sheetIdx) {
|
|
|
rst.push('</xdr:wsDr>');
|
|
|
return rst;
|
|
|
}
|
|
|
-function writeDrawingsRels(amt) {
|
|
|
+function writeDrawingsRels(amt, startIdx) {
|
|
|
const rst = [];
|
|
|
rst.push('<?xml version="1.0" encoding="UTF-8" standalone="yes"?>');
|
|
|
rst.push('<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">');
|
|
|
for (let idx = 0; idx < amt; idx++) {
|
|
|
- rst.push('<Relationship Id="rId' + (idx + 1) + '" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/image" Target="../media/image' + (idx + 1) + '.png"/>');
|
|
|
+ rst.push('<Relationship Id="rId' + (idx + 1) + '" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/image" Target="../media/image' + (startIdx + idx + 1) + '.png"/>');
|
|
|
}
|
|
|
rst.push('</Relationships>');
|
|
|
return rst;
|
|
@@ -1110,7 +1121,7 @@ function mergeProperties(orgObj, newObj) {
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
-function checkAndSetSignatureCache(pageData, signKeyArr, signPathArr, roleRel) {
|
|
|
+function checkAndSetSignatureCache(pageData, signKeyArr, signPathArr, roleRel, signSheetIdxArr) {
|
|
|
// 备注:电子签名是以图形的方式处理,一页可以有多个签名,多页的签名基本是引用同样的图片,在这里先处理一下,后期统一引用。
|
|
|
// 另:以后的图片(在电子签名(signature_cells)以外的图片)会单独处理(如计算图等)
|
|
|
let rst = false;
|
|
@@ -1121,33 +1132,43 @@ function checkAndSetSignatureCache(pageData, signKeyArr, signPathArr, roleRel) {
|
|
|
chkRoles.push(roleRel);
|
|
|
}
|
|
|
// console.log(chkRoles);
|
|
|
- for (const page of pageData.items) {
|
|
|
+ // console.log(signKeyArr);
|
|
|
+ // for (const page of pageData.items) {
|
|
|
+ for (let pageIdx = 0; pageIdx < pageData.items.length; pageIdx++) {
|
|
|
+ const page = pageData.items[pageIdx];
|
|
|
+ signKeyArr.push([]);
|
|
|
+ signPathArr.push([]);
|
|
|
+ signSheetIdxArr[pageIdx] = false;
|
|
|
if (page[JV.PROP_SIGNATURE_CELLS] && page[JV.PROP_SIGNATURE_CELLS].length > 0) {
|
|
|
- // console.log('has SignatureCells!');
|
|
|
+ // console.log('page index: ' + pageIdx);
|
|
|
+ // console.log(page[JV.PROP_SIGNATURE_CELLS]);
|
|
|
for (const signature of page[JV.PROP_SIGNATURE_CELLS]) {
|
|
|
- if (signKeyArr.indexOf(signature.signature_name) < 0) {
|
|
|
+ if (signKeyArr[pageIdx].indexOf(signature.signature_name) < 0) {
|
|
|
if (signature.pic) {
|
|
|
const signPath = { path: null, pic: null };
|
|
|
- signPathArr.push(signPath);
|
|
|
+ signPathArr[pageIdx].push(signPath);
|
|
|
signPath.pic = signature.pic; // 历史报表
|
|
|
- signKeyArr.push(signature.signature_name);
|
|
|
+ signKeyArr[pageIdx].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 = { path: null, pic: null };
|
|
|
- signPathArr.push(signPath);
|
|
|
+ signPathArr[pageIdx].push(signPath);
|
|
|
signPath.pic = role.sign_pic;
|
|
|
- signKeyArr.push(signature.signature_name);
|
|
|
+ signKeyArr[pageIdx].push(signature.signature_name);
|
|
|
rst = true;
|
|
|
+ signSheetIdxArr[pageIdx] = true;
|
|
|
} else if (role.sign_path) {
|
|
|
const signPath = { path: null, pic: null };
|
|
|
- signPathArr.push(signPath);
|
|
|
+ signPathArr[pageIdx].push(signPath);
|
|
|
signPath.path = role.sign_path;
|
|
|
- signKeyArr.push(signature.signature_name);
|
|
|
+ signKeyArr[pageIdx].push(signature.signature_name);
|
|
|
rst = true;
|
|
|
+ signSheetIdxArr[pageIdx] = true;
|
|
|
}
|
|
|
break;
|
|
|
}
|
|
@@ -1159,19 +1180,14 @@ function checkAndSetSignatureCache(pageData, signKeyArr, signPathArr, roleRel) {
|
|
|
}
|
|
|
return rst;
|
|
|
}
|
|
|
-function base64ToStream(dataurl) {
|
|
|
- // 将base64转换为流
|
|
|
+function base64ToBuffer(dataurl) {
|
|
|
+ // 将base64转换为buffer
|
|
|
const arr = dataurl.split(',');
|
|
|
- const bstr = atob(arr[1]);
|
|
|
- let n = bstr.length;
|
|
|
- const u8arr = new Uint8Array(n);
|
|
|
- while (n--) {
|
|
|
- u8arr[n] = bstr.charCodeAt(n);
|
|
|
- }
|
|
|
- return u8arr;
|
|
|
+ // console.log(arr[1]);
|
|
|
+ const rst = new Buffer(arr[1], 'base64');
|
|
|
+ return rst;
|
|
|
}
|
|
|
|
|
|
-
|
|
|
module.exports = {
|
|
|
exportExcel: function(pageData, paperSize, fName, options, custSheetNames, custSheetMergeBands, baseDir, roleRel, callback) {
|
|
|
const rptOptions = ({ singlePage: false, fileName: 'report' });
|
|
@@ -1182,11 +1198,14 @@ module.exports = {
|
|
|
const sheets = [];
|
|
|
const signKeyArr = [];
|
|
|
const signPathArr = [];
|
|
|
+ const signSheetIdxArr = []; // 确定哪些sheet有签名(在多表导出的时候,有些表可能没有签名,但其他的表有签名)
|
|
|
// console.log('in exportExcel!');
|
|
|
// console.log(roleRel);
|
|
|
- const hasSignature = (roleRel !== null) ? checkAndSetSignatureCache(pageData, signKeyArr, signPathArr, roleRel) : false;
|
|
|
+ const hasSignature = (roleRel !== null) ? checkAndSetSignatureCache(pageData, signKeyArr, signPathArr, roleRel, signSheetIdxArr) : false;
|
|
|
+ // console.log('signSheetIdxArr');
|
|
|
+ // console.log(signSheetIdxArr);
|
|
|
// const hasSignature = false;
|
|
|
- console.log('hasSignature: ' + hasSignature);
|
|
|
+ // console.log('hasSignature: ' + hasSignature);
|
|
|
if (isSinglePage) {
|
|
|
sheets.push({ sheetName: '全部页' });
|
|
|
} else {
|
|
@@ -1233,16 +1252,24 @@ module.exports = {
|
|
|
data = writeTheme();
|
|
|
zip_theme.file(file, data, { compression: 'DEFLATE' });
|
|
|
if (hasSignature) {
|
|
|
- // 5.1
|
|
|
+ // 5.1 写所有的image
|
|
|
const zip_media = zip_xl.folder('media');
|
|
|
+ let picIdx = 0;
|
|
|
+ // console.log(signKeyArr);
|
|
|
+ // console.log(signPathArr);
|
|
|
for (let signIdx = 0; signIdx < signPathArr.length; signIdx++) {
|
|
|
- data = writeImage(signPathArr[signIdx].path, signPathArr[signIdx].pic, baseDir);
|
|
|
- file = 'image' + (signIdx + 1) + '.png';
|
|
|
- zip_media.file(file, data, { compression: 'DEFLATE' });
|
|
|
+ if (signKeyArr[signIdx].length > 0) {
|
|
|
+ for (let pathIdx = 0; pathIdx < signPathArr[signIdx].length; pathIdx++) {
|
|
|
+ picIdx++;
|
|
|
+ data = writeImage(signPathArr[signIdx][pathIdx].path, signPathArr[signIdx][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);
|
|
|
+ data = writeDrawings(pageData, signKeyArr, signPathArr, isSinglePage, signSheetIdxArr);
|
|
|
// console.log('isSinglePage: ' + isSinglePage);
|
|
|
// console.log(data);
|
|
|
for (let psIdx = 0; psIdx < data.length; psIdx++) {
|
|
@@ -1253,17 +1280,25 @@ module.exports = {
|
|
|
}
|
|
|
// 5.3
|
|
|
const zip_drawings_rels = zip_drawings.folder('_rels');
|
|
|
- data = writeDrawingsRels(signPathArr.length); // 这个一个文件搞定算了,无需多个文件
|
|
|
- // console.log('drawing1.xml.rels data');
|
|
|
- // console.log(data);
|
|
|
- file = 'drawing1.xml.rels';
|
|
|
- zip_drawings_rels.file(file, data.join(''), { compression: 'DEFLATE' });
|
|
|
+ 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++;
|
|
|
+ relsImgAmt += signKeyArr[ssIdx].length;
|
|
|
+ // console.log('drawing1.xml.rels data');
|
|
|
+ // console.log(data);
|
|
|
+ file = 'drawing' + relsIdx + '.xml.rels';
|
|
|
+ zip_drawings_rels.file(file, data.join(''), { compression: 'DEFLATE' });
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
// 6.
|
|
|
const zip_xl_worksheets = zip_xl.folder('worksheets');
|
|
|
const sharedStrList = [];
|
|
|
const stylesObj = {};
|
|
|
- data = writeSheets(pageData, paperSize, sharedStrList, stylesObj, isSinglePage, custSheetMergeBands, hasSignature);
|
|
|
+ data = writeSheets(pageData, paperSize, sharedStrList, stylesObj, isSinglePage, custSheetMergeBands, hasSignature, signSheetIdxArr);
|
|
|
if (isSinglePage) {
|
|
|
for (let i = 0; i < 1; i++) {
|
|
|
file = 'sheet' + (i + 1) + '.xml';
|
|
@@ -1279,14 +1314,18 @@ module.exports = {
|
|
|
if (hasSignature) {
|
|
|
const zip_xl_worksheets_rels = zip_xl_worksheets.folder('_rels');
|
|
|
if (isSinglePage) {
|
|
|
- data = writeWorkSheetRels(0);
|
|
|
+ data = writeWorkSheetRels(1);
|
|
|
file = 'sheet1.xml.rels';
|
|
|
zip_xl_worksheets_rels.file(file, data.join(''), { compression: 'DEFLATE' });
|
|
|
} else {
|
|
|
+ let ssIdx = 0;
|
|
|
for (let i = 0; i < data.length; i++) {
|
|
|
- data = writeWorkSheetRels(i);
|
|
|
- file = 'sheet' + (i + 1) + '.xml.rels';
|
|
|
- zip_xl_worksheets_rels.file(file, data.join(''), { compression: 'DEFLATE' });
|
|
|
+ if (signSheetIdxArr[i]) {
|
|
|
+ ssIdx++;
|
|
|
+ const ssData = writeWorkSheetRels(ssIdx);
|
|
|
+ file = 'sheet' + (i + 1) + '.xml.rels';
|
|
|
+ zip_xl_worksheets_rels.file(file, ssData.join(''), { compression: 'DEFLATE' });
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -1372,17 +1411,45 @@ module.exports = {
|
|
|
mergeBand[JV.PROP_TOP].push(pageDataArray[i][JV.BAND_PROP_MERGE_BAND][JV.PROP_TOP] + offsetY);
|
|
|
mergeBand[JV.PROP_BOTTOM].push(pageDataArray[i][JV.BAND_PROP_MERGE_BAND][JV.PROP_BOTTOM] + offsetY);
|
|
|
}
|
|
|
- for (let k = 0; k < pageDataArray[i].items[j].cells.length; k++) {
|
|
|
- if (maxY < pageDataArray[i].items[j].cells[k][JV.PROP_AREA][JV.PROP_BOTTOM]) {
|
|
|
- maxY = pageDataArray[i].items[j].cells[k][JV.PROP_AREA][JV.PROP_BOTTOM];
|
|
|
+ // 1.2.1 重新设置普通cells的Top Bottom坐标
|
|
|
+ for (const cell of pageDataArray[i].items[j].cells) {
|
|
|
+ // for (let k = 0; k < pageDataArray[i].items[j].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;
|
|
|
+ }
|
|
|
+ // 1.2.2 重新设置电子签名cells的Top Bottom坐标
|
|
|
+ for (const cell of pageDataArray[i].items[j].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);
|
|
|
+ }
|
|
|
+ // 1.2.3 重新设置电子签名日期cells的Top Bottom坐标
|
|
|
+ for (const cell of pageDataArray[i].items[j].signature_date_cells) {
|
|
|
+ if (maxY < cell[JV.PROP_AREA][JV.PROP_BOTTOM]) {
|
|
|
+ maxY = cell[JV.PROP_AREA][JV.PROP_BOTTOM];
|
|
|
}
|
|
|
- if (minY > pageDataArray[i].items[j].cells[k][JV.PROP_AREA][JV.PROP_TOP]) {
|
|
|
- minY = pageDataArray[i].items[j].cells[k][JV.PROP_AREA][JV.PROP_TOP];
|
|
|
+ if (minY > cell[JV.PROP_AREA][JV.PROP_TOP]) {
|
|
|
+ minY = cell[JV.PROP_AREA][JV.PROP_TOP];
|
|
|
}
|
|
|
- pageDataArray[i].items[j].cells[k][JV.PROP_AREA][JV.PROP_BOTTOM] += offsetY;
|
|
|
- pageDataArray[i].items[j].cells[k][JV.PROP_AREA][JV.PROP_TOP] += offsetY;
|
|
|
+ cell[JV.PROP_AREA][JV.PROP_BOTTOM] += offsetY;
|
|
|
+ cell[JV.PROP_AREA][JV.PROP_TOP] += offsetY;
|
|
|
}
|
|
|
- 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;
|
|
|
+ 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) {
|
|
|
offsetY += (bottomGap - 10);
|
|
@@ -1396,8 +1463,20 @@ module.exports = {
|
|
|
pageItem[JV.PROP_PAGE_SEQ] = i + 1;
|
|
|
pageItem[JV.PROP_CELLS] = [];
|
|
|
for (let j = 0; j < pageDataArray[i].items.length; j++) {
|
|
|
- for (let k = 0; k < pageDataArray[i].items[j].cells.length; k++) {
|
|
|
- pageItem[JV.PROP_CELLS].push(pageDataArray[i].items[j].cells[k]);
|
|
|
+ for (let k = 0; k < pageDataArray[i].items[j][JV.PROP_CELLS].length; k++) {
|
|
|
+ pageItem[JV.PROP_CELLS].push(pageDataArray[i].items[j][JV.PROP_CELLS][k]);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ pageItem[JV.PROP_SIGNATURE_CELLS] = [];
|
|
|
+ for (let j = 0; j < pageDataArray[i].items.length; j++) {
|
|
|
+ for (let k = 0; k < pageDataArray[i].items[j][JV.PROP_SIGNATURE_CELLS].length; k++) {
|
|
|
+ pageItem[JV.PROP_SIGNATURE_CELLS].push(pageDataArray[i].items[j][JV.PROP_SIGNATURE_CELLS][k]);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ pageItem[JV.PROP_SIGNATURE_DATE_CELLS] = [];
|
|
|
+ for (let j = 0; j < pageDataArray[i].items.length; j++) {
|
|
|
+ for (let k = 0; k < pageDataArray[i].items[j][JV.PROP_SIGNATURE_DATE_CELLS].length; k++) {
|
|
|
+ pageItem[JV.PROP_SIGNATURE_DATE_CELLS].push(pageDataArray[i].items[j][JV.PROP_SIGNATURE_DATE_CELLS][k]);
|
|
|
}
|
|
|
}
|
|
|
newPagePos[i][JV.NODE_PAGE_SIZE] = pageDataArray[i][JV.NODE_PAGE_INFO][JV.NODE_PAGE_SIZE];
|
|
@@ -1407,7 +1486,7 @@ module.exports = {
|
|
|
// 3. everything is ok, then call me
|
|
|
// let roleRel = null; // 未来调用的时候,这个属性要从外面给!!!
|
|
|
// roleRelArr
|
|
|
- me.exportExcel(newPageData, paperSize, fName, 'false', sheetNames, custMergeBands, baseDir, null, callback);
|
|
|
+ me.exportExcel(newPageData, paperSize, fName, 'false', sheetNames, custMergeBands, baseDir, roleRelArr, callback);
|
|
|
// fsUtil.writeObjToFile(newPageData, 'D:/GitHome/ConstructionOperation/tmp/combinedHeader.js');
|
|
|
} catch (e) {
|
|
|
console.log(e);
|