WebPrint Client for PHP
API client for WebPrint Server
Installation
You can install the package via composer:
composer require kduma/webprint-client
Laravel Integration Setup
To enable integration with Laravel Framework, add following Service Provider to your providers array in app.php
config file:
\KDuma\WebPrintClient\Laravel\WebPrintClientServiceProvider::class,
And add following environment keys:
WEB_PRINT_ENDPOINT=<YOUR ENDPOINT>/api/web-print
WEB_PRINT_ACCESS_TOKEN=<YOUR TOKEN>
Usage
Available Methods:
Create Api Client Instance
$api = new \KDuma\WebPrintClient\WebPrintApi( new \KDuma\WebPrintClient\HttpClient\GuzzleHttp7Client( endpoint: 'https://print.server.local/api/web-print', key: 'API_KEY' ));
Get List of all available printers
$printers = $api->GetPrinters();
Get List of all printers capable processing ZPL language
$printers = $api->GetPrinters(type_filter: 'zpl');
Get Printer Details
$printer = $api->GetPrinter( ulid: '00000000000000000000000000');
Get List of recently submitted Promises
$promises = $api->GetPromises( page: 1, total_pages: &$total_pages // passed by reference);
Get Promise Details
$promise = $api->GetPromise( ulid: '00000000000000000000000000');
Create Promise
$promise = $api->CreatePromise( name: 'Print Job', type: 'zpl', meta: ['format' => '4x6"']);
Create and Immediately print Promise
$promise = $api->CreatePromiseAndPrint( name: 'Print Job', type: 'zpl', printer_ulid: '00000000000000000000000000', file_name: 'label.zpl', content: '^XA...');
Get Promise Details
$promise = $api->GetPromise( ulid: '00000000000000000000000000');
Update Promise
$api->UpdatePromise( ulid: '00000000000000000000000000', name: 'Updated', printer_ulid: '00000000000000000000000000', meta: ['dupa' => 123], ppd_options: [], status: 'ready');
Delete Promise
$api->DeletePromise( ulid: '00000000000000000000000000');
Get Promise Content
$content = $api->GetPromiseContent( ulid: '00000000000000000000000000');
Upload Promise Content
$api->SetPromiseContent( ulid: '00000000000000000000000000', content: fopen('myfile.txt', 'r'), file_name: 'myfile.txt');
Send Promise to Print Queue
$api->PrintPromise( ulid: '00000000000000000000000000');
Create Print Dialog
$dialog = $api->CreateDialog( ulid: '00000000000000000000000000', auto_print: true, redirect_url: 'http://example.com/', restricted_ip: '127.0.0.1');
Get Print Dialog
$dialog = $api->GetDialog( ulid: '00000000000000000000000000');
Example
Use create print Promise and redirect user to print Dialog;
public function PrintDocument(){ $api = new \KDuma\WebPrintClient\WebPrintApi( new \KDuma\WebPrintClient\HttpClient\GuzzleHttp7Client( endpoint: 'https://print.server.local/api/web-print', key: 'API_KEY' ) ); // Create Promise $promise = $api->CreatePromise( name: 'Test Document', type: 'ppd', meta: [ 'pages' => '2', 'date' => '2021-09-12' ] ); // Create Print Dialog $dialog = $api->CreateDialog( ulid: $promise, auto_print: true, redirect_url: 'http://example.com/return-url', ); // Generate PDF $pdf = PDF::loadView('documents.test'); // Upload Promise Content $api->SetPromiseContent( ulid: $promise, content: $pdf->output(), file_name: 'test.pdf' ); return redirect($dialog->getLink());}
Laravel Integration
To get access to API client, typehint WebPrintApiInterface
in your controllers or actions.
Get List of recently submitted Promises in form of LazyCollection
There is a helper method, allowing to do lazy processing on promises list.
$promises = $api->GetPromisesLazy();
Print Aliases
If you publish config file, you can set aliases and use them instead of ULID's in GetPrinter
, UpdatePromise
, CreatePromise
and CreatePromiseAndPrint
methods.
Example
Content upload after response termination (Laravel)
public function PrintDocument(WebPrintApiInterface $api){ // Create Promise $promise = $api->CreatePromise( name: 'Test Document', type: 'ppd', meta: [ 'pages' => '2', 'date' => '2021-09-12' ] ); // Create Print Dialog $dialog = $api->CreateDialog( ulid: $promise, auto_print: true, redirect_url: 'http://example.com/return-url', ); App::terminating(function () use ($promise, $api) { // Generate PDF $pdf = PDF::loadView('documents.test'); // Upload Promise Content $api->SetPromiseContent( ulid: $promise, content: $pdf->output(), file_name: 'test.pdf' ); }); return redirect($dialog->getLink());}
Headless printing, with using alias instead of ulid.
public function PrintLabel(WebPrintApiInterface $api){ $promise = $api->CreatePromiseAndPrint( name: 'Print Job', type: 'zpl', printer_ulid: 'printer_alias', file_name: 'label.zpl', content: '^XA...' );}
Table of Contents
- Installation
- Usage
- Create Api Client Instance
- Get List of all available printers
- Get List of all printers capable processing ZPL language
- Get Printer Details
- Get List of recently submitted Promises
- Get Promise Details
- Create Promise
- Create and Immediately print Promise
- Get Promise Details
- Update Promise
- Delete Promise
- Get Promise Content
- Upload Promise Content
- Send Promise to Print Queue
- Create Print Dialog
- Get Print Dialog
- Example
- Laravel Integration