このプロジェクトは、サーマル レシート プリンター用のエプソンの ESC/POS プロトコルのサブセットを実装します。これを使用すると、互換性のあるプリンターで基本的な書式設定、カット、バーコードを使用してレシートを生成および印刷できます。
このライブラリは、Web ベースの販売時点管理 (POS) アプリケーションを含むあらゆる PHP アプリにレシート印刷のドロップイン サポートを追加するために開発されました。
このドライバーは、次の OS/インターフェイスの組み合わせで動作することがわかっています。
Linux | マック | 窓 | |
---|---|---|---|
イーサネット | はい | はい | はい |
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
をインストールすることもお勧めします。
多数のオプションの拡張機能を追加して、より具体的な機能を有効にすることができます。これらは、composer.json の「suggest」セクションで説明されています。
このドライバーを使用するには、サーバー (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
動作させることができない場合は、問題に動作する print コマンドを必ず含めてください。
コマンドとコード ページのサポートは、プリンタのベンダーとモデルによって異なります。デフォルトでは、ドライバーは UTF-8 を受け入れ、Epson TM シリーズ プリンターに適したコマンドを出力します。
新しいブランドのプリンタを試すときは、「単純な」 CapabilityProfile
使用することをお勧めします。これは、高度な機能 (一般に、より単純な画像処理、ASCII のみのテキスト) の使用を避けるようにドライバーに指示します。
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 );
利用可能なプロファイルのリスト、またはプリンターのサポートを改善するには、上流の Recipe-print-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
一部のバーコード規格では数値のみをエンコードできるため、数値以外のコードを印刷しようとすると、奇妙な動作が発生する可能性があることに注意してください。
以下の graphics() を参照してください。
紙を切ります。
パラメータ:
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規格で二次元データコードを印刷します。
パラメータ:
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
: 0 または 1 (それぞれピン 2 またはピン 5 キックアウト コネクタの場合)。int $on_ms
: パルス ON 時間 (ミリ秒単位)。int $off_ms
: パルスオフ時間 (ミリ秒単位)。指定したデータを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。フォントを選択します。ほとんどのプリンタには 2 つのフォント (フォント A と B) があり、一部のプリンタには 3 つ目のフォント (フォント 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 もサポートされていません。
このコードのコピーを取得し、composer で依存関係を読み込みます。
git clone https://github.com/mike42/escpos-php
cd escpos-php/
composer install
phpunit
経由で単体テストを実行します。
php vendor/bin/phpunit --coverage-text
このプロジェクトは PSR-2 標準を使用しており、PHP_CodeSniffer で確認できます。
php vendor/bin/phpcs --standard=psr2 src/ -n
開発者ドキュメントは doxygen を使用してビルドされています。ドキュメントの警告を確認するために再ビルドします。
make -C doc clean && make -C doc
プルリクエストやバグレポートは大歓迎です。