Help with php_printer.dll

1

I use PHP 5.5.12 and downloaded the dll version compatible and when it opens the page nothing happens and also no error appears. I rebooted Wamp and added the corresponding lines in php.ini

php.ini

 printer.default_printer=PHP_INI_ALL
 extension=php_printer.dll

imprime_cupom.php

<?php

 $printer_name = "Daruma D800"; 
 $handle = printer_open($printer_name);
 printer_start_doc($handle, "Cupom Teste");
 printer_start_page($handle);
 $font = printer_create_font("Arial", 100, 100, 400, false, false, false, 0);
 printer_select_font($handle, $font);
 printer_draw_text($handle, 'Teste de Cupom.', 100, 400);
 printer_delete_font($font);
 printer_end_page($handle);
 printer_end_doc($handle);
 printer_close($handle);
 ?>
    
asked by anonymous 16.09.2017 / 03:50

1 answer

1
  

The php_printer extension is the default medium for getting printers attached to the server. However, it will not identify network printers that are not configured on the server because it does not allow discovery.

If even after installing the extension you were unable to try following these steps:

  

Getting printers without the extension, using only command line in windows:

     

When PHP alone can not, we can use some command line interface, be it a java or python script or even a php script running with an older php. The technique is to use a command line and treat the result string.

<?php
//Função para tratar o retorno 
function getPrinterProperty($key){
    $str = shell_exec('wmic printer get '.$key.' /value');

    $keyname = "$key=";
    $validValues = [];
    $fragments = explode(PHP_EOL,$str);
    foreach($fragments as $fragment){
        if($fragment == ""){
            continue;
        }
        if (preg_match('/('.$keyname.')/i', $fragment)) {
            array_push($validValues,str_replace($keyname,"",$fragment));
        }
    }
    return $validValues;
}
//Esplanação dos commandos:
// wmic /node:SERVER1 printer list status // Lista status das impressoras de um servidor remoto
// wmic printer list status // Lista status das impressoras  do servidor local
// wmic printer get // Obtem todas as propriedades da impressoa
// wmic printer get <propriedade> /value //Lista uma propriedade no formato chave=valor do servidor remoto
// wmic printer get <propriedade> /value //Lista uma propriedade no formato chave=valor do servidor local

//Obtém algumas propriedades, nesse caso vou pegar só algumas
$Name = getPrinterProperty("Name");
$Description =  getPrinterProperty("Description");
$Network = getPrinterProperty("Network");
$Local = getPrinterProperty("Local");
$PortName = getPrinterProperty("PortName");
$Default = getPrinterProperty("Default");
$Comment = getPrinterProperty("Comment");

$Printers = [];
foreach($Name as $i => $n){
    $Printers[$i] = (object)[
        "name" => $n,
        "description" => $Description[$i],
        "Portname" => $PortName[$i],
        "isDefault" =>($Default[$i] == "TRUE")? true : false,
        "isNetwork" => ($Network[$i] == "TRUE")? true : false,
        "isLocal" =>($Local[$i] == "TRUE")? true : false,
        "Comment" => $Comment[$i],
    ];
}

var_dump($Printers);

array(7) {
  [0]=>
  object(stdClass)#1 (7) {
    ["name"]=>
    string(29) "Microsoft XPS Document Writer"
    ["description"]=>
    string(0) ""
    ["Portname"]=>
    string(11) "PORTPROMPT:"
    ["isDefault"]=>
    bool(false)
    ["isNetwork"]=>
    bool(false)
    ["isLocal"]=>
    bool(true)
    ["Comment"]=>
    string(0) ""
  }
  [1]=>
  object(stdClass)#2 (7) {
    ["name"]=>
    string(22) "Microsoft Print to PDF"
    ["description"]=>
    string(0) ""
    ["Portname"]=>
    string(11) "PORTPROMPT:"
    ["isDefault"]=>
    bool(false)
    ["isNetwork"]=>
    bool(false)
    ["isLocal"]=>
    bool(true)
    ["Comment"]=>
    string(0) ""
  }
  [2]=>
  object(stdClass)#3 (7) {
    ["name"]=>
    string(32) "HPC4C962 (HP Officejet Pro 8600)"
    ["description"]=>
    string(0) ""
    ["Portname"]=>
    string(45) "WSD-5277c4df-fd03-46fb-a957-1d8a0fd65b01.003c"
    ["isDefault"]=>
    bool(true)
    ["isNetwork"]=>
    bool(false)
    ["isLocal"]=>
    bool(true)
    ["Comment"]=>
    string(30) "This is a web services printer"
  }
  [3]=>
  object(stdClass)#4 (7) {
    ["name"]=>
    string(29) "HP Officejet Pro L7600 Series"
    ["description"]=>
    string(0) ""
    ["Portname"]=>
    string(12) "192.168.1.22"
    ["isDefault"]=>
    bool(false)
    ["isNetwork"]=>
    bool(false)
    ["isLocal"]=>
    bool(true)
    ["Comment"]=>
    string(0) ""
  }
  [4]=>
  object(stdClass)#5 (7) {
    ["name"]=>
    string(24) "Foxit Reader PDF Printer"
    ["description"]=>
    string(0) ""
    ["Portname"]=>
    string(13) "FOXIT_Reader:"
    ["isDefault"]=>
    bool(false)
    ["isNetwork"]=>
    bool(false)
    ["isLocal"]=>
    bool(true)
    ["Comment"]=>
    string(0) ""
  }
  [5]=>
  object(stdClass)#6 (7) {
    ["name"]=>
    string(3) "Fax"
    ["description"]=>
    string(0) ""
    ["Portname"]=>
    string(7) "SHRFAX:"
    ["isDefault"]=>
    bool(false)
    ["isNetwork"]=>
    bool(false)
    ["isLocal"]=>
    bool(true)
    ["Comment"]=>
    string(0) ""
  }
  [6]=>
  object(stdClass)#7 (7) {
    ["name"]=>
    string(26) "Enviar para o OneNote 2013"
    ["description"]=>
    string(0) ""
    ["Portname"]=>
    string(4) "nul:"
    ["isDefault"]=>
    bool(false)
    ["isNetwork"]=>
    bool(false)
    ["isLocal"]=>
    bool(true)
    ["Comment"]=>
    string(0) ""
  }
}

You will now have the list of printers installed on your system, so you can use an application that allows you to run via the command line, such as Foxit Reader and use the following command:

<?php 

shell_exec('FoxitReader /t C:/Temp/file.txt "'.$Printers[0]->name.'"');

These procedures have been removed from the response List printers on the network with PHP I believe I can help you.

    
20.09.2017 / 16:15