{{-- Z-Band Direct Wristband Template (11") - VARIABLE DATA SAFE Printer: Zebra HC100-300dpi ZPL Dimensions: 25.4mm × 279.4mm (300 × 3300 dots) Version: 2.1 - Physical printhead calibration Fixed: 2025-11-25 Variables: - $eventName: Event name (up to ~25 chars before truncation recommended) - $startTime: Event start time (string, H:i format) - $endTime: Event end time (string, H:i format) - $createdAt: Ticket creation timestamp (string) - $customerName: Customer name (ALL CAPS, up to ~20 chars) - $barcodeData: Barcode data (21-char alphanumeric - DESIGNED FOR THIS) - $tier: Zone/Tier (VIP, VVIP, GENERAL, ORANGE, GREEN, BLUE, etc.) - $table: Table number - $seat: Seat identifier BARCODE WIDTH CALCULATION: Code 128: Width = (11 × chars + 35) × module_width - 21 chars with BY2: (11×21+35)×2 = 532 dots ✓ FITS - 21 chars with BY4: (11×21+35)×4 = 1064 dots ✗ TOO WIDE PHYSICAL CALIBRATION: - X-AXIS OFFSET: 30 dots (~0.25mm) - Perfect for Zebra HC100 - Y-AXIS OFFSET: 0 dots (no vertical adjustment needed) - Preview Mode: Calibration disabled for digital graphics (centered display) - Print Mode: Calibration enabled for physical prints (perfect alignment) - Set 'preview_mode' => true in data array to disable offsets for web preview - Default (no flag): Calibration enabled for physical printing Layout Zones (Base Y positions + CALIBRATION_OFFSET): - Zone 1 (Y=900-1150): BRANDING - Logo - Zone 2 (Y=1550): EVENT CONTEXT - Name, times, timestamp - Zone 3 (Y=1550): CUSTOMER ID - Name, reference - Zone 4 (Y=1250): PRIMARY SCAN - QR Code ISOLATED - Zone 5 (Y=2150-2620): SECONDARY INFO - Tier, QR, seat, security ADJUSTMENTS (2025-11-24 physical test v2): - Zone 2: UP 200 dots (~1.7cm) - brings event info closer to logo - Zone 3: UP 250 dots (~2.1cm) - customer info well positioned - Zone 4: UP 300 dots (~2.5cm) - barcode in safe zone - Zone 5: UP 350 dots (~3cm) - ALL details now visible - Security text ends at Y=2620 - WELL CLEAR of adhesive area at Y=2700+ ADJUSTMENTS (2025-11-25 printhead calibration): - Added global CALIBRATION_OFFSET for physical printhead alignment - Initial offset: 0 dots (test and adjust based on physical print) - If losing bottom padding: Try negative values (e.g., -5, -10) - If too much bottom padding: Try positive values (e.g., +5, +10) --}} @php // CALIBRATION OFFSETS: Adjust for physical printhead alignment // Digital preview shows X=0,Y=0 at exact band edges, but physical printer has mechanical offset // Check if calibration should be applied // Preview mode: Set 'preview_mode' => true in data to disable calibration for digital graphics // Print mode: Default behavior applies calibration for perfect physical alignment $previewMode = $preview_mode ?? false; // X-AXIS OFFSET (horizontal when band is horizontal) // Controls left-to-right positioning across 1" width // Positive = move RIGHT, Negative = move LEFT // 0.3mm = ~3.5 dots at 300 DPI $CALIBRATION_OFFSET_X_PHYSICAL = 30; // Perfect alignment for Zebra HC100 $CALIBRATION_OFFSET_X = $previewMode ? 0 : $CALIBRATION_OFFSET_X_PHYSICAL; // Y-AXIS OFFSET (vertical when band is horizontal) // Controls clasp-to-adhesive positioning along 11" length // Positive = move DOWN (away from clasp), Negative = move UP (toward clasp) $CALIBRATION_OFFSET_Y_PHYSICAL = 0; // No vertical offset needed $CALIBRATION_OFFSET_Y = $previewMode ? 0 : $CALIBRATION_OFFSET_Y_PHYSICAL; // Apply offsets to all coordinates // Logo $logoX = 90 + $CALIBRATION_OFFSET_X; $logoY = 1150 + $CALIBRATION_OFFSET_Y; $groupInfo1 = 1700 + $CALIBRATION_OFFSET_Y; // Zone 2: Event info $eventX1 = 15 + $CALIBRATION_OFFSET_X; $eventX2 = 80 + $CALIBRATION_OFFSET_X; $eventX3 = 110 + $CALIBRATION_OFFSET_X; $eventY = $groupInfo1 + $CALIBRATION_OFFSET_Y; // Zone 3: Customer info $customerLabelX = 245 + $CALIBRATION_OFFSET_X; $customerNameX = 185 + $CALIBRATION_OFFSET_X; $customerRefX = 170 + $CALIBRATION_OFFSET_X; $customerY = $groupInfo1 + $CALIBRATION_OFFSET_Y; // Zone 4: QR code $qrX = 20 + $CALIBRATION_OFFSET_X; $qrY = 1400 + $CALIBRATION_OFFSET_Y; // Zone 5: Secondary info $tierX1 = 15 + $CALIBRATION_OFFSET_X; $tierX2 = 30 + $CALIBRATION_OFFSET_X; $tierQrX = 140 + $CALIBRATION_OFFSET_X; $seatX1 = 15 + $CALIBRATION_OFFSET_X; $seatX2 = 55 + $CALIBRATION_OFFSET_X; $securityX1 = 15 + $CALIBRATION_OFFSET_X; $securityX2 = 40 + $CALIBRATION_OFFSET_X; $tierBoxY = 2150 + $CALIBRATION_OFFSET_Y; $tierTextY = 2170 + $CALIBRATION_OFFSET_Y; $tierQrY = 2150 + $CALIBRATION_OFFSET_Y; $seatY = 2370 + $CALIBRATION_OFFSET_Y; $securityY = 2520 + $CALIBRATION_OFFSET_Y; @endphp ^XA ^PW300 ^LL3300 {{-- ======================================== ZONE 1: BRANDING (Y=900-1150) Logo establishes visual identity ======================================== --}} ^FO{{ $logoX }},{{ $logoY }}^GFA,4180,4180,19,003FF000000000000000000000000000000000003FF80000000000000000000000000000000001FFFE0000000000000000000000000000000007FFFF800000000000000000000000000000000FFFFFC00000000000000000000000000000001FFFFFE00000000000000000000000000000003FF03FF00000000000000000000000000000007FC00FF8000000000000000000000000000000FF0003F8000000000000000000000000000000FE0001FC000000000000000000000000000000FC0000FE000000000000000000000000000000F800007E000000000000000000000000000000F800003E000000000000000000000000000000F800003E000000000000000000000000000000F800003E000000000000000000000000000000FFFFE03F000000000000000000000000000000FFFFF83F000000000000000000000000000000FFFFF83F000000000000000000000000000000FFFFF83F000000000000000000000000000000FFFFF81F000000000000000000000000000000FFFFF00C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003FFFFFE0000000000000000000000000000001FFFFFFE0000000000000000000000000000003FFFFFFF000000000000000000000000000000FFFFFFFE000000000000000000000000000000FFFFFFFE000000000000000000000000000000FF800000000000000000000000000000000000FC000000000000000000000000000000000000F8000000000000000000000000000000000000F8000000000000000000000000000000000000F01FC000000000000000000000000000000000E03FF80000000000000000000000000000000003FFFF0000000000000000000000000000000007FFFF800000000000000000000000000000000FFFFFC00000000000000000000000000000001FFEFFF00000000000000000000000000000003FF01FF0000000000000000000000000000000FF8007F8000000000000000000000000000000FF0001F8000000000000000000000000000000FE0001FC000000000000000000000000000000FC0000FE000000000000000000000000000000F800007E000000000000000000000000000000F800003E000000000000000000000000000000F800003E000000000000000000000000700000F000003E000000000000000000000000780000F000003F0000000000000000000000003C0000E000003F0000000000000000000000003E0000E000003F0000000000000000000000001F0000E000003F0000000000000000000000001F8000F000003E0000000000000000000000000F8000F000003E0000000000000000000000000F8000F800003E0000000000000000000000000F8000F800007E0000000000000000000000000F8000F800007E0000000000000000000000000FC000FC0000FE00000000000000000000000007C000FE0001FC00000000000000000000000007C000FF0003F800000000000000000000000007E0003FC007F000000000000000000000000003E0001FFFFFF000000000000000000000000003E0001FFFFFE000000000000000000000000001F00007FFFFC000000000000000000000000000F80003FFFF00000000000000000FFFFC000000FE0001FFFE00000000000000003FFFFF0000007F80000FC0000000000000000FFFFFFFFC00003FC0000000000000000000003FFFFFFFFE00001FE0000000000000000000007FFFFFFFFF80000FE0FFFFFFFE000000000003FFFFFFFFFFF00007F0FFFFFFFE000000000007FFFFFFFFFFF80003F0FFFFFFFF00000000001FFFFFFFFFFFFE0003F8FFFFFFFF00000000007FFFFFFFFFFFFF8003FCFFFFFFFF0000000000FFFFFFFFFFFFFFC003FCFBF3FCFF0000000003FFFFFFFFFFFFFFF007FCE001F83F0000000007FFFFFFFFFFFFFFF00FFCE001F83F000000000FFFFFFFFFFFFFFFF03FF0E001F83F000000001FFFFFFFFFFFFFFFF3FFE0E001F83F000000003FFFFFFFFFFFFFFFF3FFC0F001F83F000000007FFFFFFFFFFFFFFFFFFF80F001F83E00000000FFFFFFFFFFFFFFFFFFFF00F803FFFE00000001FFFFFFFFFFFFFFFFFFFE00F807FFFE00000003FFFFFFFF003FFFFFFFF800FC0FFFFE00000003FFFFFFF80007FFFFFFF000FFFFFFFC00000007FFFFFF8000007FFFFFF000FFFFFFF00000000FFFFFFC0000000F3FFFFC003FFFC7E00000000FFFFFF80000000FFFFFFC001FFF00000000001FFFFFE000000007FFFFFC000FFE00000000001FFFFFC000000007FFFFFE0003F000000000003FFFFF000000001FFFFFFF00000000000000007FFFFE000000007FFFFFFF80000000000000007FFFFC00000001FFFFFFFF80FFFFFF800000007FFFF80000000FFFFFFFFF80FFFFFFE0000000FFFFF00000001FFFFCFFFF80FFFFFFF0000000FFFFF00000007FFFF0FFFFC0FFFFFFF8000001FFFFF0000003FFFFC1FFFFE0FFFFFFFC000001FFFFFFFFF807FFFF81FFFFE0001FE3FE000003FFFFFFFFF83FFFFE00FFFFE00007C0FE000003FFFFFFFFF8FFFFF8007FFFE00007C07E000003FFFFFFFFFFFFFFF0007FFFF00007C03E000003FFFFFFFFFFFFFF80007FFFF00007C03F000003FFFFFFFF3FFFFF00003FFFF00007C03F000007FFFFFFFFFFFFFF00F03FFFF00007C03F000007FFFFFFEFFFFFFDFFF01FFFF80007C03F000007FFFFFFFFFFFFFFFFF01FFFFC0007C03E00000FFFFFFFFFFFFFFFFFF01FFFFC0007C03E00000FFFFFFFFFFFFFFFFFF00FFFFC000FC0FE000007FFFFFFFFFFFFFFFFF007DFF0000FE3FE000000000003FFFFFFFFFFE0000000FFFFFFFC000000000003FFFFFFFFFFE0000000FFFFFFF8000000000003FFFFFFFFFFC0000000FFFFFFF0000000000003FFFFFFFFFFC0000000FFFFFFF0000000000003FFFFFFFFFFC0000000FFFFFF00000000000003FFFFFFFFFFC0000000FFFFF800000000000007FFFFFFFFFFC000000000000000000003FFFFC7FFFFFFFFFFC0078FE00000000000000FFFFFFFFFFFFFFCFFC00FFFFC0000000000000FFFFFFFFFFFFFE03F801FFFFC07FFFFFE000007FFFFFFFFFFFE000F801FFFFC0FFFFFFE000007FFFFFFFFFFFC000F801FFFF81FFFFFFF000007FFFFFFFFFFF00006003FFFF0FFFFFFFF000003FFFFFFFFFF800000007FFFF0FFFFFFFE000003FFFFFFFFFF000000007FFFF0FF000000000003FFFFFFFFF0000000007FFFF0FC000000000003FFFFFFE180000000007FFFE0F8000000000003FFFFFFE00000000000FFFFE0F8000000000001FFFFF0000000000001FFFFE0F0000000000001FFFFE0000000000001FFFFE0E0000000000000FFFFF0000000000003FFFFC0E0000000000000FFFFF0000000000003FFFF80000000000000007FFFF8000000000007FFFF80000000000000007FFFFC00000000000FFFFF80000000000000007FFFFE00000000001FFFFF80000000000000003FFFFF00000000003FFFFF00000000000000001FFFFFC000000000FFFFFE00000000000000001FFFFFE000000001FFFFFC00003FF8000000000FFFFFFC00000007FFFFFC0000FFFE000000000FFFFFFE0000001FFFFFF80001FFFF0000000007FFFFFF8000007FFFFFF00007FFFFC000000003FFFFFFFE001FFFFFFFF0000FFFFFE000000003FFFFFFFFC0FFFFFFFFE0001FF83FF000000001FFFFFFFFFFFFFFFFFFC0003FE007F800000000FFFFFFFFFFFFFFFFFF80003FC003FC000000007FFFFFFFFFFFFFFFFF8000FF0001FE000000003FFFFFFFFFFFFFFFFE0000FE0000FE000000001FFFFFFFFFFFFFFFFE0000FC00007E000000000FFFFFFFFFFFFFFFF80000F800003E0000000003FFFFFFFFFFFFFFF00000F800003F0000000003FFFFFFFFFFFFFFE00000F800003F0000000000FFFFFFFFFFFFFF800000F800001F00000000003FFFFFFFFFFFFF000000FFFFF01F80000000001FFFFFFFFFFFFE000000FFFFF81F800000000007FFFFFFFFFFF8000000FFFFF81F800000000003FFFFFFFFFFF0000000FFFFF80F8000000000007FFFFFFFFF80000000FFFFF00F0000000000001FFFFFFFFC00000000FFFFF00000000000000007FFFFFFF80000000000000000000000000000001FFFFE0000000000000000000000000000000003FFE00000000000FFFFFFC0000000000000000000000000000000FFFFFFF0000000000000000000000000000000FFFFFFF8000000000000000000000000000000FFFFFFFC000000000000000000000000000000FFFFFFFE000000000000000000000000000000000FE1FE0000000000000000000000000000000007C07E0000000000000000000000000000000007C03F0000000000000000000000000000000007C03F0000000000000000000000000000000007C01F0000000000000000000000000000000007C01F8000000000000000000000000000000007C01F8000000000000000000000000000000007C01F0000000000000000000000000000000007C03F0000000000000000000000000000000007C03F000000000000000000000000000000000FE07E000000000000000000000000000000FFFFFFFE000000000000000000000000000000FFFFFFFC000000000000000000000000000000FFFFFFF8000000000000000000000000000000FFFFFFF0000000000000000000000000000000FFFFFFE0000000000000000000000000000000FFFFF8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001FFC0000000000000000000000000000000001FFFFFF0000000000000000000000000000000FFFFFFF0000000000000000000000000000001FFFFFFF0000000000000000000000000000003FFFFFFF000000000000000000000000000000FFFFFFFE000000000000000000000000000000FF800000000000000000000000000000000000FE000000000000000000000000000000000000FC000000000000000000000000000000000000F8000000000000000000000000000000000000F8000000000000000000000000000000000000F0000000000000000000000000000000000000E00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000FFFFFF80000000000000000000000000000000FFFFFFE0000000000000000000000000000000FFFFFFF0000000000000000000000000000000FFFFFFF8000000000000000000000000000000FFFFFFFC000000000000000000000000000000FFDFFFFE0000000000000000000000000000000007C07E0000000000000000000000000000000007C07F0000000000000000000000000000000007C03F0000000000000000000000000000000007C03F0000000000000000000000000000000007C01F8000000000000000000000000000000007C01F8000000000000000000000000000000007C01F8000000000000000000000000000000007C03F0000000000000000000000000000000007C03F0000000000000000000000000000000007C07F000000000000000000000000000000000FE1FE000000000000000000000000000000001FE7FE000000000000000000000000000000FFFFFFFC000000000000000000000000000000FFFFFFF8000000000000000000000000000000FFFFFFF8000000000000000000000000000000^FS {{-- ======================================== ZONE 2: EVENT CONTEXT (Y=1550 base) ADJUSTED: Moved UP 200 dots total (~1.7cm) ======================================== --}} ^FO{{ $eventX1 }},{{ $eventY }}^A0R,40,38^FD{{ $eventName }}^FS ^FO{{ $eventX2 }},{{ $eventY }}^A0R,28,28^FD{{ $startTime }} - {{ $endTime }}^FS ^FO{{ $eventX3 }},{{ $eventY }}^A0R,18,18^FD{{ $createdAt }}^FS {{-- ======================================== ZONE 3: CUSTOMER ID (Y=1550 base) ADJUSTED: Moved UP 250 dots total (~2.1cm) ======================================== --}} ^FO{{ $customerLabelX }},{{ $customerY }}^A0R,14,14^FDGLOBAL GALA^FS ^FO{{ $customerNameX }},{{ $customerY }}^A0R,38,36^FD{{ $customerName }}^FS ^FO{{ $customerRefX }},{{ $customerY }}^A0R,14,14^FDREF: {{ $barcodeData }}^FS {{-- ======================================== ZONE 4: PRIMARY SCAN (Y=1250 base) ★ ISOLATED QR CODE ZONE ★ ADJUSTED: Moved UP 300 dots total (~2.5cm) Changed to QR code for faster scanning Magnification: 8 (reduced from 10 for better balance) ======================================== --}} ^FO{{ $qrX }},{{ $qrY }}^BQR,2,8^FDQA,{{ $barcodeData }}^FS {{-- ======================================== ZONE 5: SECONDARY INFO (Y=2150-2620 base) ADJUSTED: Moved UP 350 dots total (~3cm) Ensures all content stays away from adhesive ======================================== --}} {{-- Row 1: Tier Box + QR side by side (Y=2150-2350 base) --}} ^FO{{ $tierX1 }},{{ $tierBoxY }}^GB100,200,3^FS ^FO{{ $tierX2 }},{{ $tierTextY }}^A0R,36,28^FD{{ $tier }}^FS {{-- QR Code - positioned to right of box --}} ^FO{{ $tierQrX }},{{ $tierQrY }}^BQR,2,3^FDQA,{{ $barcodeData }}^FS {{-- Row 2: Table/Seat below the box (Y=2370 base) --}} ^FO{{ $seatX1 }},{{ $seatY }}^A0R,26,26^FDTBL {{ $table }}^FS ^FO{{ $seatX2 }},{{ $seatY }}^A0R,26,26^FDSEAT {{ $seat }}^FS {{-- Row 3: Security text (Y=2520 base) - WELL CLEAR OF ADHESIVE --}} ^FO{{ $securityX1 }},{{ $securityY }}^A0R,14,14^FDNON-TRANSFERABLE^FS ^FO{{ $securityX2 }},{{ $securityY }}^A0R,11,11^FDValid this event only^FS ^XZ