이 프로젝트는 열전사 영수증 프린터용 Epson ESC/POS 프로토콜의 하위 집합을 구현합니다. 호환되는 프린터에서 기본 서식, 자르기, 바코드를 사용하여 영수증을 생성하고 인쇄할 수 있습니다.
이 라이브러리는 웹 기반 POS(Point-of-Sale) 애플리케이션을 포함한 모든 PHP 앱에 영수증 인쇄에 대한 드롭인 지원을 추가하기 위해 개발되었습니다.
이 드라이버는 다음 OS/인터페이스 조합에서 작동하는 것으로 알려져 있습니다.
리눅스 | 스코틀랜드 사람 | 윈도우 | |
---|---|---|---|
이더넷 | 예 | 예 | 예 |
USB | 예 | 테스트되지 않음 | 예 |
USB 직렬 | 예 | 예 | 예 |
연속물 | 예 | 예 | 예 |
평행한 | 예 | 테스트되지 않음 | 예 |
SMB 공유 | 예 | 아니요 | 예 |
CUPS 호스팅 | 예 | 예 | 아니요 |
많은 열전사 영수증 프린터는 어느 정도 ESC/POS를 지원합니다. 이 드라이버는 다음과 함께 작동하는 것으로 알려져 있습니다.
feedForm()
필요함).release()
필요함).이 코드가 포함된 다른 프린터를 사용하는 경우 목록에 추가할 수 있도록 알려주시기 바랍니다.
이 라이브러리는 composer
PHP 종속성 관리자와 함께 사용하도록 설계되었습니다. 시작하려면 mike42/escpos-php
패키지를 추가하기만 하면 됩니다.
composer require mike42/escpos-php
이전에 composer
사용해 본 적이 없다면 getcomposer.org에서 해당 내용을 읽을 수 있습니다.
이 프로젝트에는 몇 가지 하드 종속성이 있습니다.
json
확장자(문서 참조)intl
확장자(문서 참조)zlib
확장자(문서 참조) 또한 이미지 처리 속도를 높이는 데 사용할 수 있는 imagick
또는 gd
설치하는 것이 좋습니다.
보다 구체적인 기능을 활성화하기 위해 다양한 선택적 확장을 추가할 수 있습니다. 이는 작곡가.json의 "제안" 섹션에 설명되어 있습니다.
이 드라이버를 사용하려면 서버(PHP가 설치된 곳)가 프린터와 통신할 수 있어야 합니다. 간단한 영수증을 생성하고 명령줄을 사용하여 프린터로 보내는 것부터 시작하세요.
<?php
/* Call this file 'hello-world.php' */
require __DIR__ . ' /vendor/autoload.php ' ;
use Mike42 Escpos PrintConnectors FilePrintConnector ;
use Mike42 Escpos Printer ;
$ connector = new FilePrintConnector ( " php://stdout " );
$ printer = new Printer ( $ connector );
$ printer -> text ( " Hello World! n" );
$ printer -> cut ();
$ printer -> close ();
아래에는 일반적인 인터페이스에 대한 몇 가지 예가 나와 있습니다.
netcat
사용하여 이더넷 인터페이스로 프린터와 통신합니다.
php hello-world.php | nc 10.x.x.x. 9100
Linux에서 usblp
로 연결된 USB 로컬 프린터에는 장치 파일이 있습니다(USB 병렬 인터페이스 포함).
php hello-world.php > /dev/usb/lp0
로컬 cups
서버에 설치된 컴퓨터는 lp
또는 lpr
통해 액세스됩니다.
php hello-world.php > foo.txt
lpr -o raw -H localhost -P printer foo.txt
Windows 컴퓨터의 로컬 또는 네트워크 프린터는 파일에 매핑되며 일반적으로 먼저 프린터를 공유해야 합니다.
php hello-world.php > foo.txt
net use LPT1 \serverprinter
copy foo.txt LPT1
del foo.txt
이 시점에서 문제가 발생하면 OS 및 프린터 시스템 설명서를 참조하여 작동하는 인쇄 명령을 찾아야 합니다.
PHP에서 영수증을 인쇄하려면 설정에 가장 적합한 PrintConnector를 사용하세요. 커넥터는 단순히 데이터를 프린터로 가져오는 배관 역할을 합니다.
예를 들어 NetworkPrintConnector
IP 주소와 포트를 허용합니다.
use Mike42 Escpos PrintConnectors NetworkPrintConnector ;
use Mike42 Escpos Printer ;
$ connector = new NetworkPrintConnector ( " 10.x.x.x " , 9100 );
$ printer = new Printer ( $ connector );
try {
// ... Print stuff
} finally {
$ printer -> close ();
}
직렬 프린터는 다음을 사용할 수 있습니다.
use Mike42 Escpos PrintConnectors FilePrintConnector ;
use Mike42 Escpos Printer ;
$ connector = new FilePrintConnector ( " /dev/ttyS0 " );
$ printer = new Printer ( $ connector );
지원되는 각 OS/인터페이스 조합에 대해 PrintConnector
구성 방법에 대한 호환성 섹션의 예가 있습니다. PrintConnector
작동하도록 할 수 없는 경우에는 문제에 작동 중인 인쇄 명령을 포함해야 합니다.
명령 및 코드 페이지에 대한 지원은 프린터 공급업체와 모델에 따라 다릅니다. 기본적으로 드라이버는 UTF-8 및 Epson TM 시리즈 프린터에 적합한 출력 명령을 허용합니다.
새로운 브랜드의 프린터를 시험해 볼 때 드라이버에 고급 기능(일반적으로 더 간단한 이미지 처리, ASCII 전용 텍스트)의 사용을 피하도록 지시하는 "간단한" CapabilityProfile
사용하는 것이 좋습니다.
use Mike42 Escpos PrintConnectors WindowsPrintConnector ;
use Mike42 Escpos CapabilityProfile ;
$ profile = CapabilityProfile:: load ( " simple " );
$ connector = new WindowsPrintConnector ( " smb://computer/printer " );
$ printer = new Printer ( $ connector , $ profile );
또 다른 예로 Star 브랜드 프린터는 다른 명령을 사용합니다.
use Mike42 Escpos PrintConnectors WindowsPrintConnector ;
use Mike42 Escpos CapabilityProfile ;
$ profile = CapabilityProfile:: load ( " SP2000 " )
$ connector = new WindowsPrintConnector ( " smb://computer/printer " );
$ printer = new Printer ( $ connector , $ profile );
사용 가능한 프로필 목록을 보거나 프린터에 대한 지원을 개선하려면 업스트림 영수증-인쇄-hq/escpos-printer-db 프로젝트를 참조하세요.
Linux에서 프린터 장치 파일은 /dev/lp0
(병렬), /dev/usb/lp1
(USB), /dev/ttyUSB0
(USB-직렬), /dev/ttyS0
(직렬)과 같은 위치에 있습니다.
Windows에서 장치 파일은 LPT1
(병렬) 또는 COM1
(직렬) 라인을 따라 배치됩니다. WindowsPrintConnector
사용하여 Windows(예: Windows USB, SMB 또는 Windows LPT)에서 시스템 인쇄를 활용합니다. 이는 프린터와 직접 통신하는 대신 대기열을 통해 인쇄 작업을 제출합니다.
완전한 실제 영수증은 ReceiptPrinter.php의 Auth 코드에서 찾을 수 있습니다. 여기에는 정당성, 대담성, 바코드가 포함됩니다.
다른 예제는 example/ 디렉터리에 있습니다.
새로운 인쇄 객체를 생성합니다.
매개변수:
PrintConnector $connector
: 데이터를 보낼 PrintConnector입니다.CapabilityProfile $profile
이 프린터에서 지원되는 기능입니다. 설정하지 않으면 Epson 프린터에 적합한 "기본" CapabilityProfile이 사용됩니다.다양한 플랫폼과 인터페이스에 대한 연결을 여는 방법은 example/interface/를 참조하세요.
바코드를 인쇄하세요.
매개변수:
string $content
: 인코딩할 정보입니다.int $type
: 출력할 바코드 표준입니다. 지정하지 않으면 Printer::BARCODE_CODE39
사용됩니다.현재 지원되는 바코드 표준은 다음과 같습니다(프린터에 따라 다름).
BARCODE_UPCA
BARCODE_UPCE
BARCODE_JAN13
BARCODE_JAN8
BARCODE_CODE39
BARCODE_ITF
BARCODE_CODABAR
일부 바코드 표준은 숫자만 인코딩할 수 있으므로 숫자가 아닌 코드를 인쇄하려고 하면 이상한 동작이 발생할 수 있습니다.
아래 그래픽()을 참조하세요.
종이를 자르세요.
매개변수:
int $mode
: 절단 모드( Printer::CUT_FULL
또는 Printer::CUT_PARTIAL
. 지정하지 않으면 Printer::CUT_FULL
사용됩니다.int $lines
: 자르기 전에 공급할 줄 수입니다. 지정하지 않으면 3이 사용됩니다.라인 인쇄 및 피드 / n 라인 인쇄 및 피드.
매개변수:
int $lines
: 공급할 줄 수일부 프린터에서는 용지를 배출하기 위해 용지 공급이 필요합니다. 대부분의 프린터에서 이 명령은 이 드라이버에서 구현되지 않은 페이지 모드에서만 유용합니다.
n 라인을 인쇄하고 역방향으로 공급합니다.
매개변수:
int $lines
: 공급할 줄 수입니다. 지정하지 않으면 1줄이 공급됩니다.이미지를 프린터로 인쇄합니다.
매개변수:
EscposImage $img
: 인쇄할 이미지입니다.int $size
: 이미지의 출력 크기 수정자입니다.크기 수정자는 다음과 같습니다.
IMG_DEFAULT
(이미지를 원본 크기로 유지)IMG_DOUBLE_WIDTH
IMG_DOUBLE_HEIGHT
최소한의 예:
<?php
$ img = EscposImage:: load ( " logo.png " );
$ printer -> graphics ( $ img );
자세한 예는 example/ 폴더를 참조하세요.
bitImage() 함수는 동일한 매개변수를 사용하며 프린터가 최신 그래픽 명령을 지원하지 않는 경우 사용할 수 있습니다. 추가 폴백으로 bitImageColumnFormat()
함수도 제공됩니다.
프린터를 초기화합니다. 그러면 서식이 다시 기본값으로 재설정됩니다.
PDF417 표준을 사용하여 2차원 데이터 코드를 인쇄합니다.
매개변수:
string $content
: 코드에 저장할 텍스트 또는 숫자number $width
: 인쇄된 코드의 모듈(픽셀) 너비입니다. 기본값은 점 3개입니다.number $heightMultiplier
: 모듈 높이에 대한 승수입니다. 기본값은 너비의 3배입니다.number $dataColumnCount
: 사용할 데이터 열 수입니다. 0(기본값)은 자동 계산입니다. 숫자가 작을수록 코드가 더 좁아지고 더 큰 픽셀 크기가 가능해집니다. 숫자가 클수록 더 작은 픽셀 크기가 필요합니다.real $ec
: 오류 수정 비율(0.01~4.00)입니다. 기본값은 0.10(10%)입니다.number $options
: 시작/끝 막대가 있는 표준 코드 Printer::PDF417_STANDARD
또는 시작 막대만 있는 잘린 코드 Printer::PDF417_TRUNCATED
.금전함이 연결된 경우 금전함을 열기 위한 펄스를 생성합니다. 기본 설정(0, 120, 240)에서는 Epson 서랍이 열립니다.
매개변수:
int $pin
: 각각 핀 2 또는 핀 5 킥아웃 커넥터에 대해 0 또는 1입니다.int $on_ms
: 펄스 ON 시간(밀리초).int $off_ms
: 펄스 OFF 시간(밀리초).주어진 데이터를 프린터에 QR 코드로 인쇄합니다.
string $content
: 코드의 내용입니다. 숫자 데이터가 더욱 효율적으로 압축됩니다.int $ec
사용할 오류 수정 수준입니다. Printer::QR_ECLEVEL_L
(기본값), Printer::QR_ECLEVEL_M
, Printer::QR_ECLEVEL_Q
또는 Printer::QR_ECLEVEL_H
중 하나입니다. 오류 수정이 높을수록 코드가 덜 컴팩트해집니다.int $size
: 사용할 픽셀 크기입니다. 1-16이어야 합니다(기본값 3).int $model
: 사용할 QR 코드 모델입니다. Printer::QR_MODEL_1
, Printer::QR_MODEL_2
(기본값) 또는 Printer::QR_MICRO
(일부 프린터에서는 지원되지 않음) 중 하나여야 합니다.인쇄 모드를 선택합니다.
매개변수:
int $mode
: 사용할 모드입니다. 기본값은 특별한 형식이 없는 Printer::MODE_FONT_A
입니다. 이는 initialize()
실행하는 것과 비슷한 효과를 갖습니다. 여러 MODE_* 상수를 함께 OR하여 이 함수의 $mode
인수에 전달할 수 있습니다. 유효한 모드는 다음과 같습니다.
MODE_FONT_A
MODE_FONT_B
MODE_EMPHASIZED
MODE_DOUBLE_HEIGHT
MODE_DOUBLE_WIDTH
MODE_UNDERLINE
바코드 높이를 설정합니다.
매개변수:
int $height
: 도트 단위의 높이입니다. 지정하지 않으면 8이 사용됩니다.바코드 막대 너비를 설정합니다.
매개변수:
int $width
: 도트 단위의 막대 너비입니다. 지정하지 않으면 3이 사용됩니다. 6보다 큰 값은 효과가 없는 것으로 보입니다.인쇄 색상 선택 - 여러 색상을 지원하는 프린터에서.
매개변수:
int $color
: 사용할 색상입니다. Printer::COLOR_1
(기본값) 또는 Printer::COLOR_2
여야 합니다.이중 공격 모드를 켜거나 끕니다.
매개변수:
boolean $on
: 더블 스트라이크의 경우 true이고, 더블 스트라이크가 아닌 경우 false입니다.강조 모드를 켜거나 끕니다.
매개변수:
boolean $on
: 강조하는 경우 true이고 강조하지 않는 경우 false입니다.글꼴을 선택하세요. 대부분의 프린터에는 두 가지 글꼴(글꼴 A와 B)이 있고 일부 프린터에는 세 번째 글꼴(글꼴 C)이 있습니다.
매개변수:
int $font
: 사용할 글꼴입니다. Printer::FONT_A
, Printer::FONT_B
또는 Printer::FONT_C
중 하나여야 합니다.정당화를 선택합니다.
매개변수:
int $justification
: Printer::JUSTIFY_LEFT
, Printer::JUSTIFY_CENTER
또는 Printer::JUSTIFY_RIGHT
중 하나입니다.선의 높이를 설정합니다.
일부 프린터에서는 더 작은 줄바꿈으로 줄을 겹칠 수 있습니다.
매개변수:
int $height
: 각 줄의 높이(점)입니다. 설정하지 않으면 프린터는 기본 줄 간격으로 재설정됩니다. 인쇄 영역 왼쪽 여백을 설정합니다. Printer::initialize()
사용하여 기본값으로 재설정합니다.
매개변수:
int $margin
: 인쇄 영역에 설정할 왼쪽 여백(점)입니다. 인쇄 영역 너비를 설정합니다. 인쇄 영역에 오른쪽 여백을 추가하는 데 사용할 수 있습니다. Printer::initialize()
사용하여 기본값으로 재설정합니다.
매개변수:
int $width
: 페이지 인쇄 영역의 너비(도트)입니다.흑백 반전 모드를 켜거나 끕니다. 이 모드에서는 검정색 배경에 텍스트가 흰색으로 인쇄됩니다.
매개변수:
boolean $on
: 활성화하려면 True, 비활성화하려면 False입니다.텍스트 크기를 일반 크기의 배수로 설정합니다.
매개변수:
int $widthMultiplier
: 사용할 일반 높이의 배수(범위 1 - 8).int $heightMultiplier
: 사용할 일반 높이의 배수입니다(범위 1 - 8).인쇄된 텍스트에 밑줄을 설정합니다.
매개변수:
int $underline
: true
/ false
또는 Printer::UNDERLINE_NONE
, Printer::UNDERLINE_SINGLE
또는 Printer::UNDERLINE_DOUBLE
중 하나입니다. 기본값은 Printer::UNDERLINE_SINGLE
입니다. 버퍼에 텍스트를 추가합니다. 텍스트 뒤에는 줄 바꿈이 와야 하며, 그렇지 않은 경우 feed()
호출해야 합니다.
매개변수:
string $str
: 인쇄할 문자열입니다.영수증 프린터 사용법을 배우는 사람들을 위해 작성한 게시물:
example/demo.php
의 출력을 문서화합니다.이 코드는 MIT 라이선스를 받았으며 프로젝트에 수정 사항을 다시 제공하는 것이 좋습니다.
개발을 위해서는 imagick
, gd
및 Xdebug
PHP 확장을 로드하는 것이 좋습니다.
테스트는 PHP 7.3, 7.4 및 8.0 이상의 Travis CI에서 실행됩니다. 현재 릴리스에서는 이전 버전의 PHP가 지원되지 않으며 HHVM도 지원되지 않습니다.
이 코드의 복사본을 가져오고 작곡가를 사용하여 종속성을 로드합니다.
git clone https://github.com/mike42/escpos-php
cd escpos-php/
composer install
phpunit
통해 단위 테스트를 실행합니다.
php vendor/bin/phpunit --coverage-text
이 프로젝트는 PHP_CodeSniffer를 통해 확인할 수 있는 PSR-2 표준을 사용합니다.
php vendor/bin/phpcs --standard=psr2 src/ -n
개발자 문서는 doxygen으로 빌드되었습니다. 문서 경고를 확인하려면 다시 빌드하세요.
make -C doc clean && make -C doc
풀 요청 및 버그 보고서를 환영합니다.