host = $host; $this->port = $port; $this->timeout = $timeout; $this->queue = $queue; } // // Send file to remote network printer. // function print_file($fname){ $queue = $this->queue; //Private static function prints waiting jobs on the queue. $ret = $this->flush_queue($queue); // if($ret) return $ret; //Open a new connection to send the control file and data. $stream = @fsockopen("tcp://".$this->host, $this->port, $errNo, $errStr, $this->timeout); if(!$stream){ return _('Cannot open connection to printer').":
$errStr"; } if (!isset($_SESSION['_print_job'])) { $_SESSION['print_job'] = 0; } $job = $_SESSION['print_job']++; //Set printer to receive file fwrite($stream, chr(2).$queue."\n"); $ack = fread($stream, 1); if ($ack != 0) { fclose($stream); return _('Printer does not acept the job').' ('.ord($ack).')'; } // Send Control file. $server = $_SERVER['SERVER_NAME']; $ctrl = "H".$server."\nP". substr($_SESSION["wa_current_user"]->loginname,0,31) ."\nfdfA".$job.$server."\n"; fwrite($stream, chr(2).strlen($ctrl)." cfA".$job.$server."\n"); $ack = fread($stream, 1); if ($ack != 0) { fclose($stream); return _('Error sending print job control file').' ('.ord($ack).')'; } fwrite($stream, $ctrl.chr(0)); //Write null to indicate end of stream $ack = fread($stream, 1); if ($ack != 0) { fclose($stream); return _('Print control file not accepted').' ('.ord($ack).')'; } $data = fopen($fname, "rb"); fwrite($stream, chr(3).filesize($fname)." dfA".$job.$server."\n"); $ack = fread($stream, 1); if ($ack != 0) { fclose($stream); return _('Cannot send report to printer').' ('.ord($ack).')'; } while(!feof($data)){ if (fwrite($stream, fread($data, 8192))<8192) break; } fwrite($stream, chr(0)); //Write null to indicate end of stream $ack = fread($stream, 1); if ($ack != 0) { fclose($stream); return _('No ack after report printout').' ('.ord($ack).')'; } fclose($data); fclose($stream); return ''; } // // Print all waiting jobs on remote printer queue. // function flush_queue($queue){ $stream = @fsockopen("tcp://".$this->host, $this->port,$errNo, $errStr, $this->timeout); if (!$stream){ return _('Cannot flush printing queue').":
$errStr"; // .':
' . $errNo." (".$errStr.")"; return 0 (success) even on failure } else { //Print any waiting jobs fwrite($stream, chr(1).$queue."\n"); while(!feof($stream)){ fread($stream, 1); } } return false; } }