php-aidc/label-printer

Easily create and print labels on various label printers

v0.4 2021-11-17 13:36 UTC

This package is auto-updated.

Last update: 2024-04-17 19:23:34 UTC


README

Latest Version on Packagist Testing Quality Score Code Coverage Total Downloads License MIT

PhpAidc LabelPrinter is a library that help you create and print labels on printers that support Direct Protocol, Fingerprint, TSPL/TSPL2 languages (Honeywell, Intermec, TSC) via TCP/IP.

Requirements

  • PHP 7.1+
  • ext-mbstring

Installation

LabelPrinter is installed via Composer:

composer require php-aidc/label-printer

You can of course also manually edit your composer.json file

{
    "require": {
       "php-aidc/label-printer": "v0.4"
    }
}

Basic usage

Some TSPL2-like printers, such as Atol BP41/Rongta RP410, do not support all TSPL2 features.

Read data from printer

use PhpAidc\LabelPrinter\Printer;
use PhpAidc\LabelPrinter\Connector\NetworkConnector;

$printer = new Printer(new NetworkConnector('192.168.x.x'));

\var_dump($printer->ask('? VERSION$(0)'));

// "Direct Protocol  10.15.017559   \r\n"

Create and print label

use PhpAidc\LabelPrinter\Enum\Unit;
use PhpAidc\LabelPrinter\Enum\Anchor;
use PhpAidc\LabelPrinter\Enum\Charset;
use PhpAidc\LabelPrinter\Printer;
use PhpAidc\LabelPrinter\Label\Label;
use PhpAidc\LabelPrinter\Label\Element;
use PhpAidc\LabelPrinter\CompilerFactory;
use PhpAidc\LabelPrinter\Connector\NetworkConnector;

$label = Label::create(Unit::MM(), 43, 25)
    ->charset(Charset::UTF8())
    ->add(Element::textBlock(168, 95, 'Hello!', 'Univers', 8)->box(338, 100, 0)->anchor(Anchor::CENTER()))
    ->add(Element::barcode(10, 10, '123456', 'CODE93')->height(60))
;

(new Printer(new NetworkConnector('192.168.x.x'), CompilerFactory::tspl()))->print($label);

Add elements only for a specific language

use PhpAidc\LabelPrinter\Label\Label;
use PhpAidc\LabelPrinter\Label\Element;
use PhpAidc\LabelPrinter\Language\Tspl;
use PhpAidc\LabelPrinter\Language\Fingerprint;

$label = Label::create()
    ->for(Fingerprint::class, static function (Label $label) {
        $label->add(Element::textLine(168, 95, 'Hello!', 'Univers', 8));
    })
    ->for(Tspl::class, static function (Label $label) {
        $label->add(Element::textLine(10, 10, 'Hello!', 'ROMAN.TTF', 8));
    })
;

Add elements if some value is truthy

use PhpAidc\LabelPrinter\Label\Label;
use PhpAidc\LabelPrinter\Label\Element;

$text = '';

$label = Label::create()
    ->when($text, static function (Label $label, $text) {
        // will not be added until the $text is empty
        $label->add(Element::textLine(168, 95, $text, 'Univers', 8));
    })
;

Print images

use PhpAidc\LabelPrinter\Label\Label;
use PhpAidc\LabelPrinter\Label\Element;
use PhpAidc\LabelPrinter\Language\Tspl;
use PhpAidc\LabelPrinter\Language\Fingerprint;

$image = new \Imagick('gift.svg');

$label = Label::create()
    ->for(Fingerprint::class, static function (Label $label) {
        // from printer's memory — png, bmp, pcx
        $label->add(Element::intImage(10, 10, 'GLOBE.1'));
        // from filesystem
        $label->add(Element::extImage(10, 10, \realpath('alien.png')));
    })
    ->for(Tspl::class, static function (Label $label) {
        // from printer's memory — bmp, pcx
        $label->add(Element::intImage(10, 10, 'ALIEN.BMP'));
    })
    // from filesystem via Imagick — any supported types
    ->add(Element::bitmap(50, 10, $image))
;

Print text with emulation

use PhpAidc\LabelPrinter\Label\Label;
use PhpAidc\LabelPrinter\Label\Element;

$label = Label::create()
    ->add(Element::textLine(10, 10, 'Hello!', '/path/to/font/roboto.ttf', 20)->emulate())
    ->add(Element::textBlock(100, 10, 'Hello again!', '/path/to/font/roboto.ttf', 20)->box(300, 20)->emulate())
;

Text will be drawn with Imagick and printed as bitmap.

Specify the number of copies

use PhpAidc\LabelPrinter\Label\Label;
use PhpAidc\LabelPrinter\Label\Element;

$label = Label::create()
    ->add(Element::textLine(168, 95, 'Hello!', 'Univers', 8))
    ->copies(3)
;

Batch printing

use PhpAidc\LabelPrinter\Printer;
use PhpAidc\LabelPrinter\Label\Batch;
use PhpAidc\LabelPrinter\Label\Label;
use PhpAidc\LabelPrinter\Label\Element;
use PhpAidc\LabelPrinter\CompilerFactory;
use PhpAidc\LabelPrinter\Connector\NetworkConnector;

$batch = (new Batch())
    ->add(Label::create()->add(Element::textLine(168, 95, 'Hello!', 'Univers', 8)))
    ->add(Label::create()->add(Element::textLine(168, 95, 'Bye!', 'Univers', 8)))
;

(new Printer(new NetworkConnector('192.168.x.x'), CompilerFactory::fingerprint()))->print($label);

License

The PhpAidc LabelPrinter is open-sourced software licensed under the MIT license.

Some ideas taken from mike42/escpos-php.