feat(est): save print settings to ESTX

This commit is contained in:
2026-11-06 22:45:11 +09:00
parent c4c3be0a7c
commit 0880665f28
6 changed files with 117 additions and 5 deletions
+51
View File
@@ -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 };