feat(est): save print settings to ESTX
This commit is contained in:
@@ -0,0 +1,51 @@
|
||||
const { readPrintOptions } = require("./import-print.cjs");
|
||||
const sides = new Set(["PrintTop", "PrintBottom", "PrintLeft", "PrintRight"]);
|
||||
|
||||
function updatePrintOptions(buffer, changes) {
|
||||
const output = Buffer.from(buffer),
|
||||
positions = new Map();
|
||||
readPrintOptions(output, (row, fields) => {
|
||||
const id = String(row.Index);
|
||||
if (positions.has(id)) throw Error("인쇄 서식 번호 중복");
|
||||
positions.set(id, fields);
|
||||
});
|
||||
for (const [id, values] of Object.entries(changes)) {
|
||||
if (
|
||||
!/^\d+$/.test(id) ||
|
||||
!positions.has(id) ||
|
||||
!values ||
|
||||
typeof values !== "object" ||
|
||||
Array.isArray(values)
|
||||
)
|
||||
throw Error(`인쇄 서식 변경 오류: ${id}`);
|
||||
for (const [name, value] of Object.entries(values)) {
|
||||
const field = positions.get(id)[name];
|
||||
if (
|
||||
sides.has(name) &&
|
||||
field?.kind === 4 &&
|
||||
field.width === 8 &&
|
||||
typeof value === "number" &&
|
||||
Number.isFinite(value) &&
|
||||
value >= 0 &&
|
||||
value <= 50
|
||||
)
|
||||
output.writeDoubleLE(value, field.at);
|
||||
else if (
|
||||
name === "PrintLineCount" &&
|
||||
field?.kind === 1 &&
|
||||
field.width === 4 &&
|
||||
Number.isInteger(value) &&
|
||||
value >= 1 &&
|
||||
value <= 100
|
||||
)
|
||||
output.writeInt32LE(value, field.at);
|
||||
else throw Error(`인쇄 서식 ${id}.${name}: 저장할 수 없는 값`);
|
||||
}
|
||||
}
|
||||
const reread = new Map(readPrintOptions(output).map((row) => [String(row.Index), row]));
|
||||
for (const [id, values] of Object.entries(changes))
|
||||
for (const [key, value] of Object.entries(values))
|
||||
if (reread.get(id)?.[key] !== value) throw Error(`인쇄 서식 ${id}.${key} 검산 실패`);
|
||||
return output;
|
||||
}
|
||||
module.exports = { updatePrintOptions };
|
||||
Reference in New Issue
Block a user