9

I have a set of printers connect over a network with Static IP assigned to each printer.

Now i have a PHP web application running on a linux server which needs to send print jobs, to these printer over the network.

Is this possible using lpr or cups and how do i go about it.

Robin Green
  • 32,079
  • 16
  • 104
  • 187
user160108
  • 930
  • 3
  • 8
  • 38
  • possible duplicate of [print to a network printer using PHP](http://stackoverflow.com/questions/3722805/print-to-a-network-printer-using-php) – Spudley Apr 17 '11 at 16:58
  • This might help you.http://www.nongnu.org/phpprintipp/ – Parag Jul 27 '11 at 06:19

4 Answers4

10

You could use the LPR Printer class from here:

http://www.phpclasses.org/package/2540-PHP-Abstraction-for-printing-documents.html

Example:

<?php 
include("PrintSend.php");
include("PrintSendLPR.php");

$lpr = new PrintSendLPR(); 
$lpr->setHost("10.0.0.17"); //Put your printer IP here 
$lpr->setData("C:\\wampp2\\htdocs\\print\\test.txt"); //Path to file, OR string to print. 

$lpr->printJob("someQueue"); //If your printer has a built-in printserver, it might just accept anything as a queue name.
?>
Nirmal
  • 9,391
  • 11
  • 57
  • 81
  • I would have given you +1, but since the question specifies Linux and your example code uses a Windows directory path, I'm not sure. Can you confirm that this class works in Linux? – Spudley Apr 17 '11 at 18:45
  • @spudley thanks for the information will have to test the same with my network printer. I was also having a look at google cloud print which looks promising. – user160108 Apr 18 '11 at 05:19
  • 1
    @Spudley - The creator of that class didn't mention any specifics about Windows. So it must work on Linux too. Since I don't know or work on Linux, that directory path is all I understand. – Nirmal Apr 19 '11 at 03:30
  • Fair enough. I'll give you your +1 ;-) I don't have time to check the class for myself as the moment though. – Spudley Apr 19 '11 at 07:49
5

This question has been asked before. See print to a network printer using PHP

The answer given that time was exec("lpr -P 'printer' -r 'filename.txt');

However, the answer was never accepted so not sure whether the OP found it helpful; it certainly looks like it ought to do the trick, but it's not quite a direct and easy method of doing it from within PHP.

A number of other resources I found were also recommending variations on this approach.

Digging a bit deeper, I see PHP has got a Printer module in PECL. However it's only for Windows, and looks like it's not well maintained. But in case it helps, the link it here: http://www.php.net/manual/en/intro.printer.php

I think the answer ultimately is that PHP isn't really designed for this kind of thing, and doesn't have built-in functionality to do it. But since you can shell out to external commands using exec() and similar, it shouldn't be too hard to get it working, albeit not quite ideal.

Community
  • 1
  • 1
Spudley
  • 166,037
  • 39
  • 233
  • 307
3

Try PHP::PRINT::IPP

It worked perfectly for me.

Basic Usage

 <?php
  require_once(PrintIPP.php);

  $ipp = new PrintIPP();                        
  $ipp->setHost("localhost");
  $ipp->setPrinterURI("/printers/epson");
  $ipp->setData("./testfiles/test-utf8.txt"); // Path to file.
  $ipp->printJob();                                                          
?>

Reference

Harikrishnan
  • 9,688
  • 11
  • 84
  • 127
0

i was also doing research on this...and i think the below written code can help you in handling printer in linux

<?php
$printer = "\\\\Pserver.php.net\\printername");
if($ph = printer_open($printer))
{
   // Get file contents
   $fh = fopen("filename.ext", "rb");
   $content = fread($fh, filesize("filename.ext"));
   fclose($fh);

   // Set print mode to RAW and send PDF to printer
   printer_set_option($ph, PRINTER_MODE, "RAW");
   printer_write($ph, $content);
   printer_close($ph);
}
else "Couldn't connect...";
?>
Parteek
  • 21