mike42/escpos-php
PHP library for ESC/POS receipt printers. Print text, images, barcodes, QR codes and cut paper over USB, network, serial or Windows share. Includes connectors and utilities for common thermal POS printers and cash drawers.
PrintConnector interfaces, allowing seamless integration with Laravel’s service container (e.g., binding connectors to IoC).json, intl, zlib).ReceiptPrinter facade to abstract printer logic (e.g., ReceiptPrinter::printInvoice($order)).// app/Providers/PrinterServiceProvider.php
public function register() {
$this->app->singleton(NetworkPrintConnector::class, function ($app) {
return new NetworkPrintConnector(config('printer.ip'), config('printer.port'));
});
$this->app->singleton(Printer::class, function ($app) {
return new Printer($app->make(NetworkPrintConnector::class));
});
}
| Risk Area | Mitigation Strategy |
|---|---|
| Printer Compatibility | Test with target printer models early; use CapabilityProfile::load("simple") as fallback. |
| Connection Failures | Implement retry logic (e.g., Laravel’s retry helper) or queue dead-letter handling. |
| Image Handling | Ensure imagick/gd extensions are installed for high-quality graphics. |
| Performance | Avoid blocking HTTP requests; use queues for print jobs. |
| Security | Restrict printer access to trusted services (e.g., Laravel middleware). |
| Cross-Platform USB | Use WindowsPrintConnector for Windows; FilePrintConnector for Linux/Mac. |
Printer instances with dynamic connectors (e.g., per-tenant printers).PrintingStarted/PrintingFailed events for observability.config/printer.php (e.g., IP, port, profiles).PrintReceiptJob).// app/Jobs/PrintReceiptJob.php
public function handle() {
$printer = app(Printer::class);
$printer->text("Order #{$this->order->id}");
$printer->barcode($this->order->tracking_number);
$printer->cut();
}
php artisan print:test to verify printer connectivity during deployment.POST /api/receipts endpoint to trigger prints from frontend/mobile apps.example/ directory as a template.PrinterService facade and register connectors in a service provider.Receipt model with a print() method.CapabilityProfile for vendor-specific printers (e.g., Star TSP100).PrinterRegistry to dynamically select connectors.| Component | Compatibility Notes |
|---|---|
| PHP Version | Requires PHP 7.3+ (Laravel 7+ compatible). |
| Printers | Test with target models early; refer to the compatibility table. |
| OS | Windows/Linux/Mac support varies by interface (e.g., USB-serial works everywhere). |
| Laravel | No framework-specific conflicts; works with Laravel 7+. |
| Dependencies | json, intl, zlib are PHP core extensions (usually enabled). |
sudo apt-get install php-json php-intl php-zlib on Linux).Printer facade and hardcoded connector for testing..env or a secrets manager.mike42/escpos-php for breaking changes (e.g., PHP 8+ compatibility).composer.json dependencies and test printer connectivity post-upgrade.CapabilityProfiles (contribute to escpos-printer-db).Printer::write() failures) to a dedicated channel (e.g., printer_errors).try {
$printer->text("Test");
} catch (Exception $e) {
Log::channel('printer_errors')->error("Print failed: " . $e->getMessage());
}
CapabilityProfile::load("simple") for ASCII-only fallback./dev/usb/lp0 on Linux).PRINTER_SETUP.md guide for non-technical staff (e.g., "How to connect a USB printer").retry helper or a custom retry queue for transient failures.| Failure Scenario | Mitigation Strategy |
|---|---|
| Printer Unreachable | Queue job for later retry; notify admin via Slack/email. |
How can I help you explore Laravel packages today?