Initial commit
This commit is contained in:
commit
d03428a2e4
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
/composer.lock
|
||||
/vendor
|
18
composer.json
Normal file
18
composer.json
Normal file
@ -0,0 +1,18 @@
|
||||
{
|
||||
"name": "noccylabs/lpr",
|
||||
"description": "Print documents and images through lpr",
|
||||
"type": "library",
|
||||
"license": "GPL-3.0",
|
||||
"authors": [
|
||||
{
|
||||
"name": "Christopher Vagnetoft",
|
||||
"email": "cvagnetoft@gmail.com"
|
||||
}
|
||||
],
|
||||
"require": {},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"NoccyLabs\\Lpr\\": "src/"
|
||||
}
|
||||
}
|
||||
}
|
7
src/LprException.php
Normal file
7
src/LprException.php
Normal file
@ -0,0 +1,7 @@
|
||||
<?php
|
||||
|
||||
namespace NoccyLabs\Lpr;
|
||||
|
||||
class LprException extends \RuntimeException
|
||||
{}
|
||||
|
145
src/PrintJob.php
Normal file
145
src/PrintJob.php
Normal file
@ -0,0 +1,145 @@
|
||||
<?php
|
||||
|
||||
namespace NoccyLabs\Lpr;
|
||||
|
||||
class PrintJob
|
||||
{
|
||||
/** @var string The print server to use (-H) */
|
||||
protected $server;
|
||||
/** @var string The name of the print job (-T) */
|
||||
protected $jobName;
|
||||
/** @var string Document filename */
|
||||
protected $document;
|
||||
/** @var string The printer to use as destination[/instance] (-P) */
|
||||
protected $printer;
|
||||
/** @var array The job options (-o) */
|
||||
protected $options = [];
|
||||
/** @var bool If true, encryption is forced when communicating with server (-E) */
|
||||
protected $forceEncryption = false;
|
||||
/** @var bool If true, the named print files will be deleted by lpr after print (-r) */
|
||||
protected $deleteAfterPrint = false;
|
||||
|
||||
/**
|
||||
* Constructor; creates a new print job.
|
||||
*
|
||||
*
|
||||
*/
|
||||
public function __construct($document, $printer=null, $server=null)
|
||||
{
|
||||
$this->document = $document;
|
||||
$this->printer = $printer;
|
||||
$this->server = $server;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*
|
||||
* @return PrintJob
|
||||
*/
|
||||
public function setPrinter($printer)
|
||||
{
|
||||
$this->printer = $printer;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*
|
||||
* @return PrintJob
|
||||
*/
|
||||
public function setMedia($media)
|
||||
{
|
||||
$this->media = $media;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*
|
||||
* @param string $name The print job name to use
|
||||
* @return PrintJob
|
||||
*/
|
||||
public function setJobName($name)
|
||||
{
|
||||
$this->jobName = $name;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*
|
||||
* @return PrintJob
|
||||
*/
|
||||
public function setServer($server, $port)
|
||||
{
|
||||
$this->server = $server . (!!$port?":{$port}":"");
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*
|
||||
* @return PrintJob
|
||||
*/
|
||||
public function setOption($option, $value)
|
||||
{
|
||||
$this->options[$option] = $value;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Attempt to submit the job using the lpr command.
|
||||
*
|
||||
*
|
||||
*/
|
||||
public function submit()
|
||||
{
|
||||
$options = [];
|
||||
if ($this->server !== null) {
|
||||
$options[] = "-H";
|
||||
$options[] = $this->server;
|
||||
}
|
||||
if ($this->printer !== null) {
|
||||
$options[] = "-P";
|
||||
$options[] = $this->printer;
|
||||
}
|
||||
if ($this->jobName !== null) {
|
||||
$options[] = "-T";
|
||||
$options[] = $this->jobName;
|
||||
}
|
||||
foreach ($this->options as $option=>$value) {
|
||||
$options[] = "-o";
|
||||
if ($value === true) {
|
||||
$options[] = $option;
|
||||
} else {
|
||||
$options[] = $option."=".$value;
|
||||
}
|
||||
}
|
||||
|
||||
$optionString = join(" ", array_map("escapeshellarg", $options));
|
||||
$cmdLine = sprintf("lpr %s %s", $optionString, escapeshellarg($this->document));
|
||||
|
||||
$ds = [
|
||||
1 => [ 'pipe', 'w' ],
|
||||
2 => [ 'pipe', 'w' ]
|
||||
];
|
||||
$proc = proc_open($cmdLine, $ds, $pipes);
|
||||
|
||||
do {
|
||||
usleep(10000);
|
||||
$status = proc_get_status($proc);
|
||||
} while ($status['running']);
|
||||
|
||||
if ($status['exitcode'] > 0) {
|
||||
$stderr = stream_get_contents($pipes[2]);
|
||||
throw new LprException(
|
||||
sprintf("lpr exited with code %d: %s", $status['exitcode'], $stderr)
|
||||
);
|
||||
}
|
||||
|
||||
proc_close($proc);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user