stikkx / cups-ipp

CUPS的IPP实现 - PHP客户端API (PHP >= 7.2.5)

dev-master 2024-07-12 12:16 UTC

This package is not auto-updated.

Last update: 2024-09-21 11:26:32 UTC


README

CUPS的IPP实现 - PHP客户端API

(smalot/cups-ipp的另一个分支,一个很棒的smalot/cups-ipp,已更新以使用GuzzleHttp\Client,支持PHP >= 7.2.5)

CUPS (通用Unix打印系统) 是一种针对Unix-like计算机操作系统的模块化打印系统,允许计算机作为打印服务器。运行CUPS的计算机可以作为主机接受来自客户端计算机的打印作业,处理它们并将它们发送到相应的打印机。

Build Status Current Version Total Downloads Latest Unstable Version License

通过Composer安装

您可以使用Composer安装此组件。

composer require stikkx/cups-ipp

然后,需要包含vendor/autoload.php文件以启用Composer提供的自动加载机制。否则,您的应用程序将无法找到此组件的类。

要求

此库使用Unix sock连接:unix:///var/run/cups/cups.sock

首先,检查您是否可以正确访问此文件:/var/run/cups/cups.sock

实现

列出打印机

<?php

include 'vendor/autoload.php';

use Smalot\Cups\Builder\Builder;
use Smalot\Cups\Manager\PrinterManager;
use Smalot\Cups\Transport\Client;
use Smalot\Cups\Transport\ResponseParser;

$client = new Client();
$builder = new Builder();
$responseParser = new ResponseParser();

$printerManager = new PrinterManager($builder, $client, $responseParser);
$printers = $printerManager->getList();

foreach ($printers as $printer) {
    echo $printer->getName().' ('.$printer->getUri().')'.PHP_EOL;
}

列出所有打印机的作业

<?php

include 'vendor/autoload.php';

use Smalot\Cups\Builder\Builder;
use Smalot\Cups\Manager\JobManager;
use Smalot\Cups\Manager\PrinterManager;
use Smalot\Cups\Transport\Client;
use Smalot\Cups\Transport\ResponseParser;

$client = new Client();
$builder = new Builder();
$responseParser = new ResponseParser();

$printerManager = new PrinterManager($builder, $client, $responseParser);
$printer = $printerManager->findByUri('ipp://:631/printers/HP-Photosmart-C4380-series');

$jobManager = new JobManager($builder, $client, $responseParser);
$jobs = $jobManager->getList($printer, false, 0, 'completed');

foreach ($jobs as $job) {
    echo '#'.$job->getId().' '.$job->getName().' - '.$job->getState().PHP_EOL;
}

创建并发送新的作业

<?php

include 'vendor/autoload.php';

use Smalot\Cups\Builder\Builder;
use Smalot\Cups\Manager\JobManager;
use Smalot\Cups\Manager\PrinterManager;
use Smalot\Cups\Model\Job;
use Smalot\Cups\Transport\Client;
use Smalot\Cups\Transport\ResponseParser;

$client = new Client();
$builder = new Builder();
$responseParser = new ResponseParser();

$printerManager = new PrinterManager($builder, $client, $responseParser);
// Find the printer by the Uri
//$printer = $printerManager->findByUri('ipp://:631/printers/HP-Photosmart-C4380-series');

// or by the name
$printers = $printerManager->findByName('HP-Photosmart-C4380-series');
if (!empty($printers)) {
    $printer = $printers[0];
    $jobManager = new JobManager($builder, $client, $responseParser);
    
    $job = new Job();
    $job->setName('job create file');
    $job->setUsername('demo');
    $job->setCopies(1);
    $job->setPageRanges('1'); // This can be left out, it will print all pages by default
    $job->addFile('./helloworld.pdf');
    $job->addAttribute('media', 'A4');
    $job->addAttribute('fit-to-page', true);
    $result = $jobManager->send($printer, $job);
}

远程CUPS服务器

您可以通过在构造客户端时提供连接详情,轻松连接到远程CUPS服务器。

<?php

include 'vendor/autoload.php';

use Smalot\Cups\Builder\Builder;
use Smalot\Cups\Manager\JobManager;
use Smalot\Cups\Manager\PrinterManager;
use Smalot\Cups\Transport\Client;
use Smalot\Cups\Transport\ResponseParser;

$client = new Client('username', 'password', ['remote_socket' => 'http://server-ip:631']);
$builder = new Builder();
$responseParser = new ResponseParser();

$printerManager = new PrinterManager($builder, $client, $responseParser);
$printer = $printerManager->findByUri('ipp://:631/printers/HP-Photosmart-C4380-series');

$jobManager = new JobManager($builder, $client, $responseParser);
$jobs = $jobManager->getList($printer, false, 0, 'completed');

foreach ($jobs as $job) {
    echo '#'.$job->getId().' '.$job->getName().' - '.$job->getState().PHP_EOL;
}