ZPL 양식은 ^XA로 시작해 ^XZ로 끝나고, 필드 1개는 ^FO 위치, 글꼴·바코드 명령, ^FD 내용, ^FS 끝의 4단계로 이어집니다. 좌표와 크기는 mm가 아니라 헤드 도트 수이고, 203dpi는 1mm가 8도트, 300dpi는 11.8도트입니다.

양식을 처음 받거나 고쳤다면 구성 라벨 1장으로 해상도부터 확인합니다. 그다음 10줄 안팎의 테스트 양식을 보내 글자와 바코드 위치를 맞춥니다.

ZPL 명령 구조와 접두 문자

ZPL 명령은 접두 문자 1개, 영문 2글자, 쉼표로 구분한 매개변수로 이루어집니다. 구성 라벨에는 형식 접두 문자 ^(5EH), 제어 접두 문자 ~(7EH), 구분 문자 쉼표(2CH)가 인쇄됩니다.

^로 시작하는 명령은 위치·글꼴·바코드를 정하고, 아래 예제 양식 10줄이 모두 이 형식입니다. ~로 시작하는 명령은 프린터 동작을 직접 지시합니다. 구성 라벨을 출력하는 ~WC는 3글자짜리 명령이고, 프린터가 대기 상태일 때만 실행됩니다.

^FD 데이터는 최대 3,072자까지 넣지만, 명령 시작 표시인 ^와 ~ 2개는 그대로 인쇄되지 않습니다. 이 두 글자가 라벨에 필요하면 ^FH로 16진수 입력을 켜거나 접두 문자를 바꿉니다.

기본 명령어별 형식과 범위

명령형식하는 일범위·기본 설정
^XA^XA양식 시작양식 첫 줄
^XZ^XZ양식 끝·인쇄양식 마지막 줄
^FO^FOx,y필드 좌표x·y 0~32000도트, 기본 0
^A^Afo,h,w글꼴 지정방향 N·R·I·B, 가변 글꼴 높이·폭 10~32000도트
^FD^FDa인쇄할 데이터최대 3,072자
^FS^FS필드 끝필드마다 1번
^BY^BYw,r,h바코드 기본막대 폭 1~10도트(전원을 켤 때 2), 비율 2.0~3.0(기본 3.0), 높이 전원을 켤 때 10도트
^BC^BCo,h,f,g,e,mCode 128높이 1~32000도트, 숫자 줄 기본 인쇄
^GB^GBw,h,t,c,r상자와 선두께 1~32000도트(기본 1), 모서리 둥글기 0~8
^PQ^PQq,p,r,o인쇄 매수1~99,999,999장, 기본 1장
^PW, ^LL^PWa, ^LLy폭과 길이도트 단위, ^LL은 1~32000

^A 바로 뒤 1번째 글자는 글꼴 이름(A~Z, 1~9)이고 2번째 글자가 방향입니다. N은 정방향, R은 시계 방향 90도, I는 180도, B는 270도 회전입니다.

^A0은 높이와 폭을 도트 단위로 자유롭게 지정하는 가변 글꼴입니다. ^AD 같은 비트맵 글꼴은 기본 크기의 2~10배 정수배로만 커지고, 중간 크기를 넣으면 인식 가능한 다음 크기로 맞춰집니다.

^BCN,100,Y,N,N에서 3번째 Y는 바코드 아래 숫자 줄 인쇄, 4번째 N은 그 줄을 위로 올리지 않는다는 뜻입니다. 마지막 m을 A로 지정하면 숫자가 4자리 이상 이어지는 구간을 프린터가 Subset C로 자동 전환합니다.

예제 양식의 줄별 의미

아래는 203dpi 프린터와 가로 100mm, 세로 50mm 라벨 기준의 테스트 양식입니다. 폭은 100mm에 8도트를 곱해 800도트, 길이는 50mm에 8도트를 곱해 400도트입니다.

