Печать PHP с использованием некоторых соединений MySQL не работает, есть ли лучший способ?

Я получаю эти этикетки для кабинета врача, и они должны быть напечатаны. Печать выполняется с помощью пользовательской надстройки меню календаря C # Outlook, вызываемой правой кнопкой мыши, поэтому локальные принтеры не используются. Кроме того, эта установка PHP была установлена ​​задолго до моего времени и не переписывается для клиента.

ArrivalHelper.php Система вызывает скрипт ниже, «PrintersMgmt.php», а затем вызывает PinnaclePDO.php подключиться к экземпляру MySQL, работающему на сервере Ubuntu, чтобы найти местоположение офиса (в данном случае locID равно 2), а затем находит принтер в этой таблице MySQL и на каком сервере (в данном случае cc-fp2), который его размещает, и отправляет эта информация возвращается к печати.

Мне нужно найти способ сделать это лучше. Я думал об использовании JavaScript, чтобы открыть диалоговое окно печати, но я понятия не имею, как реализовать это здесь. Может кто-нибудь дать нубу PHP несколько указателей?

<?php

class PrintersMgmt {
const PRINT_ALL_LABELS    = 0x1;
const PRINT_ONE_LABEL     = 0x10;
const PRINT_PASSPORT      = 0x100;
const PRINT_REFERRAL      = 0x1000;

const PRINTER_TYPE_LETTER = 1;
const PRINTER_TYPE_LABEL  = 2;

const
ARRIVAL_URL = 'http://localhost/arrival.php';

const QUERY_GET_PRINTER_BY_LOC_TYPE =
'SELECT * FROM LocationPrinters
WHERE locID = :loc AND printerType = :type
ORDER BY printerPriority
LIMIT 1';

private $dbh;

public function __construct() {
$this->dbh = new PinnaclePDO();
}

public function getByLocationType( $loc, $type ) {
$stmt = $this->dbh->prepare( self::QUERY_GET_PRINTER_BY_LOC_TYPE );
$stmt->bindValue( ':loc', $loc );
$stmt->bindValue( ':type', $type );
$stmt->execute();

return $stmt->fetch();
}

public function printPassport( $locId, $hin, $date, $userName, $method ) {

$printFlags = $this->getPrintFlags($method);
$referral = ( ! ($printFlags & self::PRINT_REFERRAL) == 0 );
$passport = ( ! ($printFlags & self::PRINT_PASSPORT) == 0 );

$printer = $this->getByLocationType( $locId, 1 );
if ( $printer ) {
$cmd = '.\firefox.exe';
$args = sprintf(
' -print "%s?method=%s&hin=%s&user=%s&referral=%d&passport=%d"' .
' -printprinter "\\\\' . $printer[ 'printerHost' ] . '\\' . $printer[ 'printerName' ] .'"',
self::ARRIVAL_URL, 'listconfirmed',
$hin, urlencode( $userName ), $referral, $passport
);

if ( isset( $_GET[ 'debug' ] ) ) {
print "Print with args: '$cmd $args'<br/>";
}

chdir( "C:/Program Files/Mozilla Firefox2/" );
shell_exec($cmd.$args);
}
return true;
}

public function printLabel( $locId, $hin, $date, $method ) {

$printFlags = $this->getPrintFlags($method);
$printer = $this->getByLocationType( $locId, 2 );
$number = ( ( $printFlags & self::PRINT_ONE_LABEL ) == 0 ) ? 'all' : 'one' ;
$cmd = 'LabelPrinter.exe';
$args = sprintf(
' /print %s %s "%s" %s',
$hin, $date, $printer[ 'printerName' ], $number );

if ( isset( $_GET[ 'debug' ] ) ) {
print sprintf( 'Printing \'%s\' labels \'%s %s\'<br/>',
$number, $cmd, $args  );
} else {
chdir( "C:/Program Files/(truncated)/(truncated) Tools" );
shell_exec( $cmd . $args);
}
return true;
}

public function getPrintFlags( $arriveMethod ) {
$printFlags = 0x1101;
switch ( $arriveMethod ) {
case 'arrive':
$printFlags =
( self::PRINT_ALL_LABELS
| self::PRINT_PASSPORT
| self::PRINT_REFERRAL );
break;
case 'reprintpassport':
$printFlags = self::PRINT_PASSPORT;
break;
case 'reprintreferral':
$printFlags = self::PRINT_REFERRAL;
break;
case 'reprintlabel':
$printFlags = self::PRINT_ONE_LABEL;
break;
default:
$printFlags = null;
}
return $printFlags;
}

}

?>

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector