Printer Adjustments

This commit is contained in:
2026-09-07 10:56:01 +10:00
parent 511929d579
commit 28b52145eb
6 changed files with 85 additions and 12 deletions
+24 -3
View File
@@ -41,9 +41,26 @@ export function isConfigured(site) {
return Boolean(site?.printer_enabled && site?.printer_host);
}
/** brother_ql's label id. The two-colour roll is a different label to the plain one. */
/**
* brother_ql's media id for the roll that is actually loaded.
*
* This is set explicitly rather than inferred from the red styling option. A
* two-colour job sent to a plain roll is rejected by the printer with "Wrong
* Roll Type", which gives no clue that a colour checkbox caused it.
*/
export const ROLL_TYPES = {
'62': '62 mm continuous, black only',
'62red': '62 mm continuous, black and red (DK-22251)',
};
export function labelFor(site) {
return site?.badge_accent ? '62red' : '62';
const label = site?.printer_label;
return Object.hasOwn(ROLL_TYPES, label) ? label : '62';
}
/** Red ink only exists on the two-colour roll; anywhere else it prints dark grey. */
export function accentWillPrintRed(site) {
return Boolean(site?.badge_accent) && labelFor(site) === '62red';
}
/* ------------------------------------------------------------ rendering */
@@ -223,7 +240,8 @@ export async function renderBadgePng(visit, site) {
const design = createCanvas(designW, designH);
const ctx = design.getContext('2d');
const accent = Boolean(site.badge_accent);
// Only paint red when the loaded roll can actually print it.
const accent = accentWillPrintRed(site);
// Measure first, then draw the block centred down the label. Without this the
// content hugs the top and leaves a wide blank strip at the bottom of every badge.
@@ -273,6 +291,9 @@ function explainPrintError(output, host) {
if (/Unknown label|label/i.test(last) && /identifier/i.test(last)) {
return 'The printer rejected the label size. Check the roll loaded matches the badge settings.';
}
if (/wrong roll|WrongMedia|media/i.test(last)) {
return 'The printer says the roll is wrong. Check "Roll loaded in the printer" matches what is actually in the machine — a black and red job is refused on a plain roll.';
}
return last || 'The printer did not accept the job.';
}