코드 줄의미
^XA양식 시작
^FXWOOJU TEST^FS주석 1줄(인쇄 안 됨)
^PW800인쇄 폭 800도트(100mm)
^LL400라벨 길이 400도트(50mm)
^LH0,0기준점 (0,0) 지정
^FO40,30^GB720,340,3^FS좌표 (40,30)부터 가로 720·세로 340도트, 두께 3도트 테두리
^FO60,50^A0N,40,40^FDWOOJU TEST^FS가변 글꼴 0, 정방향, 높이·폭 40도트 글자
^FO60,120^BY2^BCN,100,Y,N,N^FD123456789012^FS막대 폭 2도트, 높이 100도트 Code 128과 아래 숫자 줄
^PQ2같은 라벨 2장
^XZ양식 끝·인쇄

^FO60,120은 기준점에서 오른쪽으로 60도트(7.5mm), 아래로 120도트(15mm) 지점입니다. ^LH0,0을 ^LH16,0으로 바꾸면 그 뒤 ^FO 필드가 모두 오른쪽으로 16도트(2mm) 이동합니다.

같은 양식을 300dpi 프린터로 보내면 점이 작아서 전체가 줄어듭니다. 100도트는 203dpi에서 약 12.5mm, 300dpi에서 약 8.5mm입니다. 300dpi용 양식은 좌표와 크기에 약 1.48배를 곱해 다시 계산합니다.

테스트 출력 순서

  1. 구성 라벨의 해상도 표기가 8/MM이면 203dpi, 12/MM이면 300dpi, 24/MM이면 600dpi입니다. 기종별 버튼 조합은 A/S 전 자가 점검에 정리했고, ~WC 명령 1줄로도 출력됩니다.
  2. 같은 구성 라벨에서 LEFT POSITION과 LABEL TOP이 000인지 확인합니다. 두 항목이 000이어야 양식 좌표가 라벨 위치와 그대로 맞습니다.
  3. 제브라 셋업 유틸리티에서 프린터를 선택하고 Open Communication with Printer 창에 예제 10줄을 붙여 넣습니다. Send to Printer를 누르면 ^PQ2 설정대로 라벨 2장이 나옵니다.
  4. 어긋난 필드는 ^FO 좌표만 203dpi 기준 8도트(1mm) 단위로 고쳐 다시 보내고, 한 번에 필드 1개씩 고칩니다.

연속 용지는 갭이 없어서 ^LL로 길이를 지정하고, 203dpi에서 50mm 라벨은 ^LL400입니다. 갭·블랙마크·연속 3가지 용지의 센서 설정은 용지 종류별 센서 설정에 정리했습니다.

출력이 어긋날 때 확인할 명령

라벨이 1장도 나오지 않으면 마지막 줄의 ^XZ부터 확인합니다. 프린터는 ^XZ를 받는 순간 인쇄하므로, 마지막 3글자가 빠지면 데이터가 들어가도 라벨이 나오지 않습니다.

필드 1개만 빠졌다면 그 ^FO 좌표가 라벨 크기를 넘었는지 확인합니다. 203dpi에서 100mm 폭 라벨은 x가 800도트를 넘으면 필드가 라벨 바깥에 놓입니다. ^PW를 라벨 폭보다 크게 넣으면 프린터가 라벨 최대 폭으로 맞추고, 가장 작은 설정은 2도트입니다.

앞 라벨은 정상인데 다음 양식부터 위치가 밀리면 ^LH와 ^LL 2개 명령을 확인합니다. ^LH16,0을 한 번 받으면 전원을 끄거나 새 ^LH를 받을 때까지 유지되어, 다음 양식도 16도트 밀린 채 인쇄됩니다.

바코드가 나와도 스캔이 안 되면 ^BY 막대 폭을 확인하고, 예제의 ^BY2는 203dpi에서 0.25mm입니다. 막대 폭 도트 수와 해상도의 관계는 203dpi와 300dpi 차이에 따로 정리했습니다.

다른 제조사 프린터의 ZPL 호환

ZPL은 제브라 프린터 언어라서 제브라 ZD421과 ZT411은 ZPL II 양식을 그대로 받습니다.

하니웰 PD45는 명령어 언어를 ZSim으로 바꾸면 ZPL-II 양식을 출력하고, 빅솔론 SLP-TX220은 BPL-Z 에뮬레이션으로 ZPL II를 받습니다. 에뮬레이션 기종도 기존 양식을 옮기기 전에 위 10줄 테스트 양식으로 글자 크기와 바코드 위치를 먼저 확인합니다.